From 2144e8803a28c3206fb4980af961f3bd98fbd28b Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 9 Jun 2021 16:46:33 +0800 Subject: [PATCH 01/65] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E4=BB=93?= =?UTF-8?q?=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 17 - .gitattributes | 1 - .jshintrc | 9 - .spmignore | 6 - .travis.yml | 13 - CHANGELOG.md | 137 - LICENSE | 21 - README.md | 31 - bin/random | 81 - bower.json | 24 - dist/mock-min.js | 10 - dist/mock-min.js.map | 1 - dist/mock.js | 8543 ------------------------------ gulpfile.js | 164 - package.json | 49 - src/dependencies.png | Bin 344355 -> 0 bytes src/mock.js | 67 - src/mock/RE_KEY.svg | 83 - src/mock/constant.js | 33 - src/mock/handler.js | 544 -- src/mock/parser.js | 71 - src/mock/random/address.js | 47 - src/mock/random/address_dict.js | 4068 -------------- src/mock/random/basic.js | 126 - src/mock/random/color.js | 137 - src/mock/random/color_convert.js | 177 - src/mock/random/color_dict.js | 76 - src/mock/random/date.js | 141 - src/mock/random/helper.js | 116 - src/mock/random/image.js | 282 - src/mock/random/index.js | 24 - src/mock/random/misc.js | 105 - src/mock/random/name.js | 87 - src/mock/random/text.js | 121 - src/mock/random/web.js | 76 - src/mock/regexp/handler.js | 392 -- src/mock/regexp/index.js | 6 - src/mock/regexp/parser.js | 570 -- src/mock/schema/index.js | 1 - src/mock/schema/schema.js | 47 - src/mock/util.js | 126 - src/mock/valid/index.js | 1 - src/mock/valid/valid.js | 445 -- src/mock/xhr/index.js | 1 - src/mock/xhr/xhr.js | 442 -- test/bower.json | 11 - test/materiels/noop.html | 2 - test/materiels/noop.js | 1 - test/package.json | 6 - test/test.coveralls.js | 35 - test/test.mock.html | 58 - test/test.mock.mock.js | 62 - test/test.mock.random.js | 464 -- test/test.mock.request.js | 445 -- test/test.mock.schema.js | 205 - test/test.mock.spec.dpd.js | 245 - test/test.mock.spec.dtd.js | 677 --- test/test.mock.valid.js | 308 -- test/valid.js | 264 - 59 files changed, 20302 deletions(-) delete mode 100644 .editorconfig delete mode 100644 .gitattributes delete mode 100644 .jshintrc delete mode 100644 .spmignore delete mode 100644 .travis.yml delete mode 100644 CHANGELOG.md delete mode 100644 LICENSE delete mode 100644 README.md delete mode 100644 bin/random delete mode 100644 bower.json delete mode 100644 dist/mock-min.js delete mode 100644 dist/mock-min.js.map delete mode 100644 dist/mock.js delete mode 100644 gulpfile.js delete mode 100644 package.json delete mode 100644 src/dependencies.png delete mode 100644 src/mock.js delete mode 100644 src/mock/RE_KEY.svg delete mode 100644 src/mock/constant.js delete mode 100644 src/mock/handler.js delete mode 100644 src/mock/parser.js delete mode 100644 src/mock/random/address.js delete mode 100644 src/mock/random/address_dict.js delete mode 100644 src/mock/random/basic.js delete mode 100644 src/mock/random/color.js delete mode 100644 src/mock/random/color_convert.js delete mode 100644 src/mock/random/color_dict.js delete mode 100644 src/mock/random/date.js delete mode 100644 src/mock/random/helper.js delete mode 100644 src/mock/random/image.js delete mode 100644 src/mock/random/index.js delete mode 100644 src/mock/random/misc.js delete mode 100644 src/mock/random/name.js delete mode 100644 src/mock/random/text.js delete mode 100644 src/mock/random/web.js delete mode 100644 src/mock/regexp/handler.js delete mode 100644 src/mock/regexp/index.js delete mode 100644 src/mock/regexp/parser.js delete mode 100644 src/mock/schema/index.js delete mode 100644 src/mock/schema/schema.js delete mode 100644 src/mock/util.js delete mode 100644 src/mock/valid/index.js delete mode 100644 src/mock/valid/valid.js delete mode 100644 src/mock/xhr/index.js delete mode 100644 src/mock/xhr/xhr.js delete mode 100644 test/bower.json delete mode 100644 test/materiels/noop.html delete mode 100644 test/materiels/noop.js delete mode 100644 test/package.json delete mode 100644 test/test.coveralls.js delete mode 100644 test/test.mock.html delete mode 100644 test/test.mock.mock.js delete mode 100644 test/test.mock.random.js delete mode 100644 test/test.mock.request.js delete mode 100644 test/test.mock.schema.js delete mode 100644 test/test.mock.spec.dpd.js delete mode 100644 test/test.mock.spec.dtd.js delete mode 100644 test/test.mock.valid.js delete mode 100644 test/valid.js diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index dd139df8..00000000 --- a/.editorconfig +++ /dev/null @@ -1,17 +0,0 @@ -# editorconfig.org -root = true - -[*] -indent_style = space -indent_size = 4 -end_of_line = lf -charset = utf-8 -trim_trailing_whitespace = true -insert_final_newline = true - -[package.json] -indent_style = space -indent_size = 2 - -[*.md] -trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 176a458f..00000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -* text=auto diff --git a/.jshintrc b/.jshintrc deleted file mode 100644 index c4dd6938..00000000 --- a/.jshintrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "expr": true, - "asi": true, - "strict": false, - "undef": true, - "unused": "strict", - "multistr": true, - "node": true -} \ No newline at end of file diff --git a/.spmignore b/.spmignore deleted file mode 100644 index df3c99f8..00000000 --- a/.spmignore +++ /dev/null @@ -1,6 +0,0 @@ -bin -demo -doc -editor -src -test diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 3071aca4..00000000 --- a/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: node_js -node_js: - - '0.10' -before_install: -  - npm install -g gulp - - npm install -g bower -before_script: - - bower install - - cd test - - bower install - - cd .. -after_script: - - npm run coveralls diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 863be23d..00000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,137 +0,0 @@ -# Changelog - -## 2015.12.03 V0.2.0-alpha2 - -1. 改用 webpack 打包 - -### 2014.3.20 V0.2.0-alpha1 - -1. 增加网站 - -### 2014.12.23 V0.2.0 重构代码 - -1. 改用 gulp 打包 -2. 改用 mocha 重写测试用例 -3. 改用 requirejs 重构代码 - -### 2014.6.24 V0.2.0 重构代码 - -1. 支持 UMD,包括: - * 未打包前的代码 - * 打包后的代码 -2. random CLI - * --help 增加方法和参数说明 -3. 重构文档站 @萝素 - * 增加《入门》 - * 单列《文档》 -4. 测试用例 - * 重写测试用例 - * 同时支持 nodeunit 和 qunit - * 同时支持 jQuery、KISSY、Zepto - * 同时支持 KMD、AMD、CMD -5. 复写 XHR @行列 @霍庸 -6. 废弃的功能 - * Mock.mockjax() - * Mock.tpl() - * Mock.xtpl() -7. Random.dateImage() 支持 node-canvas -8. Mock.valid(tpl, data) -9. Mock.toJOSNSchema() -10. Mock.mock(regexp) -11. 完善地支持 node,代码中的: - * window - * document - * XHRHttpRequest -12. 支持相对路径 - -### 2014.6.23 V0.1.5 - -1. [!] 修复 #28 #29,因为 jQuery 每个版本在 Ajax 实现上有些差异,导致在拦截 Ajax 请求时出现了兼容性问题(例如,方法 `xhr.onload()` 访问不到)。本次[测试](http://jsfiddle.net/8y8Fz/)并通过的 jQuery 版本有: - - * jQuery 2.1.0 - * jQuery 2.0.2 - * jQuery 1.11.0 - * jQuery 1.10.1 - * jQuery 1.9.1 - * jQuery 1.8.3 - * jQuery 1.7.2 - * jQuery 1.6.4 - -非常抱歉,这个问题一直困扰着 Mock.js 用户,在后面的版本中,会通过拦截 XMLHttpRequest 的方法“一劳永逸”地解决拦截 Ajax 的兼容和适配问题。 - -### 2014.6.18 V0.1.4 - -1. [!] 修复 #14 0.1.1版本试了好像jq1.10可以,1.11下$.ajax拦截没反应 -2. [!] 修复 #22 异步加载js文件的时候发现问题 -3. [!] 修复 #23 Mock.mockjax 导致 $.getScript 不执行回调 -4. [!] 修复 #24 Window Firefox 30.0 引用 占位符 抛错 -5. [!] 修复 #25 改变了非函数属性的顺序,查找起来不方便 -6. [!] 修复 #26 生成规则 支持 负数 number|-100-+100 -7. [!] 修复 #27 数据模板编辑器 格式化(Tidy) 时会丢掉 函数属性 -8. [+] 数据模板编辑器 增加了 编辑区 和 生成结果区 的同步滚动 -9. [!] test/nodeuinit > test/nodeunit - -### 2014.5.26 V0.1.3 - -1. [!] 修复 #21 - -### 2014.5.26 V0.1.2 - -1. [!] 重构 Mock.mockjax() -2. [!] 更新 package.json/devDependencies -3. [+] 增加 懒懒交流会 PPT - -### 2014.5.9 V0.1.2 -1. [+] 支持 [`Mock.mock(rurl, rtype, template)`](http://mockjs.com/#mock) -2. [+] 支持 [`'name|min-max': {}`、`'name|count': {}`](http://mockjs.com/#语法规范) -3. [+] 支持 [`'name': function(){}`](http://mockjs.com/#语法规范) -4. [+] 新增占位符 [@NOW](http://mockjs.com/#now) -5. [+] 更新了 [语法规范](http://mockjs.com/#语法规范) - -### 2013.9.6 -1. 增加占位符 @DATAIMAGE -2. 解析占位符时**完全**忽略大小写 - -### 2013.9.3 -1. 文档增加用法示例:Sea.js (CMD)、RequireJS (AMD) -2. 增加对 CMD 规范的支持 -3. 生成 SourceMap 文件 `dist/mock-min.map` - -### 2013.8.21 -1. 100% 基于客户端模板生成模拟数据,支持 KISSY XTemplate。 -1. 调整文件结构。 - -### 2013.8.11 -1. 80% 基于客户端模板生成模拟数据。 -1. 完善针对 KISSY XTemplate 的测试用例 [test/mock4tpl-xtpl-node.js](test/mock4tpl-xtpl-node.js)。 -1. [Mock4Tpl](src/tpl/mock4tpl.js) 支持 Partials。 -1. Mock 支持转义 @。 -1. 更新 README.md,增加对 Mock4Tpl 的说明。 -1. 完善 [demo](demo/)。 -1. 减少 Mock、Mock4Tpl 暴漏的 API。 - -### 2013.8.7 -1. 75% 基于客户端模板生成模拟数据。 -1. 完善测试用例 [test/mock4tpl-node.js](test/mock4tpl-node.js)。 -1. 重构文件和目录结构,把代码模块化。 -1. 参考 Handlebars.js,引入 Jison 生成模板解析器。 - -#### 2013.8.2 -1. 60% 基于客户端模板生成模拟数据。 -1. 增加测试用例 [test/mock4tpl-node.js](test/mock4tpl-node.js),参考自 。 - -#### 2013.7.31 -1. 50% 基于客户端模板生成模拟数据。 - -#### 2013.7.18 -1. 增加占位符 @COLOR。 -1. 完善对占位符的解析,过滤掉 `#%&()?/.`。 -1. 对“支持的占位符”分组。 - -#### 2013.7.12 -1. Mock.mock(rurl, template) 的参数 rurl 可以是字符串或正则。 -1. 把产生随机元数据的接口封装到 Mock.Random 中。 -1. 增加对日期的格式化。 -1. 增加占位符 @IMG、@PARAGRAPH、@SENTENCE、@WORD、@FIRST、@LAST、@NAME、@DOMAIN、@EMAIL、@IP、@ID。 -1. 支持嵌套的占位符,例如 `@IMG(@AD_SIZE)`。 -1. 支持把普通属性当作占位符使用,例如 `@IMG(@size)`。 \ No newline at end of file diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 41ccca60..00000000 --- a/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 nuysoft -http://mockjs.com/ - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md deleted file mode 100644 index b32357a3..00000000 --- a/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Mock.js - -[![Build Status](https://travis-ci.org/nuysoft/Mock.svg?branch=refactoring)](https://travis-ci.org/nuysoft/Mock) - - - -Mock.js is a simulation data generator to help the front-end to develop and prototype separate from the back-end progress and reduce some monotony particularly while writing automated tests. - -The official site: - -## Features - -* Generate simulated data according to the data template -* Provide request/response mocking for ajax requests -* ~~Generate simulated data according to HTML-based templates~~ - -This library is loosely inspired by Elijah Manor's post [Mocking -Introduction](http://www.elijahmanor.com/2013/04/angry-birds-of-javascript-green-bird.html), [mennovanslooten/mockJSON](https://github.com/mennovanslooten/mockJSON), [appendto/jquery-mockjax](https://github.com/appendto/jquery-mockjax) and [victorquinn/chancejs](https://github.com/victorquinn/chancejs/). - -## Questions? -If you have any questions, please feel free to ask through [New Issue](https://github.com/nuysoft/Mock/issues/new). - -## Reporting an Issue -Make sure the problem you're addressing is reproducible. Use or to provide a test page. Indicate what browsers the issue can be reproduced in. What version of Mock.js is the issue reproducible in. Is it reproducible after updating to the latest version? - -## License -Mock.js is available under the terms of the [MIT License](./LICENSE). \ No newline at end of file diff --git a/bin/random b/bin/random deleted file mode 100644 index 13e7e969..00000000 --- a/bin/random +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env node - -"use strict"; - -/* - https://github.com/visionmedia/commander.js - http://visionmedia.github.io/commander.js/ - https://github.com/visionmedia/commander.js/tree/master/examples - - sudo npm install ./ -g -*/ - -var path = require('path') -var program = require('commander') -var pkg = require(path.resolve(__dirname, '../package.json')) -var Random = require('../dist/mock.js').Random - -program - .version(pkg.version) - .on('--help', function() { - console.log(' Examples:') - console.log('') - console.log(' $ random date yyyy-MM-dd') - console.log(' $ random time HH:mm:ss') - console.log('') - }) - -; -(function() { - - var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m - var FN_ARG_SPLIT = /,/ - var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/ - var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg - var EXCLUDE = [ - 'extend', - 'dataImage', // mock/random/image - 'capitalize', 'upper', 'lower', 'pick', 'shuffle', 'order', // mock/random/helper.js - 'increment', 'inc' // mock/random/misc.js - ] - - function parseArgs(fn) { - var fnText = fn.toString().replace(STRIP_COMMENTS, '') - var argDecl = fnText.match(FN_ARGS) - return argDecl[1].split(FN_ARG_SPLIT).join(', ') - } - - Object.keys(Random).forEach(function(key) { - if (key[0] === '_') return - if (EXCLUDE.indexOf(key) !== -1) return - - var fn = Random[key] - if (typeof fn === 'function') { - var argDecl = parseArgs(fn) - if (argDecl) argDecl = '( ' + argDecl + ' )' - else argDecl = '()'; - - program - .command(key) - .description('Random.' + key + argDecl) - .action(function() { - var args = [].slice.call(arguments, 0, -1) - var result = fn.apply(Random, args) - console.log(result) - }) - } - }) - -})() - -program.parse(process.argv) - -; -(function() { - var cmd = program.args[0] - if (!cmd) { - process.stdout.write(program.helpInformation()) - program.emit('--help') - process.exit() - } -})() \ No newline at end of file diff --git a/bower.json b/bower.json deleted file mode 100644 index 4c53d58a..00000000 --- a/bower.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "mockjs", - "title": "Mock.js", - "main": "dist/mock.js", - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "src", - "test", - "site", - "plugins", - "package.json", - "gulpfile.js", - "AUTHORS.txt", - "CONTRIBUTING.md", - "HISTORY.md", - "CHANGELOG.md", - "README.md", - "LICENSE" - ], - "devDependencies": {} -} \ No newline at end of file diff --git a/dist/mock-min.js b/dist/mock-min.js deleted file mode 100644 index 0bf774de..00000000 --- a/dist/mock-min.js +++ /dev/null @@ -1,10 +0,0 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Mock=e():t.Mock=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var a=n[r]={exports:{},id:r,loaded:!1};return t[r].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){var r,a=n(1),o=n(3),u=n(5),i=n(20),l=n(23),c=n(25);"undefined"!=typeof window&&(r=n(27));/*! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - */ -var s={Handler:a,Random:u,Util:o,XHR:r,RE:i,toJSONSchema:l,valid:c,heredoc:o.heredoc,setup:function(t){return r.setup(t)},_mocked:{}};s.version="1.0.1-beta3",r&&(r.Mock=s),s.mock=function(t,e,n){return 1===arguments.length?a.gen(t):(2===arguments.length&&(n=e,e=void 0),r&&(window.XMLHttpRequest=r),s._mocked[t+(e||"")]={rurl:t,rtype:e,template:n},s)},t.exports=s},function(module,exports,__webpack_require__){var Constant=__webpack_require__(2),Util=__webpack_require__(3),Parser=__webpack_require__(4),Random=__webpack_require__(5),RE=__webpack_require__(20),Handler={extend:Util.extend};Handler.gen=function(t,e,n){e=void 0==e?"":e+"",n=n||{},n={path:n.path||[Constant.GUID],templatePath:n.templatePath||[Constant.GUID++],currentContext:n.currentContext,templateCurrentContext:n.templateCurrentContext||t,root:n.root||n.currentContext,templateRoot:n.templateRoot||n.templateCurrentContext||t};var r,a=Parser.parse(e),o=Util.type(t);return Handler[o]?(r=Handler[o]({type:o,template:t,name:e,parsedName:e?e.replace(Constant.RE_KEY,"$1"):e,rule:a,context:n}),n.root||(n.root=r),r):t},Handler.extend({array:function(t){var e,n,r=[];if(0===t.template.length)return r;if(t.rule.parameters)if(1===t.rule.min&&void 0===t.rule.max)t.context.path.push(t.name),t.context.templatePath.push(t.name),r=Random.pick(Handler.gen(t.template,void 0,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})),t.context.path.pop(),t.context.templatePath.pop();else if(t.rule.parameters[2])t.template.__order_index=t.template.__order_index||0,t.context.path.push(t.name),t.context.templatePath.push(t.name),r=Handler.gen(t.template,void 0,{path:t.context.path,templatePath:t.context.templatePath,currentContext:r,templateCurrentContext:t.template,root:t.context.root||r,templateRoot:t.context.templateRoot||t.template})[t.template.__order_index%t.template.length],t.template.__order_index+=+t.rule.parameters[2],t.context.path.pop(),t.context.templatePath.pop();else for(e=0;e1)return this.getValueByKeyPath(key,options);if(templateContext&&"object"==typeof templateContext&&key in templateContext&&placeholder!==templateContext[key])return templateContext[key]=Handler.gen(templateContext[key],key,{currentContext:obj,templateCurrentContext:templateContext}),templateContext[key];if(!(key in Random||lkey in Random||okey in Random))return placeholder;for(var i=0;i1&&(a=e.context.path.slice(0),a.pop(),a=this.normalizePath(a.concat(r)));try{t=r[r.length-1];for(var o=e.context.root,u=e.context.templateRoot,i=1;i1/(t+e)*t?!n:n):Math.random()>=.5},bool:function(t,e,n){return this.boolean(t,e,n)},natural:function(t,e){return t="undefined"!=typeof t?parseInt(t,10):0,e="undefined"!=typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},integer:function(t,e){return t="undefined"!=typeof t?parseInt(t,10):-9007199254740992,e="undefined"!=typeof e?parseInt(e,10):9007199254740992,Math.round(Math.random()*(e-t))+t},int:function(t,e){return this.integer(t,e)},float:function(t,e,n,r){n=void 0===n?0:n,n=Math.max(Math.min(n,17),0),r=void 0===r?17:r,r=Math.max(Math.min(r,17),0);for(var a=this.integer(t,e)+".",o=0,u=this.natural(n,r);o1&&r--,o=6*r<1?e+6*(n-e)*r:2*r<1?n:3*r<2?e+(n-e)*(2/3-r)*6:e,a[c]=255*o;return a},hsl2hsv:function(t){var e,n,r=t[0],a=t[1]/100,o=t[2]/100;return o*=2,a*=o<=1?o:2-o,n=(o+a)/2,e=2*a/(o+a),[r,100*e,100*n]},hsv2rgb:function(t){var e=t[0]/60,n=t[1]/100,r=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),u=255*r*(1-n),i=255*r*(1-n*o),l=255*r*(1-n*(1-o));switch(r*=255,a){case 0:return[r,l,u];case 1:return[i,r,u];case 2:return[u,r,l];case 3:return[u,i,r];case 4:return[l,u,r];case 5:return[r,u,i]}},hsv2hsl:function(t){var e,n,r=t[0],a=t[1]/100,o=t[2]/100;return n=(2-a)*o,e=a*o,e/=n<=1?n:2-n,n/=2,[r,100*e,100*n]},rgb2hex:function(t,e,n){return"#"+((256+t<<8|e)<<8|n).toString(16).slice(1)},hex2rgb:function(t){return t="0x"+t.slice(1).replace(t.length>4?t:/./g,"$&$&")|0,[t>>16,t>>8&255,255&t]}}},function(t,e){t.exports={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}}},function(t,e,n){function r(t,e,n,r){return void 0===n?a.natural(t,e):void 0===r?n:a.natural(parseInt(n,10),parseInt(r,10))}var a=n(6),o=n(14);t.exports={paragraph:function(t,e){for(var n=r(3,7,t,e),a=[],o=0;o1&&(e=[].slice.call(arguments,0));var n=t.options,r=n.context.templatePath.join("."),a=t.cache[r]=t.cache[r]||{index:0,array:e};return a.array[a.index++%a.array.length]}}},function(t,e){t.exports={first:function(){var t=["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"].concat(["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]);return this.pick(t)},last:function(){var t=["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"];return this.pick(t)},name:function(t){return this.first()+" "+(t?this.first()+" ":"")+this.last()},cfirst:function(){var t="王 李 张 刘 陈 杨 赵 黄 周 吴 徐 孙 胡 朱 高 林 何 郭 马 罗 梁 宋 郑 谢 韩 唐 冯 于 董 萧 程 曹 袁 邓 许 傅 沈 曾 彭 吕 苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 余 潘 杜 戴 夏 锺 汪 田 任 姜 范 方 石 姚 谭 廖 邹 熊 金 陆 郝 孔 白 崔 康 毛 邱 秦 江 史 顾 侯 邵 孟 龙 万 段 雷 钱 汤 尹 黎 易 常 武 乔 贺 赖 龚 文".split(" ");return this.pick(t)},clast:function(){var t="伟 芳 娜 秀英 敏 静 丽 强 磊 军 洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 平 刚 桂英".split(" ");return this.pick(t)},cname:function(){return this.cfirst()+this.clast()}}},function(t,e){t.exports={url:function(t,e){return(t||this.protocol())+"://"+(e||this.domain())+"/"+this.word()},protocol:function(){return this.pick("http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "))},domain:function(t){return this.word()+"."+(t||this.tld())},tld:function(){return this.pick("com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" "))},email:function(t){return this.character("lower")+"."+this.word()+"@"+(t||this.word()+"."+this.tld())},ip:function(){return this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)+"."+this.natural(0,255)}}},function(t,e,n){var r=n(18),a=["东北","华北","华东","华中","华南","西南","西北"];t.exports={region:function(){return this.pick(a)},province:function(){return this.pick(r).name},city:function(t){var e=this.pick(r),n=this.pick(e.children);return t?[e.name,n.name].join(" "):n.name},county:function(t){var e=this.pick(r),n=this.pick(e.children),a=this.pick(n.children)||{name:"-"};return t?[e.name,n.name,a.name].join(" "):a.name},zip:function(t){for(var e="",n=0;n<(t||6);n++)e+=this.natural(0,9);return e}}},function(t,e){function n(t){for(var e,n={},r=0;ra;a++)o=t.charAt(a),"\n"===o?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}return tr!==e&&(tr>e&&(tr=0,er={line:1,column:1,seenCR:!1}),n(er,tr,e),tr=e),er}function b(t){nr>Zn||(Zn>nr&&(nr=Zn,rr=[]),rr.push(t))}function w(t){var e=0;for(t.sort();eZn?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Hn)),null!==r?(Qn=e,n=Sn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function ft(){var e,n,r;return e=Zn,92===t.charCodeAt(Zn)?(n=Dn,Zn++):(n=null,0===ar&&b(qn)),null!==n?(Fn.test(t.charAt(Zn))?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Ln)),null!==r?(Qn=e,n=On(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}function dt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===In?(n=In,Zn+=2):(n=null,0===ar&&b(jn)),null!==n){if(r=[],Nn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(zn)),null!==a)for(;null!==a;)r.push(a),Nn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(zn));else r=kt;null!==r?(Qn=e,n=Un(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function mt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===Bn?(n=Bn,Zn+=2):(n=null,0===ar&&b(Gn)),null!==n){if(r=[],Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn)),null!==a)for(;null!==a;)r.push(a),Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn));else r=kt;null!==r?(Qn=e,n=Wn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function vt(){var e,n,r,a;if(e=Zn,t.substr(Zn,2)===Yn?(n=Yn,Zn+=2):(n=null,0===ar&&b($n)),null!==n){if(r=[],Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn)),null!==a)for(;null!==a;)r.push(a),Xn.test(t.charAt(Zn))?(a=t.charAt(Zn),Zn++):(a=null,0===ar&&b(Kn));else r=kt;null!==r?(Qn=e,n=Jn(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)}else Zn=e,e=kt;return e}function gt(){var e,n;return e=Zn,t.substr(Zn,2)===In?(n=In,Zn+=2):(n=null,0===ar&&b(jn)),null!==n&&(Qn=e,n=Vn()),null===n?(Zn=e,e=n):e=n,e}function xt(){var e,n,r;return e=Zn,92===t.charCodeAt(Zn)?(n=Dn,Zn++):(n=null,0===ar&&b(qn)),null!==n?(t.length>Zn?(r=t.charAt(Zn),Zn++):(r=null,0===ar&&b(Hn)),null!==r?(Qn=e,n=Fe(r),null===n?(Zn=e,e=n):e=n):(Zn=e,e=kt)):(Zn=e,e=kt),e}var yt,bt=arguments.length>1?arguments[1]:{},wt={regexp:C},Ct=C,kt=null,Et="",Rt="|",At='"|"',_t=function(t,e){return e?new r(t,e[1]):t},Mt=function(t,e,n){return new a([t].concat(e).concat([n]))},Pt="^",Tt='"^"',Ht=function(){return new n("start")},St="$",Dt='"$"',qt=function(){return new n("end")},Ft=function(t,e){return new i(t,e)},Lt="Quantifier",Ot=function(t,e){return e&&(t.greedy=!1),t},It="{",jt='"{"',Nt=",",zt='","',Ut="}",Bt='"}"',Gt=function(t,e){return new l(t,e)},Xt=",}",Kt='",}"',Wt=function(t){return new l(t,1/0)},Yt=function(t){return new l(t,t)},$t="+",Jt='"+"',Vt=function(){return new l(1,1/0)},Zt="*",Qt='"*"',te=function(){return new l(0,1/0)},ee="?",ne='"?"',re=function(){return new l(0,1)},ae=/^[0-9]/,oe="[0-9]",ue=function(t){return+t.join("")},ie="(",le='"("',ce=")",se='")"',he=function(t){return t},pe=function(t){return new u(t)},fe="?:",de='"?:"',me=function(t){return new o("non-capture-group",t)},ve="?=",ge='"?="',xe=function(t){return new o("positive-lookahead",t)},ye="?!",be='"?!"',we=function(t){return new o("negative-lookahead",t)},Ce="CharacterSet",ke="[",Ee='"["',Re="]",Ae='"]"',_e=function(t,e){return new c(!!t,e)},Me="CharacterRange",Pe="-",Te='"-"',He=function(t,e){return new s(t,e)},Se="Character",De=/^[^\\\]]/,qe="[^\\\\\\]]",Fe=function(t){return new h(t)},Le=".",Oe='"."',Ie=function(){return new n("any-character")},je="Literal",Ne=/^[^|\\\/.[()?+*$\^]/,ze="[^|\\\\\\/.[()?+*$\\^]",Ue="\\b",Be='"\\\\b"',Ge=function(){return new n("backspace")},Xe=function(){return new n("word-boundary")},Ke="\\B",We='"\\\\B"',Ye=function(){return new n("non-word-boundary")},$e="\\d",Je='"\\\\d"',Ve=function(){return new n("digit")},Ze="\\D",Qe='"\\\\D"',tn=function(){return new n("non-digit")},en="\\f",nn='"\\\\f"',rn=function(){return new n("form-feed")},an="\\n",on='"\\\\n"',un=function(){return new n("line-feed")},ln="\\r",cn='"\\\\r"',sn=function(){return new n("carriage-return")},hn="\\s",pn='"\\\\s"',fn=function(){return new n("white-space")},dn="\\S",mn='"\\\\S"',vn=function(){return new n("non-white-space")},gn="\\t",xn='"\\\\t"',yn=function(){return new n("tab")},bn="\\v",wn='"\\\\v"',Cn=function(){return new n("vertical-tab"); -},kn="\\w",En='"\\\\w"',Rn=function(){return new n("word")},An="\\W",_n='"\\\\W"',Mn=function(){return new n("non-word")},Pn="\\c",Tn='"\\\\c"',Hn="any character",Sn=function(t){return new v(t)},Dn="\\",qn='"\\\\"',Fn=/^[1-9]/,Ln="[1-9]",On=function(t){return new m(t)},In="\\0",jn='"\\\\0"',Nn=/^[0-7]/,zn="[0-7]",Un=function(t){return new d(t.join(""))},Bn="\\x",Gn='"\\\\x"',Xn=/^[0-9a-fA-F]/,Kn="[0-9a-fA-F]",Wn=function(t){return new f(t.join(""))},Yn="\\u",$n='"\\\\u"',Jn=function(t){return new p(t.join(""))},Vn=function(){return new n("null-character")},Zn=0,Qn=0,tr=0,er={line:1,column:1,seenCR:!1},nr=0,rr=[],ar=0;if("startRule"in bt){if(!(bt.startRule in wt))throw new Error("Can't start parsing from rule \""+bt.startRule+'".');Ct=wt[bt.startRule]}if(n.offset=x,n.text=g,yt=Ct(),null!==yt&&Zn===t.length)return yt;throw w(rr),Qn=Math.max(Zn,nr),new e(rr,Qnr)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is greater than",message:o};return u.message=l.message(u),a.push(u),!1},lessThan:function(t,e,n,r,a,o){if(n=r)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is greater than or equal to",message:o};return u.message=l.message(u),a.push(u),!1},lessThanOrEqualTo:function(t,e,n,r,a,o){if(n<=r)return!0;var u={path:e,type:t,actual:n,expected:r,action:"is less than or equal to",message:o};return u.message=l.message(u),a.push(u),!1}};r.Diff=i,r.Assert=l,t.exports=r},function(t,e,n){t.exports=n(28)},function(t,e,n){function r(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}function a(){function t(){try{return new window._XMLHttpRequest}catch(t){}}function e(){try{return new window._ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}var n=function(){var t=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,e=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,n=location.href,r=e.exec(n.toLowerCase())||[];return t.test(r[1])}();return window.ActiveXObject?!n&&t()||e():t()}function o(t){function e(t,e){return"string"===i.type(t)?t===e:"regexp"===i.type(t)?t.test(e):void 0}for(var n in r.Mock._mocked){var a=r.Mock._mocked[n];if((!a.rurl||e(a.rurl,t.url))&&(!a.rtype||e(a.rtype,t.type.toLowerCase())))return a}}function u(t,e){return i.isFunction(t.template)?t.template(e):r.Mock.mock(t.template)}var i=n(3);window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(t){window.Event=function(t,e,n,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(t,e,n,r),a}}var l={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},c="readystatechange loadstart progress abort error load timeout loadend".split(" "),s="timeout withCredentials".split(" "),h="readyState responseURL status statusText responseType response responseText responseXML".split(" "),p={100:"Continue",101:"Switching Protocols",200:"OK",201:"Created",202:"Accepted",203:"Non-Authoritative Information",204:"No Content",205:"Reset Content",206:"Partial Content",300:"Multiple Choice",301:"Moved Permanently",302:"Found",303:"See Other",304:"Not Modified",305:"Use Proxy",307:"Temporary Redirect",400:"Bad Request",401:"Unauthorized",402:"Payment Required",403:"Forbidden",404:"Not Found",405:"Method Not Allowed",406:"Not Acceptable",407:"Proxy Authentication Required",408:"Request Timeout",409:"Conflict",410:"Gone",411:"Length Required",412:"Precondition Failed",413:"Request Entity Too Large",414:"Request-URI Too Long",415:"Unsupported Media Type",416:"Requested Range Not Satisfiable",417:"Expectation Failed",422:"Unprocessable Entity",500:"Internal Server Error",501:"Not Implemented",502:"Bad Gateway",503:"Service Unavailable",504:"Gateway Timeout",505:"HTTP Version Not Supported"};r._settings={timeout:"10-100"},r.setup=function(t){return i.extend(r._settings,t),r._settings},i.extend(r,l),i.extend(r.prototype,l),r.prototype.mock=!0,r.prototype.match=!1,i.extend(r.prototype,{open:function(t,e,n,u,l){function p(t){for(var e=0;e \\w_\n\t for (i = 0; i < placeholders.length; i++) {\n\t ph = placeholders[i]\n\t\n\t // 遇到转义斜杠,不需要解析占位符\n\t if (/^\\\\/.test(ph)) {\n\t placeholders.splice(i--, 1)\n\t continue\n\t }\n\t\n\t phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options)\n\t\n\t // 只有一个占位符,并且没有其他字符\n\t if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // \n\t result = phed\n\t break\n\t\n\t if (Util.isNumeric(phed)) {\n\t result = parseFloat(phed, 10)\n\t break\n\t }\n\t if (/^(true|false)$/.test(phed)) {\n\t result = phed === 'true' ? true :\n\t phed === 'false' ? false :\n\t phed // 已经是布尔值\n\t break\n\t }\n\t }\n\t result = result.replace(ph, phed)\n\t }\n\t\n\t } else {\n\t // 'ASCII|1-10': '',\n\t // 'ASCII': '',\n\t result = options.rule.range ? Random.string(options.rule.count) : options.template\n\t }\n\t return result\n\t },\n\t 'function': function(options) {\n\t // ( context, options )\n\t return options.template.call(options.context.currentContext, options)\n\t },\n\t 'regexp': function(options) {\n\t var source = ''\n\t\n\t // 'name': /regexp/,\n\t /* jshint -W041 */\n\t if (options.rule.count == undefined) {\n\t source += options.template.source // regexp.source\n\t }\n\t\n\t // 'name|1-5': /regexp/,\n\t for (var i = 0; i < options.rule.count; i++) {\n\t source += options.template.source\n\t }\n\t\n\t return RE.Handler.gen(\n\t RE.Parser.parse(\n\t source\n\t )\n\t )\n\t }\n\t})\n\t\n\tHandler.extend({\n\t _all: function() {\n\t var re = {};\n\t for (var key in Random) re[key.toLowerCase()] = key\n\t return re\n\t },\n\t // 处理占位符,转换为最终值\n\t placeholder: function(placeholder, obj, templateContext, options) {\n\t // console.log(options.context.path)\n\t // 1 key, 2 params\n\t Constant.RE_PLACEHOLDER.exec('')\n\t var parts = Constant.RE_PLACEHOLDER.exec(placeholder),\n\t key = parts && parts[1],\n\t lkey = key && key.toLowerCase(),\n\t okey = this._all()[lkey],\n\t params = parts && parts[2] || ''\n\t var pathParts = this.splitPathToArray(key)\n\t\n\t // 解析占位符的参数\n\t try {\n\t // 1. 尝试保持参数的类型\n\t /*\n\t #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24)\n\t [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056)\n\t 应该属于 Window Firefox 30.0 的 BUG\n\t */\n\t /* jshint -W061 */\n\t params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')')\n\t } catch (error) {\n\t // 2. 如果失败,只能解析为字符串\n\t // console.error(error)\n\t // if (error instanceof ReferenceError) params = parts[2].split(/,\\s*/);\n\t // else throw error\n\t params = parts[2].split(/,\\s*/)\n\t }\n\t\n\t // 占位符优先引用数据模板中的属性\n\t if (obj && (key in obj)) return obj[key]\n\t\n\t // @index @key\n\t // if (Constant.RE_INDEX.test(key)) return +options.name\n\t // if (Constant.RE_KEY.test(key)) return options.name\n\t\n\t // 绝对路径 or 相对路径\n\t if (\n\t key.charAt(0) === '/' ||\n\t pathParts.length > 1\n\t ) return this.getValueByKeyPath(key, options)\n\t\n\t // 递归引用数据模板中的属性\n\t if (templateContext &&\n\t (typeof templateContext === 'object') &&\n\t (key in templateContext) &&\n\t (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己\n\t ) {\n\t // 先计算被引用的属性值\n\t templateContext[key] = Handler.gen(templateContext[key], key, {\n\t currentContext: obj,\n\t templateCurrentContext: templateContext\n\t })\n\t return templateContext[key]\n\t }\n\t\n\t // 如果未找到,则原样返回\n\t if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder\n\t\n\t // 递归解析参数中的占位符\n\t for (var i = 0; i < params.length; i++) {\n\t Constant.RE_PLACEHOLDER.exec('')\n\t if (Constant.RE_PLACEHOLDER.test(params[i])) {\n\t params[i] = Handler.placeholder(params[i], obj, templateContext, options)\n\t }\n\t }\n\t\n\t var handle = Random[key] || Random[lkey] || Random[okey]\n\t switch (Util.type(handle)) {\n\t case 'array':\n\t // 自动从数组中取一个,例如 @areas\n\t return Random.pick(handle)\n\t case 'function':\n\t // 执行占位符方法(大多数情况)\n\t handle.options = options\n\t var re = handle.apply(Random, params)\n\t if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。\n\t delete handle.options\n\t return re\n\t }\n\t },\n\t getValueByKeyPath: function(key, options) {\n\t var originalKey = key\n\t var keyPathParts = this.splitPathToArray(key)\n\t var absolutePathParts = []\n\t\n\t // 绝对路径\n\t if (key.charAt(0) === '/') {\n\t absolutePathParts = [options.context.path[0]].concat(\n\t this.normalizePath(keyPathParts)\n\t )\n\t } else {\n\t // 相对路径\n\t if (keyPathParts.length > 1) {\n\t absolutePathParts = options.context.path.slice(0)\n\t absolutePathParts.pop()\n\t absolutePathParts = this.normalizePath(\n\t absolutePathParts.concat(keyPathParts)\n\t )\n\t\n\t }\n\t }\n\t\n\t try {\n\t key = keyPathParts[keyPathParts.length - 1]\n\t var currentContext = options.context.root\n\t var templateCurrentContext = options.context.templateRoot\n\t for (var i = 1; i < absolutePathParts.length - 1; i++) {\n\t currentContext = currentContext[absolutePathParts[i]]\n\t templateCurrentContext = templateCurrentContext[absolutePathParts[i]]\n\t }\n\t // 引用的值已经计算好\n\t if (currentContext && (key in currentContext)) return currentContext[key]\n\t \n\t // 尚未计算,递归引用数据模板中的属性\n\t if (templateCurrentContext &&\n\t (typeof templateCurrentContext === 'object') &&\n\t (key in templateCurrentContext) &&\n\t (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己\n\t ) {\n\t // 先计算被引用的属性值\n\t templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, {\n\t currentContext: currentContext,\n\t templateCurrentContext: templateCurrentContext\n\t })\n\t return templateCurrentContext[key]\n\t }\n\t } catch(err) { }\n\t\n\t return '@' + keyPathParts.join('/')\n\t },\n\t // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js\n\t normalizePath: function(pathParts) {\n\t var newPathParts = []\n\t for (var i = 0; i < pathParts.length; i++) {\n\t switch (pathParts[i]) {\n\t case '..':\n\t newPathParts.pop()\n\t break\n\t case '.':\n\t break\n\t default:\n\t newPathParts.push(pathParts[i])\n\t }\n\t }\n\t return newPathParts\n\t },\n\t splitPathToArray: function(path) {\n\t var parts = path.split(/\\/+/);\n\t if (!parts[parts.length - 1]) parts = parts.slice(0, -1)\n\t if (!parts[0]) parts = parts.slice(1)\n\t return parts;\n\t }\n\t})\n\t\n\tmodule.exports = Handler\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Constant\n\t\n\t 常量集合。\n\t */\n\t/*\n\t RE_KEY\n\t 'name|min-max': value\n\t 'name|count': value\n\t 'name|min-max.dmin-dmax': value\n\t 'name|min-max.dcount': value\n\t 'name|count.dmin-dmax': value\n\t 'name|count.dcount': value\n\t 'name|+step': value\n\t\n\t 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ]\n\t\n\t RE_PLACEHOLDER\n\t placeholder(*)\n\t\n\t [正则查看工具](http://www.regexper.com/)\n\t\n\t #26 生成规则 支持 负数,例如 number|-100-100\n\t*/\n\tmodule.exports = {\n\t GUID: 1,\n\t RE_KEY: /(.+)\\|(?:\\+(\\d+)|([\\+\\-]?\\d+-?[\\+\\-]?\\d*)?(?:\\.(\\d+-?\\d*))?)/,\n\t RE_RANGE: /([\\+\\-]?\\d+)-?([\\+\\-]?\\d+)?/,\n\t RE_PLACEHOLDER: /\\\\*@([^@#%&()\\?\\s]+)(?:\\((.*?)\\))?/g\n\t // /\\\\*@([^@#%&()\\?\\s\\/\\.]+)(?:\\((.*?)\\))?/g\n\t // RE_INDEX: /^index$/,\n\t // RE_KEY: /^key$/\n\t}\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Utilities\n\t*/\n\tvar Util = {}\n\t\n\tUtil.extend = function extend() {\n\t var target = arguments[0] || {},\n\t i = 1,\n\t length = arguments.length,\n\t options, name, src, copy, clone\n\t\n\t if (length === 1) {\n\t target = this\n\t i = 0\n\t }\n\t\n\t for (; i < length; i++) {\n\t options = arguments[i]\n\t if (!options) continue\n\t\n\t for (name in options) {\n\t src = target[name]\n\t copy = options[name]\n\t\n\t if (target === copy) continue\n\t if (copy === undefined) continue\n\t\n\t if (Util.isArray(copy) || Util.isObject(copy)) {\n\t if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : []\n\t if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {}\n\t\n\t target[name] = Util.extend(clone, copy)\n\t } else {\n\t target[name] = copy\n\t }\n\t }\n\t }\n\t\n\t return target\n\t}\n\t\n\tUtil.each = function each(obj, iterator, context) {\n\t var i, key\n\t if (this.type(obj) === 'number') {\n\t for (i = 0; i < obj; i++) {\n\t iterator(i, i)\n\t }\n\t } else if (obj.length === +obj.length) {\n\t for (i = 0; i < obj.length; i++) {\n\t if (iterator.call(context, obj[i], i, obj) === false) break\n\t }\n\t } else {\n\t for (key in obj) {\n\t if (iterator.call(context, obj[key], key, obj) === false) break\n\t }\n\t }\n\t}\n\t\n\tUtil.type = function type(obj) {\n\t return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\\[object (\\w+)\\]/)[1].toLowerCase()\n\t}\n\t\n\tUtil.each('String Object Array RegExp Function'.split(' '), function(value) {\n\t Util['is' + value] = function(obj) {\n\t return Util.type(obj) === value.toLowerCase()\n\t }\n\t})\n\t\n\tUtil.isObjectOrArray = function(value) {\n\t return Util.isObject(value) || Util.isArray(value)\n\t}\n\t\n\tUtil.isNumeric = function(value) {\n\t return !isNaN(parseFloat(value)) && isFinite(value)\n\t}\n\t\n\tUtil.keys = function(obj) {\n\t var keys = [];\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) keys.push(key)\n\t }\n\t return keys;\n\t}\n\tUtil.values = function(obj) {\n\t var values = [];\n\t for (var key in obj) {\n\t if (obj.hasOwnProperty(key)) values.push(obj[key])\n\t }\n\t return values;\n\t}\n\t\n\t/*\n\t ### Mock.heredoc(fn)\n\t\n\t * Mock.heredoc(fn)\n\t\n\t 以直观、安全的方式书写(多行)HTML 模板。\n\t\n\t **使用示例**如下所示:\n\t\n\t var tpl = Mock.heredoc(function() {\n\t /*!\n\t {{email}}{{age}}\n\t \n\t *\\/\n\t })\n\t \n\t **相关阅读**\n\t * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、\n\t*/\n\tUtil.heredoc = function heredoc(fn) {\n\t // 1. 移除起始的 function(){ /*!\n\t // 2. 移除末尾的 */ }\n\t // 3. 移除起始和末尾的空格\n\t return fn.toString()\n\t .replace(/^[^\\/]+\\/\\*!?/, '')\n\t .replace(/\\*\\/[^\\/]+$/, '')\n\t .replace(/^[\\s\\xA0]+/, '').replace(/[\\s\\xA0]+$/, '') // .trim()\n\t}\n\t\n\tUtil.noop = function() {}\n\t\n\tmodule.exports = Util\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t\t## Parser\n\t\n\t\t解析数据模板(属性名部分)。\n\t\n\t\t* Parser.parse( name )\n\t\t\t\n\t\t\t```json\n\t\t\t{\n\t\t\t\tparameters: [ name, inc, range, decimal ],\n\t\t\t\trnage: [ min , max ],\n\t\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\tcount : count,\n\t\n\t\t\t\tdecimal: decimal,\n\t\t\t\tdmin: dmin,\n\t\t\t\tdmax: dmax,\n\t\t\t\tdcount: dcount\n\t\t\t}\n\t\t\t```\n\t */\n\t\n\tvar Constant = __webpack_require__(2)\n\tvar Random = __webpack_require__(5)\n\t\n\t/* jshint -W041 */\n\tmodule.exports = {\n\t\tparse: function(name) {\n\t\t\tname = name == undefined ? '' : (name + '')\n\t\n\t\t\tvar parameters = (name || '').match(Constant.RE_KEY)\n\t\n\t\t\tvar range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE)\n\t\t\tvar min = range && range[1] && parseInt(range[1], 10) // || 1\n\t\t\tvar max = range && range[2] && parseInt(range[2], 10) // || 1\n\t\t\t\t// repeat || min-max || 1\n\t\t\t\t// var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1\n\t\t\tvar count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined\n\t\n\t\t\tvar decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE)\n\t\t\tvar dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0,\n\t\t\tvar dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0,\n\t\t\t\t// int || dmin-dmax || 0\n\t\t\tvar dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined\n\t\n\t\t\tvar result = {\n\t\t\t\t// 1 name, 2 inc, 3 range, 4 decimal\n\t\t\t\tparameters: parameters,\n\t\t\t\t// 1 min, 2 max\n\t\t\t\trange: range,\n\t\t\t\tmin: min,\n\t\t\t\tmax: max,\n\t\t\t\t// min-max\n\t\t\t\tcount: count,\n\t\t\t\t// 是否有 decimal\n\t\t\t\tdecimal: decimal,\n\t\t\t\tdmin: dmin,\n\t\t\t\tdmax: dmax,\n\t\t\t\t// dmin-dimax\n\t\t\t\tdcount: dcount\n\t\t\t}\n\t\n\t\t\tfor (var r in result) {\n\t\t\t\tif (result[r] != undefined) return result\n\t\t\t}\n\t\n\t\t\treturn {}\n\t\t}\n\t}\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Mock.Random\n\t \n\t 工具类,用于生成各种随机数据。\n\t*/\n\t\n\tvar Util = __webpack_require__(3)\n\t\n\tvar Random = {\n\t extend: Util.extend\n\t}\n\t\n\tRandom.extend(__webpack_require__(6))\n\tRandom.extend(__webpack_require__(7))\n\tRandom.extend(__webpack_require__(8))\n\tRandom.extend(__webpack_require__(10))\n\tRandom.extend(__webpack_require__(13))\n\tRandom.extend(__webpack_require__(15))\n\tRandom.extend(__webpack_require__(16))\n\tRandom.extend(__webpack_require__(17))\n\tRandom.extend(__webpack_require__(14))\n\tRandom.extend(__webpack_require__(19))\n\t\n\tmodule.exports = Random\n\n/***/ }),\n/* 6 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Basics\n\t*/\n\tmodule.exports = {\n\t // 返回一个随机的布尔值。\n\t boolean: function(min, max, cur) {\n\t if (cur !== undefined) {\n\t min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1\n\t max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1\n\t return Math.random() > 1.0 / (min + max) * min ? !cur : cur\n\t }\n\t\n\t return Math.random() >= 0.5\n\t },\n\t bool: function(min, max, cur) {\n\t return this.boolean(min, max, cur)\n\t },\n\t // 返回一个随机的自然数(大于等于 0 的整数)。\n\t natural: function(min, max) {\n\t min = typeof min !== 'undefined' ? parseInt(min, 10) : 0\n\t max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n\t return Math.round(Math.random() * (max - min)) + min\n\t },\n\t // 返回一个随机的整数。\n\t integer: function(min, max) {\n\t min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992\n\t max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n\t return Math.round(Math.random() * (max - min)) + min\n\t },\n\t int: function(min, max) {\n\t return this.integer(min, max)\n\t },\n\t // 返回一个随机的浮点数。\n\t float: function(min, max, dmin, dmax) {\n\t dmin = dmin === undefined ? 0 : dmin\n\t dmin = Math.max(Math.min(dmin, 17), 0)\n\t dmax = dmax === undefined ? 17 : dmax\n\t dmax = Math.max(Math.min(dmax, 17), 0)\n\t var ret = this.integer(min, max) + '.';\n\t for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) {\n\t ret += (\n\t // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n\t (i < dcount - 1) ? this.character('number') : this.character('123456789')\n\t )\n\t }\n\t return parseFloat(ret, 10)\n\t },\n\t // 返回一个随机字符。\n\t character: function(pool) {\n\t var pools = {\n\t lower: 'abcdefghijklmnopqrstuvwxyz',\n\t upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n\t number: '0123456789',\n\t symbol: '!@#$%^&*()[]'\n\t }\n\t pools.alpha = pools.lower + pools.upper\n\t pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol\n\t\n\t pool = pools[('' + pool).toLowerCase()] || pool\n\t return pool.charAt(this.natural(0, pool.length - 1))\n\t },\n\t char: function(pool) {\n\t return this.character(pool)\n\t },\n\t // 返回一个随机字符串。\n\t string: function(pool, min, max) {\n\t var len\n\t switch (arguments.length) {\n\t case 0: // ()\n\t len = this.natural(3, 7)\n\t break\n\t case 1: // ( length )\n\t len = pool\n\t pool = undefined\n\t break\n\t case 2:\n\t // ( pool, length )\n\t if (typeof arguments[0] === 'string') {\n\t len = min\n\t } else {\n\t // ( min, max )\n\t len = this.natural(pool, min)\n\t pool = undefined\n\t }\n\t break\n\t case 3:\n\t len = this.natural(min, max)\n\t break\n\t }\n\t\n\t var text = ''\n\t for (var i = 0; i < len; i++) {\n\t text += this.character(pool)\n\t }\n\t\n\t return text\n\t },\n\t str: function( /*pool, min, max*/ ) {\n\t return this.string.apply(this, arguments)\n\t },\n\t // 返回一个整型数组。\n\t range: function(start, stop, step) {\n\t // range( stop )\n\t if (arguments.length <= 1) {\n\t stop = start || 0;\n\t start = 0;\n\t }\n\t // range( start, stop )\n\t step = arguments[2] || 1;\n\t\n\t start = +start\n\t stop = +stop\n\t step = +step\n\t\n\t var len = Math.max(Math.ceil((stop - start) / step), 0);\n\t var idx = 0;\n\t var range = new Array(len);\n\t\n\t while (idx < len) {\n\t range[idx++] = start;\n\t start += step;\n\t }\n\t\n\t return range;\n\t }\n\t}\n\n/***/ }),\n/* 7 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Date\n\t*/\n\tvar patternLetters = {\n\t yyyy: 'getFullYear',\n\t yy: function(date) {\n\t return ('' + date.getFullYear()).slice(2)\n\t },\n\t y: 'yy',\n\t\n\t MM: function(date) {\n\t var m = date.getMonth() + 1\n\t return m < 10 ? '0' + m : m\n\t },\n\t M: function(date) {\n\t return date.getMonth() + 1\n\t },\n\t\n\t dd: function(date) {\n\t var d = date.getDate()\n\t return d < 10 ? '0' + d : d\n\t },\n\t d: 'getDate',\n\t\n\t HH: function(date) {\n\t var h = date.getHours()\n\t return h < 10 ? '0' + h : h\n\t },\n\t H: 'getHours',\n\t hh: function(date) {\n\t var h = date.getHours() % 12\n\t return h < 10 ? '0' + h : h\n\t },\n\t h: function(date) {\n\t return date.getHours() % 12\n\t },\n\t\n\t mm: function(date) {\n\t var m = date.getMinutes()\n\t return m < 10 ? '0' + m : m\n\t },\n\t m: 'getMinutes',\n\t\n\t ss: function(date) {\n\t var s = date.getSeconds()\n\t return s < 10 ? '0' + s : s\n\t },\n\t s: 'getSeconds',\n\t\n\t SS: function(date) {\n\t var ms = date.getMilliseconds()\n\t return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms\n\t },\n\t S: 'getMilliseconds',\n\t\n\t A: function(date) {\n\t return date.getHours() < 12 ? 'AM' : 'PM'\n\t },\n\t a: function(date) {\n\t return date.getHours() < 12 ? 'am' : 'pm'\n\t },\n\t T: 'getTime'\n\t}\n\tmodule.exports = {\n\t // 日期占位符集合。\n\t _patternLetters: patternLetters,\n\t // 日期占位符正则。\n\t _rformat: new RegExp((function() {\n\t var re = []\n\t for (var i in patternLetters) re.push(i)\n\t return '(' + re.join('|') + ')'\n\t })(), 'g'),\n\t // 格式化日期。\n\t _formatDate: function(date, format) {\n\t return format.replace(this._rformat, function creatNewSubString($0, flag) {\n\t return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) :\n\t patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) :\n\t date[patternLetters[flag]]()\n\t })\n\t },\n\t // 生成一个随机的 Date 对象。\n\t _randomDate: function(min, max) { // min, max\n\t min = min === undefined ? new Date(0) : min\n\t max = max === undefined ? new Date() : max\n\t return new Date(Math.random() * (max.getTime() - min.getTime()))\n\t },\n\t // 返回一个随机的日期字符串。\n\t date: function(format) {\n\t format = format || 'yyyy-MM-dd'\n\t return this._formatDate(this._randomDate(), format)\n\t },\n\t // 返回一个随机的时间字符串。\n\t time: function(format) {\n\t format = format || 'HH:mm:ss'\n\t return this._formatDate(this._randomDate(), format)\n\t },\n\t // 返回一个随机的日期和时间字符串。\n\t datetime: function(format) {\n\t format = format || 'yyyy-MM-dd HH:mm:ss'\n\t return this._formatDate(this._randomDate(), format)\n\t },\n\t // 返回当前的日期和时间字符串。\n\t now: function(unit, format) {\n\t // now(unit) now(format)\n\t if (arguments.length === 1) {\n\t // now(format)\n\t if (!/year|month|day|hour|minute|second|week/.test(unit)) {\n\t format = unit\n\t unit = ''\n\t }\n\t }\n\t unit = (unit || '').toLowerCase()\n\t format = format || 'yyyy-MM-dd HH:mm:ss'\n\t\n\t var date = new Date()\n\t\n\t /* jshint -W086 */\n\t // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/\n\t switch (unit) {\n\t case 'year':\n\t date.setMonth(0)\n\t case 'month':\n\t date.setDate(1)\n\t case 'week':\n\t case 'day':\n\t date.setHours(0)\n\t case 'hour':\n\t date.setMinutes(0)\n\t case 'minute':\n\t date.setSeconds(0)\n\t case 'second':\n\t date.setMilliseconds(0)\n\t }\n\t switch (unit) {\n\t case 'week':\n\t date.setDate(date.getDate() - date.getDay())\n\t }\n\t\n\t return this._formatDate(date, format)\n\t }\n\t}\n\n/***/ }),\n/* 8 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(module) {/* global document */\n\t/*\n\t ## Image\n\t*/\n\tmodule.exports = {\n\t // 常见的广告宽高\n\t _adSize: [\n\t '300x250', '250x250', '240x400', '336x280', '180x150',\n\t '720x300', '468x60', '234x60', '88x31', '120x90',\n\t '120x60', '120x240', '125x125', '728x90', '160x600',\n\t '120x600', '300x600'\n\t ],\n\t // 常见的屏幕宽高\n\t _screenSize: [\n\t '320x200', '320x240', '640x480', '800x480', '800x480',\n\t '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200',\n\t '2560x1600'\n\t ],\n\t // 常见的视频宽高\n\t _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'],\n\t /*\n\t 生成一个随机的图片地址。\n\t\n\t 替代图片源\n\t http://fpoimg.com/\n\t 参考自 \n\t http://rensanning.iteye.com/blog/1933310\n\t http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485\n\t */\n\t image: function(size, background, foreground, format, text) {\n\t // Random.image( size, background, foreground, text )\n\t if (arguments.length === 4) {\n\t text = format\n\t format = undefined\n\t }\n\t // Random.image( size, background, text )\n\t if (arguments.length === 3) {\n\t text = foreground\n\t foreground = undefined\n\t }\n\t // Random.image()\n\t if (!size) size = this.pick(this._adSize)\n\t\n\t if (background && ~background.indexOf('#')) background = background.slice(1)\n\t if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1)\n\t\n\t // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello\n\t return 'http://dummyimage.com/' + size +\n\t (background ? '/' + background : '') +\n\t (foreground ? '/' + foreground : '') +\n\t (format ? '.' + format : '') +\n\t (text ? '&text=' + text : '')\n\t },\n\t img: function() {\n\t return this.image.apply(this, arguments)\n\t },\n\t\n\t /*\n\t BrandColors\n\t http://brandcolors.net/\n\t A collection of major brand color codes curated by Galen Gidman.\n\t 大牌公司的颜色集合\n\t\n\t // 获取品牌和颜色\n\t $('h2').each(function(index, item){\n\t item = $(item)\n\t console.log('\\'' + item.text() + '\\'', ':', '\\'' + item.next().text() + '\\'', ',')\n\t })\n\t */\n\t _brandColors: {\n\t '4ormat': '#fb0a2a',\n\t '500px': '#02adea',\n\t 'About.me (blue)': '#00405d',\n\t 'About.me (yellow)': '#ffcc33',\n\t 'Addvocate': '#ff6138',\n\t 'Adobe': '#ff0000',\n\t 'Aim': '#fcd20b',\n\t 'Amazon': '#e47911',\n\t 'Android': '#a4c639',\n\t 'Angie\\'s List': '#7fbb00',\n\t 'AOL': '#0060a3',\n\t 'Atlassian': '#003366',\n\t 'Behance': '#053eff',\n\t 'Big Cartel': '#97b538',\n\t 'bitly': '#ee6123',\n\t 'Blogger': '#fc4f08',\n\t 'Boeing': '#0039a6',\n\t 'Booking.com': '#003580',\n\t 'Carbonmade': '#613854',\n\t 'Cheddar': '#ff7243',\n\t 'Code School': '#3d4944',\n\t 'Delicious': '#205cc0',\n\t 'Dell': '#3287c1',\n\t 'Designmoo': '#e54a4f',\n\t 'Deviantart': '#4e6252',\n\t 'Designer News': '#2d72da',\n\t 'Devour': '#fd0001',\n\t 'DEWALT': '#febd17',\n\t 'Disqus (blue)': '#59a3fc',\n\t 'Disqus (orange)': '#db7132',\n\t 'Dribbble': '#ea4c89',\n\t 'Dropbox': '#3d9ae8',\n\t 'Drupal': '#0c76ab',\n\t 'Dunked': '#2a323a',\n\t 'eBay': '#89c507',\n\t 'Ember': '#f05e1b',\n\t 'Engadget': '#00bdf6',\n\t 'Envato': '#528036',\n\t 'Etsy': '#eb6d20',\n\t 'Evernote': '#5ba525',\n\t 'Fab.com': '#dd0017',\n\t 'Facebook': '#3b5998',\n\t 'Firefox': '#e66000',\n\t 'Flickr (blue)': '#0063dc',\n\t 'Flickr (pink)': '#ff0084',\n\t 'Forrst': '#5b9a68',\n\t 'Foursquare': '#25a0ca',\n\t 'Garmin': '#007cc3',\n\t 'GetGlue': '#2d75a2',\n\t 'Gimmebar': '#f70078',\n\t 'GitHub': '#171515',\n\t 'Google Blue': '#0140ca',\n\t 'Google Green': '#16a61e',\n\t 'Google Red': '#dd1812',\n\t 'Google Yellow': '#fcca03',\n\t 'Google+': '#dd4b39',\n\t 'Grooveshark': '#f77f00',\n\t 'Groupon': '#82b548',\n\t 'Hacker News': '#ff6600',\n\t 'HelloWallet': '#0085ca',\n\t 'Heroku (light)': '#c7c5e6',\n\t 'Heroku (dark)': '#6567a5',\n\t 'HootSuite': '#003366',\n\t 'Houzz': '#73ba37',\n\t 'HTML5': '#ec6231',\n\t 'IKEA': '#ffcc33',\n\t 'IMDb': '#f3ce13',\n\t 'Instagram': '#3f729b',\n\t 'Intel': '#0071c5',\n\t 'Intuit': '#365ebf',\n\t 'Kickstarter': '#76cc1e',\n\t 'kippt': '#e03500',\n\t 'Kodery': '#00af81',\n\t 'LastFM': '#c3000d',\n\t 'LinkedIn': '#0e76a8',\n\t 'Livestream': '#cf0005',\n\t 'Lumo': '#576396',\n\t 'Mixpanel': '#a086d3',\n\t 'Meetup': '#e51937',\n\t 'Nokia': '#183693',\n\t 'NVIDIA': '#76b900',\n\t 'Opera': '#cc0f16',\n\t 'Path': '#e41f11',\n\t 'PayPal (dark)': '#1e477a',\n\t 'PayPal (light)': '#3b7bbf',\n\t 'Pinboard': '#0000e6',\n\t 'Pinterest': '#c8232c',\n\t 'PlayStation': '#665cbe',\n\t 'Pocket': '#ee4056',\n\t 'Prezi': '#318bff',\n\t 'Pusha': '#0f71b4',\n\t 'Quora': '#a82400',\n\t 'QUOTE.fm': '#66ceff',\n\t 'Rdio': '#008fd5',\n\t 'Readability': '#9c0000',\n\t 'Red Hat': '#cc0000',\n\t 'Resource': '#7eb400',\n\t 'Rockpack': '#0ba6ab',\n\t 'Roon': '#62b0d9',\n\t 'RSS': '#ee802f',\n\t 'Salesforce': '#1798c1',\n\t 'Samsung': '#0c4da2',\n\t 'Shopify': '#96bf48',\n\t 'Skype': '#00aff0',\n\t 'Snagajob': '#f47a20',\n\t 'Softonic': '#008ace',\n\t 'SoundCloud': '#ff7700',\n\t 'Space Box': '#f86960',\n\t 'Spotify': '#81b71a',\n\t 'Sprint': '#fee100',\n\t 'Squarespace': '#121212',\n\t 'StackOverflow': '#ef8236',\n\t 'Staples': '#cc0000',\n\t 'Status Chart': '#d7584f',\n\t 'Stripe': '#008cdd',\n\t 'StudyBlue': '#00afe1',\n\t 'StumbleUpon': '#f74425',\n\t 'T-Mobile': '#ea0a8e',\n\t 'Technorati': '#40a800',\n\t 'The Next Web': '#ef4423',\n\t 'Treehouse': '#5cb868',\n\t 'Trulia': '#5eab1f',\n\t 'Tumblr': '#34526f',\n\t 'Twitch.tv': '#6441a5',\n\t 'Twitter': '#00acee',\n\t 'TYPO3': '#ff8700',\n\t 'Ubuntu': '#dd4814',\n\t 'Ustream': '#3388ff',\n\t 'Verizon': '#ef1d1d',\n\t 'Vimeo': '#86c9ef',\n\t 'Vine': '#00a478',\n\t 'Virb': '#06afd8',\n\t 'Virgin Media': '#cc0000',\n\t 'Wooga': '#5b009c',\n\t 'WordPress (blue)': '#21759b',\n\t 'WordPress (orange)': '#d54e21',\n\t 'WordPress (grey)': '#464646',\n\t 'Wunderlist': '#2b88d9',\n\t 'XBOX': '#9bc848',\n\t 'XING': '#126567',\n\t 'Yahoo!': '#720e9e',\n\t 'Yandex': '#ffcc00',\n\t 'Yelp': '#c41200',\n\t 'YouTube': '#c4302b',\n\t 'Zalongo': '#5498dc',\n\t 'Zendesk': '#78a300',\n\t 'Zerply': '#9dcc7a',\n\t 'Zootool': '#5e8b1d'\n\t },\n\t _brandNames: function() {\n\t var brands = [];\n\t for (var b in this._brandColors) {\n\t brands.push(b)\n\t }\n\t return brands\n\t },\n\t /*\n\t 生成一段随机的 Base64 图片编码。\n\t\n\t https://github.com/imsky/holder\n\t Holder renders image placeholders entirely on the client side.\n\t\n\t dataImageHolder: function(size) {\n\t return 'holder.js/' + size\n\t },\n\t */\n\t dataImage: function(size, text) {\n\t var canvas\n\t if (typeof document !== 'undefined') {\n\t canvas = document.createElement('canvas')\n\t } else {\n\t /*\n\t https://github.com/Automattic/node-canvas\n\t npm install canvas --save\n\t 安装问题:\n\t * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva\n\t * https://github.com/Automattic/node-canvas/issues/415\n\t * https://github.com/Automattic/node-canvas/wiki/_pages\n\t\n\t PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。\n\t */\n\t var Canvas = module.require('canvas')\n\t canvas = new Canvas()\n\t }\n\t\n\t var ctx = canvas && canvas.getContext && canvas.getContext(\"2d\")\n\t if (!canvas || !ctx) return ''\n\t\n\t if (!size) size = this.pick(this._adSize)\n\t text = text !== undefined ? text : size\n\t\n\t size = size.split('x')\n\t\n\t var width = parseInt(size[0], 10),\n\t height = parseInt(size[1], 10),\n\t background = this._brandColors[this.pick(this._brandNames())],\n\t foreground = '#FFF',\n\t text_height = 14,\n\t font = 'sans-serif';\n\t\n\t canvas.width = width\n\t canvas.height = height\n\t ctx.textAlign = 'center'\n\t ctx.textBaseline = 'middle'\n\t ctx.fillStyle = background\n\t ctx.fillRect(0, 0, width, height)\n\t ctx.fillStyle = foreground\n\t ctx.font = 'bold ' + text_height + 'px ' + font\n\t ctx.fillText(text, (width / 2), (height / 2), width)\n\t return canvas.toDataURL('image/png')\n\t }\n\t}\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)(module)))\n\n/***/ }),\n/* 9 */\n/***/ (function(module, exports) {\n\n\tmodule.exports = function(module) {\r\n\t\tif(!module.webpackPolyfill) {\r\n\t\t\tmodule.deprecate = function() {};\r\n\t\t\tmodule.paths = [];\r\n\t\t\t// module.parent = undefined by default\r\n\t\t\tmodule.children = [];\r\n\t\t\tmodule.webpackPolyfill = 1;\r\n\t\t}\r\n\t\treturn module;\r\n\t}\r\n\n\n/***/ }),\n/* 10 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Color\n\t\n\t http://llllll.li/randomColor/\n\t A color generator for JavaScript.\n\t randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art.\n\t\n\t http://randomcolour.com/\n\t var bg_colour = Math.floor(Math.random() * 16777215).toString(16);\n\t bg_colour = \"#\" + (\"000000\" + bg_colour).slice(-6);\n\t document.bgColor = bg_colour;\n\t \n\t http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n\t Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult.\n\t https://github.com/devongovett/color-generator\n\t\n\t http://www.paulirish.com/2009/random-hex-color-code-snippets/\n\t Random Hex Color Code Generator in JavaScript\n\t\n\t http://chancejs.com/#color\n\t chance.color()\n\t // => '#79c157'\n\t chance.color({format: 'hex'})\n\t // => '#d67118'\n\t chance.color({format: 'shorthex'})\n\t // => '#60f'\n\t chance.color({format: 'rgb'})\n\t // => 'rgb(110,52,164)'\n\t\n\t http://tool.c7sky.com/webcolor\n\t 网页设计常用色彩搭配表\n\t \n\t https://github.com/One-com/one-color\n\t An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels.\n\t API 很赞\n\t\n\t https://github.com/harthur/color\n\t JavaScript color conversion and manipulation library\n\t\n\t https://github.com/leaverou/css-colors\n\t Share & convert CSS colors\n\t http://leaverou.github.io/css-colors/#slategray\n\t Type a CSS color keyword, #hex, hsl(), rgba(), whatever:\n\t\n\t 色调 hue\n\t http://baike.baidu.com/view/23368.htm\n\t 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。\n\t 饱和度 saturation\n\t http://baike.baidu.com/view/189644.htm\n\t 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。\n\t 亮度 brightness\n\t http://baike.baidu.com/view/34773.htm\n\t 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。\n\t 照度 luminosity\n\t 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。\n\t\n\t http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript\n\t var letters = '0123456789ABCDEF'.split('')\n\t var color = '#'\n\t for (var i = 0; i < 6; i++) {\n\t color += letters[Math.floor(Math.random() * 16)]\n\t }\n\t return color\n\t \n\t // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。\n\t // _brainlessColor()\n\t var color = Math.floor(\n\t Math.random() *\n\t (16 * 16 * 16 * 16 * 16 * 16 - 1)\n\t ).toString(16)\n\t color = \"#\" + (\"000000\" + color).slice(-6)\n\t return color.toUpperCase()\n\t*/\n\t\n\tvar Convert = __webpack_require__(11)\n\tvar DICT = __webpack_require__(12)\n\t\n\tmodule.exports = {\n\t // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。\n\t color: function(name) {\n\t if (name || DICT[name]) return DICT[name].nicer\n\t return this.hex()\n\t },\n\t // #DAC0DE\n\t hex: function() {\n\t var hsv = this._goldenRatioColor()\n\t var rgb = Convert.hsv2rgb(hsv)\n\t var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2])\n\t return hex\n\t },\n\t // rgb(128,255,255)\n\t rgb: function() {\n\t var hsv = this._goldenRatioColor()\n\t var rgb = Convert.hsv2rgb(hsv)\n\t return 'rgb(' +\n\t parseInt(rgb[0], 10) + ', ' +\n\t parseInt(rgb[1], 10) + ', ' +\n\t parseInt(rgb[2], 10) + ')'\n\t },\n\t // rgba(128,255,255,0.3)\n\t rgba: function() {\n\t var hsv = this._goldenRatioColor()\n\t var rgb = Convert.hsv2rgb(hsv)\n\t return 'rgba(' +\n\t parseInt(rgb[0], 10) + ', ' +\n\t parseInt(rgb[1], 10) + ', ' +\n\t parseInt(rgb[2], 10) + ', ' +\n\t Math.random().toFixed(2) + ')'\n\t },\n\t // hsl(300,80%,90%)\n\t hsl: function() {\n\t var hsv = this._goldenRatioColor()\n\t var hsl = Convert.hsv2hsl(hsv)\n\t return 'hsl(' +\n\t parseInt(hsl[0], 10) + ', ' +\n\t parseInt(hsl[1], 10) + ', ' +\n\t parseInt(hsl[2], 10) + ')'\n\t },\n\t // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n\t // https://github.com/devongovett/color-generator/blob/master/index.js\n\t // 随机生成一个有吸引力的颜色。\n\t _goldenRatioColor: function(saturation, value) {\n\t this._goldenRatio = 0.618033988749895\n\t this._hue = this._hue || Math.random()\n\t this._hue += this._goldenRatio\n\t this._hue %= 1\n\t\n\t if (typeof saturation !== \"number\") saturation = 0.5;\n\t if (typeof value !== \"number\") value = 0.95;\n\t\n\t return [\n\t this._hue * 360,\n\t saturation * 100,\n\t value * 100\n\t ]\n\t }\n\t}\n\n/***/ }),\n/* 11 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Color Convert\n\t\n\t http://blog.csdn.net/idfaya/article/details/6770414\n\t 颜色空间RGB与HSV(HSL)的转换\n\t*/\n\t// https://github.com/harthur/color-convert/blob/master/conversions.js\n\tmodule.exports = {\n\t\trgb2hsl: function rgb2hsl(rgb) {\n\t\t\tvar r = rgb[0] / 255,\n\t\t\t\tg = rgb[1] / 255,\n\t\t\t\tb = rgb[2] / 255,\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tmax = Math.max(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th, s, l;\n\t\n\t\t\tif (max == min)\n\t\t\t\th = 0;\n\t\t\telse if (r == max)\n\t\t\t\th = (g - b) / delta;\n\t\t\telse if (g == max)\n\t\t\t\th = 2 + (b - r) / delta;\n\t\t\telse if (b == max)\n\t\t\t\th = 4 + (r - g) / delta;\n\t\n\t\t\th = Math.min(h * 60, 360);\n\t\n\t\t\tif (h < 0)\n\t\t\t\th += 360;\n\t\n\t\t\tl = (min + max) / 2;\n\t\n\t\t\tif (max == min)\n\t\t\t\ts = 0;\n\t\t\telse if (l <= 0.5)\n\t\t\t\ts = delta / (max + min);\n\t\t\telse\n\t\t\t\ts = delta / (2 - max - min);\n\t\n\t\t\treturn [h, s * 100, l * 100];\n\t\t},\n\t\trgb2hsv: function rgb2hsv(rgb) {\n\t\t\tvar r = rgb[0],\n\t\t\t\tg = rgb[1],\n\t\t\t\tb = rgb[2],\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tmax = Math.max(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th, s, v;\n\t\n\t\t\tif (max === 0)\n\t\t\t\ts = 0;\n\t\t\telse\n\t\t\t\ts = (delta / max * 1000) / 10;\n\t\n\t\t\tif (max == min)\n\t\t\t\th = 0;\n\t\t\telse if (r == max)\n\t\t\t\th = (g - b) / delta;\n\t\t\telse if (g == max)\n\t\t\t\th = 2 + (b - r) / delta;\n\t\t\telse if (b == max)\n\t\t\t\th = 4 + (r - g) / delta;\n\t\n\t\t\th = Math.min(h * 60, 360);\n\t\n\t\t\tif (h < 0)\n\t\t\t\th += 360;\n\t\n\t\t\tv = ((max / 255) * 1000) / 10;\n\t\n\t\t\treturn [h, s, v];\n\t\t},\n\t\thsl2rgb: function hsl2rgb(hsl) {\n\t\t\tvar h = hsl[0] / 360,\n\t\t\t\ts = hsl[1] / 100,\n\t\t\t\tl = hsl[2] / 100,\n\t\t\t\tt1, t2, t3, rgb, val;\n\t\n\t\t\tif (s === 0) {\n\t\t\t\tval = l * 255;\n\t\t\t\treturn [val, val, val];\n\t\t\t}\n\t\n\t\t\tif (l < 0.5)\n\t\t\t\tt2 = l * (1 + s);\n\t\t\telse\n\t\t\t\tt2 = l + s - l * s;\n\t\t\tt1 = 2 * l - t2;\n\t\n\t\t\trgb = [0, 0, 0];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\t\t\tif (t3 < 0) t3++;\n\t\t\t\tif (t3 > 1) t3--;\n\t\n\t\t\t\tif (6 * t3 < 1)\n\t\t\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t\t\telse if (2 * t3 < 1)\n\t\t\t\t\tval = t2;\n\t\t\t\telse if (3 * t3 < 2)\n\t\t\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t\t\telse\n\t\t\t\t\tval = t1;\n\t\n\t\t\t\trgb[i] = val * 255;\n\t\t\t}\n\t\n\t\t\treturn rgb;\n\t\t},\n\t\thsl2hsv: function hsl2hsv(hsl) {\n\t\t\tvar h = hsl[0],\n\t\t\t\ts = hsl[1] / 100,\n\t\t\t\tl = hsl[2] / 100,\n\t\t\t\tsv, v;\n\t\t\tl *= 2;\n\t\t\ts *= (l <= 1) ? l : 2 - l;\n\t\t\tv = (l + s) / 2;\n\t\t\tsv = (2 * s) / (l + s);\n\t\t\treturn [h, sv * 100, v * 100];\n\t\t},\n\t\thsv2rgb: function hsv2rgb(hsv) {\n\t\t\tvar h = hsv[0] / 60\n\t\t\tvar s = hsv[1] / 100\n\t\t\tvar v = hsv[2] / 100\n\t\t\tvar hi = Math.floor(h) % 6\n\t\n\t\t\tvar f = h - Math.floor(h)\n\t\t\tvar p = 255 * v * (1 - s)\n\t\t\tvar q = 255 * v * (1 - (s * f))\n\t\t\tvar t = 255 * v * (1 - (s * (1 - f)))\n\t\n\t\t\tv = 255 * v\n\t\n\t\t\tswitch (hi) {\n\t\t\t\tcase 0:\n\t\t\t\t\treturn [v, t, p]\n\t\t\t\tcase 1:\n\t\t\t\t\treturn [q, v, p]\n\t\t\t\tcase 2:\n\t\t\t\t\treturn [p, v, t]\n\t\t\t\tcase 3:\n\t\t\t\t\treturn [p, q, v]\n\t\t\t\tcase 4:\n\t\t\t\t\treturn [t, p, v]\n\t\t\t\tcase 5:\n\t\t\t\t\treturn [v, p, q]\n\t\t\t}\n\t\t},\n\t\thsv2hsl: function hsv2hsl(hsv) {\n\t\t\tvar h = hsv[0],\n\t\t\t\ts = hsv[1] / 100,\n\t\t\t\tv = hsv[2] / 100,\n\t\t\t\tsl, l;\n\t\n\t\t\tl = (2 - s) * v;\n\t\t\tsl = s * v;\n\t\t\tsl /= (l <= 1) ? l : 2 - l;\n\t\t\tl /= 2;\n\t\t\treturn [h, sl * 100, l * 100];\n\t\t},\n\t\t// http://www.140byt.es/keywords/color\n\t\trgb2hex: function(\n\t\t\ta, // red, as a number from 0 to 255\n\t\t\tb, // green, as a number from 0 to 255\n\t\t\tc // blue, as a number from 0 to 255\n\t\t) {\n\t\t\treturn \"#\" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1)\n\t\t},\n\t\thex2rgb: function(\n\t\t\ta // take a \"#xxxxxx\" hex string,\n\t\t) {\n\t\t\ta = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0;\n\t\t\treturn [a >> 16, a >> 8 & 255, a & 255]\n\t\t}\n\t}\n\n/***/ }),\n/* 12 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Color 字典数据\n\t\n\t 字典数据来源 [A nicer color palette for the web](http://clrs.cc/)\n\t*/\n\tmodule.exports = {\n\t // name value nicer\n\t navy: {\n\t value: '#000080',\n\t nicer: '#001F3F'\n\t },\n\t blue: {\n\t value: '#0000ff',\n\t nicer: '#0074D9'\n\t },\n\t aqua: {\n\t value: '#00ffff',\n\t nicer: '#7FDBFF'\n\t },\n\t teal: {\n\t value: '#008080',\n\t nicer: '#39CCCC'\n\t },\n\t olive: {\n\t value: '#008000',\n\t nicer: '#3D9970'\n\t },\n\t green: {\n\t value: '#008000',\n\t nicer: '#2ECC40'\n\t },\n\t lime: {\n\t value: '#00ff00',\n\t nicer: '#01FF70'\n\t },\n\t yellow: {\n\t value: '#ffff00',\n\t nicer: '#FFDC00'\n\t },\n\t orange: {\n\t value: '#ffa500',\n\t nicer: '#FF851B'\n\t },\n\t red: {\n\t value: '#ff0000',\n\t nicer: '#FF4136'\n\t },\n\t maroon: {\n\t value: '#800000',\n\t nicer: '#85144B'\n\t },\n\t fuchsia: {\n\t value: '#ff00ff',\n\t nicer: '#F012BE'\n\t },\n\t purple: {\n\t value: '#800080',\n\t nicer: '#B10DC9'\n\t },\n\t silver: {\n\t value: '#c0c0c0',\n\t nicer: '#DDDDDD'\n\t },\n\t gray: {\n\t value: '#808080',\n\t nicer: '#AAAAAA'\n\t },\n\t black: {\n\t value: '#000000',\n\t nicer: '#111111'\n\t },\n\t white: {\n\t value: '#FFFFFF',\n\t nicer: '#FFFFFF'\n\t }\n\t}\n\n/***/ }),\n/* 13 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Text\n\t\n\t http://www.lipsum.com/\n\t*/\n\tvar Basic = __webpack_require__(6)\n\tvar Helper = __webpack_require__(14)\n\t\n\tfunction range(defaultMin, defaultMax, min, max) {\n\t return min === undefined ? Basic.natural(defaultMin, defaultMax) : // ()\n\t max === undefined ? min : // ( len )\n\t Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max )\n\t}\n\t\n\tmodule.exports = {\n\t // 随机生成一段文本。\n\t paragraph: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.sentence())\n\t }\n\t return result.join(' ')\n\t },\n\t // \n\t cparagraph: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.csentence())\n\t }\n\t return result.join('')\n\t },\n\t // 随机生成一个句子,第一个单词的首字母大写。\n\t sentence: function(min, max) {\n\t var len = range(12, 18, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.word())\n\t }\n\t return Helper.capitalize(result.join(' ')) + '.'\n\t },\n\t // 随机生成一个中文句子。\n\t csentence: function(min, max) {\n\t var len = range(12, 18, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.cword())\n\t }\n\t\n\t return result.join('') + '。'\n\t },\n\t // 随机生成一个单词。\n\t word: function(min, max) {\n\t var len = range(3, 10, min, max)\n\t var result = '';\n\t for (var i = 0; i < len; i++) {\n\t result += Basic.character('lower')\n\t }\n\t return result\n\t },\n\t // 随机生成一个或多个汉字。\n\t cword: function(pool, min, max) {\n\t // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm\n\t var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'\n\t\n\t var len\n\t switch (arguments.length) {\n\t case 0: // ()\n\t pool = DICT_KANZI\n\t len = 1\n\t break\n\t case 1: // ( pool )\n\t if (typeof arguments[0] === 'string') {\n\t len = 1\n\t } else {\n\t // ( length )\n\t len = pool\n\t pool = DICT_KANZI\n\t }\n\t break\n\t case 2:\n\t // ( pool, length )\n\t if (typeof arguments[0] === 'string') {\n\t len = min\n\t } else {\n\t // ( min, max )\n\t len = this.natural(pool, min)\n\t pool = DICT_KANZI\n\t }\n\t break\n\t case 3:\n\t len = this.natural(min, max)\n\t break\n\t }\n\t\n\t var result = ''\n\t for (var i = 0; i < len; i++) {\n\t result += pool.charAt(this.natural(0, pool.length - 1))\n\t }\n\t return result\n\t },\n\t // 随机生成一句标题,其中每个单词的首字母大写。\n\t title: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.capitalize(this.word()))\n\t }\n\t return result.join(' ')\n\t },\n\t // 随机生成一句中文标题。\n\t ctitle: function(min, max) {\n\t var len = range(3, 7, min, max)\n\t var result = []\n\t for (var i = 0; i < len; i++) {\n\t result.push(this.cword())\n\t }\n\t return result.join('')\n\t }\n\t}\n\n/***/ }),\n/* 14 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Helpers\n\t*/\n\t\n\tvar Util = __webpack_require__(3)\n\t\n\tmodule.exports = {\n\t\t// 把字符串的第一个字母转换为大写。\n\t\tcapitalize: function(word) {\n\t\t\treturn (word + '').charAt(0).toUpperCase() + (word + '').substr(1)\n\t\t},\n\t\t// 把字符串转换为大写。\n\t\tupper: function(str) {\n\t\t\treturn (str + '').toUpperCase()\n\t\t},\n\t\t// 把字符串转换为小写。\n\t\tlower: function(str) {\n\t\t\treturn (str + '').toLowerCase()\n\t\t},\n\t\t// 从数组中随机选取一个元素,并返回。\n\t\tpick: function pick(arr, min, max) {\n\t\t\t// pick( item1, item2 ... )\n\t\t\tif (!Util.isArray(arr)) {\n\t\t\t\tarr = [].slice.call(arguments)\n\t\t\t\tmin = 1\n\t\t\t\tmax = 1\n\t\t\t} else {\n\t\t\t\t// pick( [ item1, item2 ... ] )\n\t\t\t\tif (min === undefined) min = 1\n\t\n\t\t\t\t// pick( [ item1, item2 ... ], count )\n\t\t\t\tif (max === undefined) max = min\n\t\t\t}\n\t\n\t\t\tif (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]\n\t\n\t\t\t// pick( [ item1, item2 ... ], min, max )\n\t\t\treturn this.shuffle(arr, min, max)\n\t\n\t\t\t// 通过参数个数判断方法签名,扩展性太差!#90\n\t\t\t// switch (arguments.length) {\n\t\t\t// \tcase 1:\n\t\t\t// \t\t// pick( [ item1, item2 ... ] )\n\t\t\t// \t\treturn arr[this.natural(0, arr.length - 1)]\n\t\t\t// \tcase 2:\n\t\t\t// \t\t// pick( [ item1, item2 ... ], count )\n\t\t\t// \t\tmax = min\n\t\t\t// \t\t\t/* falls through */\n\t\t\t// \tcase 3:\n\t\t\t// \t\t// pick( [ item1, item2 ... ], min, max )\n\t\t\t// \t\treturn this.shuffle(arr, min, max)\n\t\t\t// }\n\t\t},\n\t\t/*\n\t\t 打乱数组中元素的顺序,并返回。\n\t\t Given an array, scramble the order and return it.\n\t\n\t\t 其他的实现思路:\n\t\t // https://code.google.com/p/jslibs/wiki/JavascriptTips\n\t\t result = result.sort(function() {\n\t\t return Math.random() - 0.5\n\t\t })\n\t\t*/\n\t\tshuffle: function shuffle(arr, min, max) {\n\t\t\tarr = arr || []\n\t\t\tvar old = arr.slice(0),\n\t\t\t\tresult = [],\n\t\t\t\tindex = 0,\n\t\t\t\tlength = old.length;\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tindex = this.natural(0, old.length - 1)\n\t\t\t\tresult.push(old[index])\n\t\t\t\told.splice(index, 1)\n\t\t\t}\n\t\t\tswitch (arguments.length) {\n\t\t\t\tcase 0:\n\t\t\t\tcase 1:\n\t\t\t\t\treturn result\n\t\t\t\tcase 2:\n\t\t\t\t\tmax = min\n\t\t\t\t\t\t/* falls through */\n\t\t\t\tcase 3:\n\t\t\t\t\tmin = parseInt(min, 10)\n\t\t\t\t\tmax = parseInt(max, 10)\n\t\t\t\t\treturn result.slice(0, this.natural(min, max))\n\t\t\t}\n\t\t},\n\t\t/*\n\t\t * Random.order(item, item)\n\t\t * Random.order([item, item ...])\n\t\n\t\t 顺序获取数组中的元素\n\t\n\t\t [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22)\n\t\n\t\t 不支持单独调用!\n\t\t*/\n\t\torder: function order(array) {\n\t\t\torder.cache = order.cache || {}\n\t\n\t\t\tif (arguments.length > 1) array = [].slice.call(arguments, 0)\n\t\n\t\t\t// options.context.path/templatePath\n\t\t\tvar options = order.options\n\t\t\tvar templatePath = options.context.templatePath.join('.')\n\t\n\t\t\tvar cache = (\n\t\t\t\torder.cache[templatePath] = order.cache[templatePath] || {\n\t\t\t\t\tindex: 0,\n\t\t\t\t\tarray: array\n\t\t\t\t}\n\t\t\t)\n\t\n\t\t\treturn cache.array[cache.index++ % cache.array.length]\n\t\t}\n\t}\n\n/***/ }),\n/* 15 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Name\n\t\n\t [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html)\n\t*/\n\tmodule.exports = {\n\t\t// 随机生成一个常见的英文名。\n\t\tfirst: function() {\n\t\t\tvar names = [\n\t\t\t\t// male\n\t\t\t\t\"James\", \"John\", \"Robert\", \"Michael\", \"William\",\n\t\t\t\t\"David\", \"Richard\", \"Charles\", \"Joseph\", \"Thomas\",\n\t\t\t\t\"Christopher\", \"Daniel\", \"Paul\", \"Mark\", \"Donald\",\n\t\t\t\t\"George\", \"Kenneth\", \"Steven\", \"Edward\", \"Brian\",\n\t\t\t\t\"Ronald\", \"Anthony\", \"Kevin\", \"Jason\", \"Matthew\",\n\t\t\t\t\"Gary\", \"Timothy\", \"Jose\", \"Larry\", \"Jeffrey\",\n\t\t\t\t\"Frank\", \"Scott\", \"Eric\"\n\t\t\t].concat([\n\t\t\t\t// female\n\t\t\t\t\"Mary\", \"Patricia\", \"Linda\", \"Barbara\", \"Elizabeth\",\n\t\t\t\t\"Jennifer\", \"Maria\", \"Susan\", \"Margaret\", \"Dorothy\",\n\t\t\t\t\"Lisa\", \"Nancy\", \"Karen\", \"Betty\", \"Helen\",\n\t\t\t\t\"Sandra\", \"Donna\", \"Carol\", \"Ruth\", \"Sharon\",\n\t\t\t\t\"Michelle\", \"Laura\", \"Sarah\", \"Kimberly\", \"Deborah\",\n\t\t\t\t\"Jessica\", \"Shirley\", \"Cynthia\", \"Angela\", \"Melissa\",\n\t\t\t\t\"Brenda\", \"Amy\", \"Anna\"\n\t\t\t])\n\t\t\treturn this.pick(names)\n\t\t\t\t// or this.capitalize(this.word())\n\t\t},\n\t\t// 随机生成一个常见的英文姓。\n\t\tlast: function() {\n\t\t\tvar names = [\n\t\t\t\t\"Smith\", \"Johnson\", \"Williams\", \"Brown\", \"Jones\",\n\t\t\t\t\"Miller\", \"Davis\", \"Garcia\", \"Rodriguez\", \"Wilson\",\n\t\t\t\t\"Martinez\", \"Anderson\", \"Taylor\", \"Thomas\", \"Hernandez\",\n\t\t\t\t\"Moore\", \"Martin\", \"Jackson\", \"Thompson\", \"White\",\n\t\t\t\t\"Lopez\", \"Lee\", \"Gonzalez\", \"Harris\", \"Clark\",\n\t\t\t\t\"Lewis\", \"Robinson\", \"Walker\", \"Perez\", \"Hall\",\n\t\t\t\t\"Young\", \"Allen\"\n\t\t\t]\n\t\t\treturn this.pick(names)\n\t\t\t\t// or this.capitalize(this.word())\n\t\t},\n\t\t// 随机生成一个常见的英文姓名。\n\t\tname: function(middle) {\n\t\t\treturn this.first() + ' ' +\n\t\t\t\t(middle ? this.first() + ' ' : '') +\n\t\t\t\tthis.last()\n\t\t},\n\t\t/*\n\t\t 随机生成一个常见的中文姓。\n\t\t [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm)\n\t\t [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/)\n\t\t */\n\t\tcfirst: function() {\n\t\t\tvar names = (\n\t\t\t\t'王 李 张 刘 陈 杨 赵 黄 周 吴 ' +\n\t\t\t\t'徐 孙 胡 朱 高 林 何 郭 马 罗 ' +\n\t\t\t\t'梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' +\n\t\t\t\t'程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' +\n\t\t\t\t'苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' +\n\t\t\t\t'余 潘 杜 戴 夏 锺 汪 田 任 姜 ' +\n\t\t\t\t'范 方 石 姚 谭 廖 邹 熊 金 陆 ' +\n\t\t\t\t'郝 孔 白 崔 康 毛 邱 秦 江 史 ' +\n\t\t\t\t'顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' +\n\t\t\t\t'尹 黎 易 常 武 乔 贺 赖 龚 文'\n\t\t\t).split(' ')\n\t\t\treturn this.pick(names)\n\t\t},\n\t\t/*\n\t\t 随机生成一个常见的中文名。\n\t\t [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html)\n\t\t */\n\t\tclast: function() {\n\t\t\tvar names = (\n\t\t\t\t'伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' +\n\t\t\t\t'洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' +\n\t\t\t\t'平 刚 桂英'\n\t\t\t).split(' ')\n\t\t\treturn this.pick(names)\n\t\t},\n\t\t// 随机生成一个常见的中文姓名。\n\t\tcname: function() {\n\t\t\treturn this.cfirst() + this.clast()\n\t\t}\n\t}\n\n/***/ }),\n/* 16 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Web\n\t*/\n\tmodule.exports = {\n\t /*\n\t 随机生成一个 URL。\n\t\n\t [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt)\n\t http Hypertext Transfer Protocol \n\t ftp File Transfer protocol \n\t gopher The Gopher protocol \n\t mailto Electronic mail address \n\t mid Message identifiers for electronic mail \n\t cid Content identifiers for MIME body part \n\t news Usenet news \n\t nntp Usenet news for local NNTP access only \n\t prospero Access using the prospero protocols \n\t telnet rlogin tn3270 Reference to interactive sessions\n\t wais Wide Area Information Servers \n\t */\n\t url: function(protocol, host) {\n\t return (protocol || this.protocol()) + '://' + // protocol?\n\t (host || this.domain()) + // host?\n\t '/' + this.word()\n\t },\n\t // 随机生成一个 URL 协议。\n\t protocol: function() {\n\t return this.pick(\n\t // 协议簇\n\t 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ')\n\t )\n\t },\n\t // 随机生成一个域名。\n\t domain: function(tld) {\n\t return this.word() + '.' + (tld || this.tld())\n\t },\n\t /*\n\t 随机生成一个顶级域名。\n\t 国际顶级域名 international top-level domain-names, iTLDs\n\t 国家顶级域名 national top-level domainnames, nTLDs\n\t [域名后缀大全](http://www.163ns.com/zixun/post/4417.html)\n\t */\n\t tld: function() { // Top Level Domain\n\t return this.pick(\n\t (\n\t // 域名后缀\n\t 'com net org edu gov int mil cn ' +\n\t // 国内域名\n\t 'com.cn net.cn gov.cn org.cn ' +\n\t // 中文国内域名\n\t '中国 中国互联.公司 中国互联.网络 ' +\n\t // 新国际域名\n\t 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' +\n\t // 世界各国域名后缀\n\t 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw'\n\t ).split(' ')\n\t )\n\t },\n\t // 随机生成一个邮件地址。\n\t email: function(domain) {\n\t return this.character('lower') + '.' + this.word() + '@' +\n\t (\n\t domain ||\n\t (this.word() + '.' + this.tld())\n\t )\n\t // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld()\n\t // return this.word() + '@' + (domain || this.domain())\n\t },\n\t // 随机生成一个 IP 地址。\n\t ip: function() {\n\t return this.natural(0, 255) + '.' +\n\t this.natural(0, 255) + '.' +\n\t this.natural(0, 255) + '.' +\n\t this.natural(0, 255)\n\t }\n\t}\n\n/***/ }),\n/* 17 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Address\n\t*/\n\t\n\tvar DICT = __webpack_require__(18)\n\tvar REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']\n\t\n\tmodule.exports = {\n\t // 随机生成一个大区。\n\t region: function() {\n\t return this.pick(REGION)\n\t },\n\t // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。\n\t province: function() {\n\t return this.pick(DICT).name\n\t },\n\t // 随机生成一个(中国)市。\n\t city: function(prefix) {\n\t var province = this.pick(DICT)\n\t var city = this.pick(province.children)\n\t return prefix ? [province.name, city.name].join(' ') : city.name\n\t },\n\t // 随机生成一个(中国)县。\n\t county: function(prefix) {\n\t var province = this.pick(DICT)\n\t var city = this.pick(province.children)\n\t var county = this.pick(city.children) || {\n\t name: '-'\n\t }\n\t return prefix ? [province.name, city.name, county.name].join(' ') : county.name\n\t },\n\t // 随机生成一个邮政编码(六位数字)。\n\t zip: function(len) {\n\t var zip = ''\n\t for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9)\n\t return zip\n\t }\n\t\n\t // address: function() {},\n\t // phone: function() {},\n\t // areacode: function() {},\n\t // street: function() {},\n\t // street_suffixes: function() {},\n\t // street_suffix: function() {},\n\t // states: function() {},\n\t // state: function() {},\n\t}\n\n/***/ }),\n/* 18 */\n/***/ (function(module, exports) {\n\n\t/*\n\t ## Address 字典数据\n\t\n\t 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856\n\t\n\t 国标 省(市)级行政区划码表\n\t\n\t 华北 北京市 天津市 河北省 山西省 内蒙古自治区\n\t 东北 辽宁省 吉林省 黑龙江省\n\t 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省\n\t 华南 广东省 广西壮族自治区 海南省\n\t 华中 河南省 湖北省 湖南省\n\t 西南 重庆市 四川省 贵州省 云南省 西藏自治区\n\t 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区\n\t 港澳台 香港特别行政区 澳门特别行政区 台湾省\n\t \n\t **排序**\n\t \n\t ```js\n\t var map = {}\n\t _.each(_.keys(REGIONS),function(id){\n\t map[id] = REGIONS[ID]\n\t })\n\t JSON.stringify(map)\n\t ```\n\t*/\n\tvar DICT = {\n\t \"110000\": \"北京\",\n\t \"110100\": \"北京市\",\n\t \"110101\": \"东城区\",\n\t \"110102\": \"西城区\",\n\t \"110105\": \"朝阳区\",\n\t \"110106\": \"丰台区\",\n\t \"110107\": \"石景山区\",\n\t \"110108\": \"海淀区\",\n\t \"110109\": \"门头沟区\",\n\t \"110111\": \"房山区\",\n\t \"110112\": \"通州区\",\n\t \"110113\": \"顺义区\",\n\t \"110114\": \"昌平区\",\n\t \"110115\": \"大兴区\",\n\t \"110116\": \"怀柔区\",\n\t \"110117\": \"平谷区\",\n\t \"110228\": \"密云县\",\n\t \"110229\": \"延庆县\",\n\t \"110230\": \"其它区\",\n\t \"120000\": \"天津\",\n\t \"120100\": \"天津市\",\n\t \"120101\": \"和平区\",\n\t \"120102\": \"河东区\",\n\t \"120103\": \"河西区\",\n\t \"120104\": \"南开区\",\n\t \"120105\": \"河北区\",\n\t \"120106\": \"红桥区\",\n\t \"120110\": \"东丽区\",\n\t \"120111\": \"西青区\",\n\t \"120112\": \"津南区\",\n\t \"120113\": \"北辰区\",\n\t \"120114\": \"武清区\",\n\t \"120115\": \"宝坻区\",\n\t \"120116\": \"滨海新区\",\n\t \"120221\": \"宁河县\",\n\t \"120223\": \"静海县\",\n\t \"120225\": \"蓟县\",\n\t \"120226\": \"其它区\",\n\t \"130000\": \"河北省\",\n\t \"130100\": \"石家庄市\",\n\t \"130102\": \"长安区\",\n\t \"130103\": \"桥东区\",\n\t \"130104\": \"桥西区\",\n\t \"130105\": \"新华区\",\n\t \"130107\": \"井陉矿区\",\n\t \"130108\": \"裕华区\",\n\t \"130121\": \"井陉县\",\n\t \"130123\": \"正定县\",\n\t \"130124\": \"栾城县\",\n\t \"130125\": \"行唐县\",\n\t \"130126\": \"灵寿县\",\n\t \"130127\": \"高邑县\",\n\t \"130128\": \"深泽县\",\n\t \"130129\": \"赞皇县\",\n\t \"130130\": \"无极县\",\n\t \"130131\": \"平山县\",\n\t \"130132\": \"元氏县\",\n\t \"130133\": \"赵县\",\n\t \"130181\": \"辛集市\",\n\t \"130182\": \"藁城市\",\n\t \"130183\": \"晋州市\",\n\t \"130184\": \"新乐市\",\n\t \"130185\": \"鹿泉市\",\n\t \"130186\": \"其它区\",\n\t \"130200\": \"唐山市\",\n\t \"130202\": \"路南区\",\n\t \"130203\": \"路北区\",\n\t \"130204\": \"古冶区\",\n\t \"130205\": \"开平区\",\n\t \"130207\": \"丰南区\",\n\t \"130208\": \"丰润区\",\n\t \"130223\": \"滦县\",\n\t \"130224\": \"滦南县\",\n\t \"130225\": \"乐亭县\",\n\t \"130227\": \"迁西县\",\n\t \"130229\": \"玉田县\",\n\t \"130230\": \"曹妃甸区\",\n\t \"130281\": \"遵化市\",\n\t \"130283\": \"迁安市\",\n\t \"130284\": \"其它区\",\n\t \"130300\": \"秦皇岛市\",\n\t \"130302\": \"海港区\",\n\t \"130303\": \"山海关区\",\n\t \"130304\": \"北戴河区\",\n\t \"130321\": \"青龙满族自治县\",\n\t \"130322\": \"昌黎县\",\n\t \"130323\": \"抚宁县\",\n\t \"130324\": \"卢龙县\",\n\t \"130398\": \"其它区\",\n\t \"130400\": \"邯郸市\",\n\t \"130402\": \"邯山区\",\n\t \"130403\": \"丛台区\",\n\t \"130404\": \"复兴区\",\n\t \"130406\": \"峰峰矿区\",\n\t \"130421\": \"邯郸县\",\n\t \"130423\": \"临漳县\",\n\t \"130424\": \"成安县\",\n\t \"130425\": \"大名县\",\n\t \"130426\": \"涉县\",\n\t \"130427\": \"磁县\",\n\t \"130428\": \"肥乡县\",\n\t \"130429\": \"永年县\",\n\t \"130430\": \"邱县\",\n\t \"130431\": \"鸡泽县\",\n\t \"130432\": \"广平县\",\n\t \"130433\": \"馆陶县\",\n\t \"130434\": \"魏县\",\n\t \"130435\": \"曲周县\",\n\t \"130481\": \"武安市\",\n\t \"130482\": \"其它区\",\n\t \"130500\": \"邢台市\",\n\t \"130502\": \"桥东区\",\n\t \"130503\": \"桥西区\",\n\t \"130521\": \"邢台县\",\n\t \"130522\": \"临城县\",\n\t \"130523\": \"内丘县\",\n\t \"130524\": \"柏乡县\",\n\t \"130525\": \"隆尧县\",\n\t \"130526\": \"任县\",\n\t \"130527\": \"南和县\",\n\t \"130528\": \"宁晋县\",\n\t \"130529\": \"巨鹿县\",\n\t \"130530\": \"新河县\",\n\t \"130531\": \"广宗县\",\n\t \"130532\": \"平乡县\",\n\t \"130533\": \"威县\",\n\t \"130534\": \"清河县\",\n\t \"130535\": \"临西县\",\n\t \"130581\": \"南宫市\",\n\t \"130582\": \"沙河市\",\n\t \"130583\": \"其它区\",\n\t \"130600\": \"保定市\",\n\t \"130602\": \"新市区\",\n\t \"130603\": \"北市区\",\n\t \"130604\": \"南市区\",\n\t \"130621\": \"满城县\",\n\t \"130622\": \"清苑县\",\n\t \"130623\": \"涞水县\",\n\t \"130624\": \"阜平县\",\n\t \"130625\": \"徐水县\",\n\t \"130626\": \"定兴县\",\n\t \"130627\": \"唐县\",\n\t \"130628\": \"高阳县\",\n\t \"130629\": \"容城县\",\n\t \"130630\": \"涞源县\",\n\t \"130631\": \"望都县\",\n\t \"130632\": \"安新县\",\n\t \"130633\": \"易县\",\n\t \"130634\": \"曲阳县\",\n\t \"130635\": \"蠡县\",\n\t \"130636\": \"顺平县\",\n\t \"130637\": \"博野县\",\n\t \"130638\": \"雄县\",\n\t \"130681\": \"涿州市\",\n\t \"130682\": \"定州市\",\n\t \"130683\": \"安国市\",\n\t \"130684\": \"高碑店市\",\n\t \"130699\": \"其它区\",\n\t \"130700\": \"张家口市\",\n\t \"130702\": \"桥东区\",\n\t \"130703\": \"桥西区\",\n\t \"130705\": \"宣化区\",\n\t \"130706\": \"下花园区\",\n\t \"130721\": \"宣化县\",\n\t \"130722\": \"张北县\",\n\t \"130723\": \"康保县\",\n\t \"130724\": \"沽源县\",\n\t \"130725\": \"尚义县\",\n\t \"130726\": \"蔚县\",\n\t \"130727\": \"阳原县\",\n\t \"130728\": \"怀安县\",\n\t \"130729\": \"万全县\",\n\t \"130730\": \"怀来县\",\n\t \"130731\": \"涿鹿县\",\n\t \"130732\": \"赤城县\",\n\t \"130733\": \"崇礼县\",\n\t \"130734\": \"其它区\",\n\t \"130800\": \"承德市\",\n\t \"130802\": \"双桥区\",\n\t \"130803\": \"双滦区\",\n\t \"130804\": \"鹰手营子矿区\",\n\t \"130821\": \"承德县\",\n\t \"130822\": \"兴隆县\",\n\t \"130823\": \"平泉县\",\n\t \"130824\": \"滦平县\",\n\t \"130825\": \"隆化县\",\n\t \"130826\": \"丰宁满族自治县\",\n\t \"130827\": \"宽城满族自治县\",\n\t \"130828\": \"围场满族蒙古族自治县\",\n\t \"130829\": \"其它区\",\n\t \"130900\": \"沧州市\",\n\t \"130902\": \"新华区\",\n\t \"130903\": \"运河区\",\n\t \"130921\": \"沧县\",\n\t \"130922\": \"青县\",\n\t \"130923\": \"东光县\",\n\t \"130924\": \"海兴县\",\n\t \"130925\": \"盐山县\",\n\t \"130926\": \"肃宁县\",\n\t \"130927\": \"南皮县\",\n\t \"130928\": \"吴桥县\",\n\t \"130929\": \"献县\",\n\t \"130930\": \"孟村回族自治县\",\n\t \"130981\": \"泊头市\",\n\t \"130982\": \"任丘市\",\n\t \"130983\": \"黄骅市\",\n\t \"130984\": \"河间市\",\n\t \"130985\": \"其它区\",\n\t \"131000\": \"廊坊市\",\n\t \"131002\": \"安次区\",\n\t \"131003\": \"广阳区\",\n\t \"131022\": \"固安县\",\n\t \"131023\": \"永清县\",\n\t \"131024\": \"香河县\",\n\t \"131025\": \"大城县\",\n\t \"131026\": \"文安县\",\n\t \"131028\": \"大厂回族自治县\",\n\t \"131081\": \"霸州市\",\n\t \"131082\": \"三河市\",\n\t \"131083\": \"其它区\",\n\t \"131100\": \"衡水市\",\n\t \"131102\": \"桃城区\",\n\t \"131121\": \"枣强县\",\n\t \"131122\": \"武邑县\",\n\t \"131123\": \"武强县\",\n\t \"131124\": \"饶阳县\",\n\t \"131125\": \"安平县\",\n\t \"131126\": \"故城县\",\n\t \"131127\": \"景县\",\n\t \"131128\": \"阜城县\",\n\t \"131181\": \"冀州市\",\n\t \"131182\": \"深州市\",\n\t \"131183\": \"其它区\",\n\t \"140000\": \"山西省\",\n\t \"140100\": \"太原市\",\n\t \"140105\": \"小店区\",\n\t \"140106\": \"迎泽区\",\n\t \"140107\": \"杏花岭区\",\n\t \"140108\": \"尖草坪区\",\n\t \"140109\": \"万柏林区\",\n\t \"140110\": \"晋源区\",\n\t \"140121\": \"清徐县\",\n\t \"140122\": \"阳曲县\",\n\t \"140123\": \"娄烦县\",\n\t \"140181\": \"古交市\",\n\t \"140182\": \"其它区\",\n\t \"140200\": \"大同市\",\n\t \"140202\": \"城区\",\n\t \"140203\": \"矿区\",\n\t \"140211\": \"南郊区\",\n\t \"140212\": \"新荣区\",\n\t \"140221\": \"阳高县\",\n\t \"140222\": \"天镇县\",\n\t \"140223\": \"广灵县\",\n\t \"140224\": \"灵丘县\",\n\t \"140225\": \"浑源县\",\n\t \"140226\": \"左云县\",\n\t \"140227\": \"大同县\",\n\t \"140228\": \"其它区\",\n\t \"140300\": \"阳泉市\",\n\t \"140302\": \"城区\",\n\t \"140303\": \"矿区\",\n\t \"140311\": \"郊区\",\n\t \"140321\": \"平定县\",\n\t \"140322\": \"盂县\",\n\t \"140323\": \"其它区\",\n\t \"140400\": \"长治市\",\n\t \"140421\": \"长治县\",\n\t \"140423\": \"襄垣县\",\n\t \"140424\": \"屯留县\",\n\t \"140425\": \"平顺县\",\n\t \"140426\": \"黎城县\",\n\t \"140427\": \"壶关县\",\n\t \"140428\": \"长子县\",\n\t \"140429\": \"武乡县\",\n\t \"140430\": \"沁县\",\n\t \"140431\": \"沁源县\",\n\t \"140481\": \"潞城市\",\n\t \"140482\": \"城区\",\n\t \"140483\": \"郊区\",\n\t \"140485\": \"其它区\",\n\t \"140500\": \"晋城市\",\n\t \"140502\": \"城区\",\n\t \"140521\": \"沁水县\",\n\t \"140522\": \"阳城县\",\n\t \"140524\": \"陵川县\",\n\t \"140525\": \"泽州县\",\n\t \"140581\": \"高平市\",\n\t \"140582\": \"其它区\",\n\t \"140600\": \"朔州市\",\n\t \"140602\": \"朔城区\",\n\t \"140603\": \"平鲁区\",\n\t \"140621\": \"山阴县\",\n\t \"140622\": \"应县\",\n\t \"140623\": \"右玉县\",\n\t \"140624\": \"怀仁县\",\n\t \"140625\": \"其它区\",\n\t \"140700\": \"晋中市\",\n\t \"140702\": \"榆次区\",\n\t \"140721\": \"榆社县\",\n\t \"140722\": \"左权县\",\n\t \"140723\": \"和顺县\",\n\t \"140724\": \"昔阳县\",\n\t \"140725\": \"寿阳县\",\n\t \"140726\": \"太谷县\",\n\t \"140727\": \"祁县\",\n\t \"140728\": \"平遥县\",\n\t \"140729\": \"灵石县\",\n\t \"140781\": \"介休市\",\n\t \"140782\": \"其它区\",\n\t \"140800\": \"运城市\",\n\t \"140802\": \"盐湖区\",\n\t \"140821\": \"临猗县\",\n\t \"140822\": \"万荣县\",\n\t \"140823\": \"闻喜县\",\n\t \"140824\": \"稷山县\",\n\t \"140825\": \"新绛县\",\n\t \"140826\": \"绛县\",\n\t \"140827\": \"垣曲县\",\n\t \"140828\": \"夏县\",\n\t \"140829\": \"平陆县\",\n\t \"140830\": \"芮城县\",\n\t \"140881\": \"永济市\",\n\t \"140882\": \"河津市\",\n\t \"140883\": \"其它区\",\n\t \"140900\": \"忻州市\",\n\t \"140902\": \"忻府区\",\n\t \"140921\": \"定襄县\",\n\t \"140922\": \"五台县\",\n\t \"140923\": \"代县\",\n\t \"140924\": \"繁峙县\",\n\t \"140925\": \"宁武县\",\n\t \"140926\": \"静乐县\",\n\t \"140927\": \"神池县\",\n\t \"140928\": \"五寨县\",\n\t \"140929\": \"岢岚县\",\n\t \"140930\": \"河曲县\",\n\t \"140931\": \"保德县\",\n\t \"140932\": \"偏关县\",\n\t \"140981\": \"原平市\",\n\t \"140982\": \"其它区\",\n\t \"141000\": \"临汾市\",\n\t \"141002\": \"尧都区\",\n\t \"141021\": \"曲沃县\",\n\t \"141022\": \"翼城县\",\n\t \"141023\": \"襄汾县\",\n\t \"141024\": \"洪洞县\",\n\t \"141025\": \"古县\",\n\t \"141026\": \"安泽县\",\n\t \"141027\": \"浮山县\",\n\t \"141028\": \"吉县\",\n\t \"141029\": \"乡宁县\",\n\t \"141030\": \"大宁县\",\n\t \"141031\": \"隰县\",\n\t \"141032\": \"永和县\",\n\t \"141033\": \"蒲县\",\n\t \"141034\": \"汾西县\",\n\t \"141081\": \"侯马市\",\n\t \"141082\": \"霍州市\",\n\t \"141083\": \"其它区\",\n\t \"141100\": \"吕梁市\",\n\t \"141102\": \"离石区\",\n\t \"141121\": \"文水县\",\n\t \"141122\": \"交城县\",\n\t \"141123\": \"兴县\",\n\t \"141124\": \"临县\",\n\t \"141125\": \"柳林县\",\n\t \"141126\": \"石楼县\",\n\t \"141127\": \"岚县\",\n\t \"141128\": \"方山县\",\n\t \"141129\": \"中阳县\",\n\t \"141130\": \"交口县\",\n\t \"141181\": \"孝义市\",\n\t \"141182\": \"汾阳市\",\n\t \"141183\": \"其它区\",\n\t \"150000\": \"内蒙古自治区\",\n\t \"150100\": \"呼和浩特市\",\n\t \"150102\": \"新城区\",\n\t \"150103\": \"回民区\",\n\t \"150104\": \"玉泉区\",\n\t \"150105\": \"赛罕区\",\n\t \"150121\": \"土默特左旗\",\n\t \"150122\": \"托克托县\",\n\t \"150123\": \"和林格尔县\",\n\t \"150124\": \"清水河县\",\n\t \"150125\": \"武川县\",\n\t \"150126\": \"其它区\",\n\t \"150200\": \"包头市\",\n\t \"150202\": \"东河区\",\n\t \"150203\": \"昆都仑区\",\n\t \"150204\": \"青山区\",\n\t \"150205\": \"石拐区\",\n\t \"150206\": \"白云鄂博矿区\",\n\t \"150207\": \"九原区\",\n\t \"150221\": \"土默特右旗\",\n\t \"150222\": \"固阳县\",\n\t \"150223\": \"达尔罕茂明安联合旗\",\n\t \"150224\": \"其它区\",\n\t \"150300\": \"乌海市\",\n\t \"150302\": \"海勃湾区\",\n\t \"150303\": \"海南区\",\n\t \"150304\": \"乌达区\",\n\t \"150305\": \"其它区\",\n\t \"150400\": \"赤峰市\",\n\t \"150402\": \"红山区\",\n\t \"150403\": \"元宝山区\",\n\t \"150404\": \"松山区\",\n\t \"150421\": \"阿鲁科尔沁旗\",\n\t \"150422\": \"巴林左旗\",\n\t \"150423\": \"巴林右旗\",\n\t \"150424\": \"林西县\",\n\t \"150425\": \"克什克腾旗\",\n\t \"150426\": \"翁牛特旗\",\n\t \"150428\": \"喀喇沁旗\",\n\t \"150429\": \"宁城县\",\n\t \"150430\": \"敖汉旗\",\n\t \"150431\": \"其它区\",\n\t \"150500\": \"通辽市\",\n\t \"150502\": \"科尔沁区\",\n\t \"150521\": \"科尔沁左翼中旗\",\n\t \"150522\": \"科尔沁左翼后旗\",\n\t \"150523\": \"开鲁县\",\n\t \"150524\": \"库伦旗\",\n\t \"150525\": \"奈曼旗\",\n\t \"150526\": \"扎鲁特旗\",\n\t \"150581\": \"霍林郭勒市\",\n\t \"150582\": \"其它区\",\n\t \"150600\": \"鄂尔多斯市\",\n\t \"150602\": \"东胜区\",\n\t \"150621\": \"达拉特旗\",\n\t \"150622\": \"准格尔旗\",\n\t \"150623\": \"鄂托克前旗\",\n\t \"150624\": \"鄂托克旗\",\n\t \"150625\": \"杭锦旗\",\n\t \"150626\": \"乌审旗\",\n\t \"150627\": \"伊金霍洛旗\",\n\t \"150628\": \"其它区\",\n\t \"150700\": \"呼伦贝尔市\",\n\t \"150702\": \"海拉尔区\",\n\t \"150703\": \"扎赉诺尔区\",\n\t \"150721\": \"阿荣旗\",\n\t \"150722\": \"莫力达瓦达斡尔族自治旗\",\n\t \"150723\": \"鄂伦春自治旗\",\n\t \"150724\": \"鄂温克族自治旗\",\n\t \"150725\": \"陈巴尔虎旗\",\n\t \"150726\": \"新巴尔虎左旗\",\n\t \"150727\": \"新巴尔虎右旗\",\n\t \"150781\": \"满洲里市\",\n\t \"150782\": \"牙克石市\",\n\t \"150783\": \"扎兰屯市\",\n\t \"150784\": \"额尔古纳市\",\n\t \"150785\": \"根河市\",\n\t \"150786\": \"其它区\",\n\t \"150800\": \"巴彦淖尔市\",\n\t \"150802\": \"临河区\",\n\t \"150821\": \"五原县\",\n\t \"150822\": \"磴口县\",\n\t \"150823\": \"乌拉特前旗\",\n\t \"150824\": \"乌拉特中旗\",\n\t \"150825\": \"乌拉特后旗\",\n\t \"150826\": \"杭锦后旗\",\n\t \"150827\": \"其它区\",\n\t \"150900\": \"乌兰察布市\",\n\t \"150902\": \"集宁区\",\n\t \"150921\": \"卓资县\",\n\t \"150922\": \"化德县\",\n\t \"150923\": \"商都县\",\n\t \"150924\": \"兴和县\",\n\t \"150925\": \"凉城县\",\n\t \"150926\": \"察哈尔右翼前旗\",\n\t \"150927\": \"察哈尔右翼中旗\",\n\t \"150928\": \"察哈尔右翼后旗\",\n\t \"150929\": \"四子王旗\",\n\t \"150981\": \"丰镇市\",\n\t \"150982\": \"其它区\",\n\t \"152200\": \"兴安盟\",\n\t \"152201\": \"乌兰浩特市\",\n\t \"152202\": \"阿尔山市\",\n\t \"152221\": \"科尔沁右翼前旗\",\n\t \"152222\": \"科尔沁右翼中旗\",\n\t \"152223\": \"扎赉特旗\",\n\t \"152224\": \"突泉县\",\n\t \"152225\": \"其它区\",\n\t \"152500\": \"锡林郭勒盟\",\n\t \"152501\": \"二连浩特市\",\n\t \"152502\": \"锡林浩特市\",\n\t \"152522\": \"阿巴嘎旗\",\n\t \"152523\": \"苏尼特左旗\",\n\t \"152524\": \"苏尼特右旗\",\n\t \"152525\": \"东乌珠穆沁旗\",\n\t \"152526\": \"西乌珠穆沁旗\",\n\t \"152527\": \"太仆寺旗\",\n\t \"152528\": \"镶黄旗\",\n\t \"152529\": \"正镶白旗\",\n\t \"152530\": \"正蓝旗\",\n\t \"152531\": \"多伦县\",\n\t \"152532\": \"其它区\",\n\t \"152900\": \"阿拉善盟\",\n\t \"152921\": \"阿拉善左旗\",\n\t \"152922\": \"阿拉善右旗\",\n\t \"152923\": \"额济纳旗\",\n\t \"152924\": \"其它区\",\n\t \"210000\": \"辽宁省\",\n\t \"210100\": \"沈阳市\",\n\t \"210102\": \"和平区\",\n\t \"210103\": \"沈河区\",\n\t \"210104\": \"大东区\",\n\t \"210105\": \"皇姑区\",\n\t \"210106\": \"铁西区\",\n\t \"210111\": \"苏家屯区\",\n\t \"210112\": \"东陵区\",\n\t \"210113\": \"新城子区\",\n\t \"210114\": \"于洪区\",\n\t \"210122\": \"辽中县\",\n\t \"210123\": \"康平县\",\n\t \"210124\": \"法库县\",\n\t \"210181\": \"新民市\",\n\t \"210184\": \"沈北新区\",\n\t \"210185\": \"其它区\",\n\t \"210200\": \"大连市\",\n\t \"210202\": \"中山区\",\n\t \"210203\": \"西岗区\",\n\t \"210204\": \"沙河口区\",\n\t \"210211\": \"甘井子区\",\n\t \"210212\": \"旅顺口区\",\n\t \"210213\": \"金州区\",\n\t \"210224\": \"长海县\",\n\t \"210281\": \"瓦房店市\",\n\t \"210282\": \"普兰店市\",\n\t \"210283\": \"庄河市\",\n\t \"210298\": \"其它区\",\n\t \"210300\": \"鞍山市\",\n\t \"210302\": \"铁东区\",\n\t \"210303\": \"铁西区\",\n\t \"210304\": \"立山区\",\n\t \"210311\": \"千山区\",\n\t \"210321\": \"台安县\",\n\t \"210323\": \"岫岩满族自治县\",\n\t \"210381\": \"海城市\",\n\t \"210382\": \"其它区\",\n\t \"210400\": \"抚顺市\",\n\t \"210402\": \"新抚区\",\n\t \"210403\": \"东洲区\",\n\t \"210404\": \"望花区\",\n\t \"210411\": \"顺城区\",\n\t \"210421\": \"抚顺县\",\n\t \"210422\": \"新宾满族自治县\",\n\t \"210423\": \"清原满族自治县\",\n\t \"210424\": \"其它区\",\n\t \"210500\": \"本溪市\",\n\t \"210502\": \"平山区\",\n\t \"210503\": \"溪湖区\",\n\t \"210504\": \"明山区\",\n\t \"210505\": \"南芬区\",\n\t \"210521\": \"本溪满族自治县\",\n\t \"210522\": \"桓仁满族自治县\",\n\t \"210523\": \"其它区\",\n\t \"210600\": \"丹东市\",\n\t \"210602\": \"元宝区\",\n\t \"210603\": \"振兴区\",\n\t \"210604\": \"振安区\",\n\t \"210624\": \"宽甸满族自治县\",\n\t \"210681\": \"东港市\",\n\t \"210682\": \"凤城市\",\n\t \"210683\": \"其它区\",\n\t \"210700\": \"锦州市\",\n\t \"210702\": \"古塔区\",\n\t \"210703\": \"凌河区\",\n\t \"210711\": \"太和区\",\n\t \"210726\": \"黑山县\",\n\t \"210727\": \"义县\",\n\t \"210781\": \"凌海市\",\n\t \"210782\": \"北镇市\",\n\t \"210783\": \"其它区\",\n\t \"210800\": \"营口市\",\n\t \"210802\": \"站前区\",\n\t \"210803\": \"西市区\",\n\t \"210804\": \"鲅鱼圈区\",\n\t \"210811\": \"老边区\",\n\t \"210881\": \"盖州市\",\n\t \"210882\": \"大石桥市\",\n\t \"210883\": \"其它区\",\n\t \"210900\": \"阜新市\",\n\t \"210902\": \"海州区\",\n\t \"210903\": \"新邱区\",\n\t \"210904\": \"太平区\",\n\t \"210905\": \"清河门区\",\n\t \"210911\": \"细河区\",\n\t \"210921\": \"阜新蒙古族自治县\",\n\t \"210922\": \"彰武县\",\n\t \"210923\": \"其它区\",\n\t \"211000\": \"辽阳市\",\n\t \"211002\": \"白塔区\",\n\t \"211003\": \"文圣区\",\n\t \"211004\": \"宏伟区\",\n\t \"211005\": \"弓长岭区\",\n\t \"211011\": \"太子河区\",\n\t \"211021\": \"辽阳县\",\n\t \"211081\": \"灯塔市\",\n\t \"211082\": \"其它区\",\n\t \"211100\": \"盘锦市\",\n\t \"211102\": \"双台子区\",\n\t \"211103\": \"兴隆台区\",\n\t \"211121\": \"大洼县\",\n\t \"211122\": \"盘山县\",\n\t \"211123\": \"其它区\",\n\t \"211200\": \"铁岭市\",\n\t \"211202\": \"银州区\",\n\t \"211204\": \"清河区\",\n\t \"211221\": \"铁岭县\",\n\t \"211223\": \"西丰县\",\n\t \"211224\": \"昌图县\",\n\t \"211281\": \"调兵山市\",\n\t \"211282\": \"开原市\",\n\t \"211283\": \"其它区\",\n\t \"211300\": \"朝阳市\",\n\t \"211302\": \"双塔区\",\n\t \"211303\": \"龙城区\",\n\t \"211321\": \"朝阳县\",\n\t \"211322\": \"建平县\",\n\t \"211324\": \"喀喇沁左翼蒙古族自治县\",\n\t \"211381\": \"北票市\",\n\t \"211382\": \"凌源市\",\n\t \"211383\": \"其它区\",\n\t \"211400\": \"葫芦岛市\",\n\t \"211402\": \"连山区\",\n\t \"211403\": \"龙港区\",\n\t \"211404\": \"南票区\",\n\t \"211421\": \"绥中县\",\n\t \"211422\": \"建昌县\",\n\t \"211481\": \"兴城市\",\n\t \"211482\": \"其它区\",\n\t \"220000\": \"吉林省\",\n\t \"220100\": \"长春市\",\n\t \"220102\": \"南关区\",\n\t \"220103\": \"宽城区\",\n\t \"220104\": \"朝阳区\",\n\t \"220105\": \"二道区\",\n\t \"220106\": \"绿园区\",\n\t \"220112\": \"双阳区\",\n\t \"220122\": \"农安县\",\n\t \"220181\": \"九台市\",\n\t \"220182\": \"榆树市\",\n\t \"220183\": \"德惠市\",\n\t \"220188\": \"其它区\",\n\t \"220200\": \"吉林市\",\n\t \"220202\": \"昌邑区\",\n\t \"220203\": \"龙潭区\",\n\t \"220204\": \"船营区\",\n\t \"220211\": \"丰满区\",\n\t \"220221\": \"永吉县\",\n\t \"220281\": \"蛟河市\",\n\t \"220282\": \"桦甸市\",\n\t \"220283\": \"舒兰市\",\n\t \"220284\": \"磐石市\",\n\t \"220285\": \"其它区\",\n\t \"220300\": \"四平市\",\n\t \"220302\": \"铁西区\",\n\t \"220303\": \"铁东区\",\n\t \"220322\": \"梨树县\",\n\t \"220323\": \"伊通满族自治县\",\n\t \"220381\": \"公主岭市\",\n\t \"220382\": \"双辽市\",\n\t \"220383\": \"其它区\",\n\t \"220400\": \"辽源市\",\n\t \"220402\": \"龙山区\",\n\t \"220403\": \"西安区\",\n\t \"220421\": \"东丰县\",\n\t \"220422\": \"东辽县\",\n\t \"220423\": \"其它区\",\n\t \"220500\": \"通化市\",\n\t \"220502\": \"东昌区\",\n\t \"220503\": \"二道江区\",\n\t \"220521\": \"通化县\",\n\t \"220523\": \"辉南县\",\n\t \"220524\": \"柳河县\",\n\t \"220581\": \"梅河口市\",\n\t \"220582\": \"集安市\",\n\t \"220583\": \"其它区\",\n\t \"220600\": \"白山市\",\n\t \"220602\": \"浑江区\",\n\t \"220621\": \"抚松县\",\n\t \"220622\": \"靖宇县\",\n\t \"220623\": \"长白朝鲜族自治县\",\n\t \"220625\": \"江源区\",\n\t \"220681\": \"临江市\",\n\t \"220682\": \"其它区\",\n\t \"220700\": \"松原市\",\n\t \"220702\": \"宁江区\",\n\t \"220721\": \"前郭尔罗斯蒙古族自治县\",\n\t \"220722\": \"长岭县\",\n\t \"220723\": \"乾安县\",\n\t \"220724\": \"扶余市\",\n\t \"220725\": \"其它区\",\n\t \"220800\": \"白城市\",\n\t \"220802\": \"洮北区\",\n\t \"220821\": \"镇赉县\",\n\t \"220822\": \"通榆县\",\n\t \"220881\": \"洮南市\",\n\t \"220882\": \"大安市\",\n\t \"220883\": \"其它区\",\n\t \"222400\": \"延边朝鲜族自治州\",\n\t \"222401\": \"延吉市\",\n\t \"222402\": \"图们市\",\n\t \"222403\": \"敦化市\",\n\t \"222404\": \"珲春市\",\n\t \"222405\": \"龙井市\",\n\t \"222406\": \"和龙市\",\n\t \"222424\": \"汪清县\",\n\t \"222426\": \"安图县\",\n\t \"222427\": \"其它区\",\n\t \"230000\": \"黑龙江省\",\n\t \"230100\": \"哈尔滨市\",\n\t \"230102\": \"道里区\",\n\t \"230103\": \"南岗区\",\n\t \"230104\": \"道外区\",\n\t \"230106\": \"香坊区\",\n\t \"230108\": \"平房区\",\n\t \"230109\": \"松北区\",\n\t \"230111\": \"呼兰区\",\n\t \"230123\": \"依兰县\",\n\t \"230124\": \"方正县\",\n\t \"230125\": \"宾县\",\n\t \"230126\": \"巴彦县\",\n\t \"230127\": \"木兰县\",\n\t \"230128\": \"通河县\",\n\t \"230129\": \"延寿县\",\n\t \"230181\": \"阿城区\",\n\t \"230182\": \"双城市\",\n\t \"230183\": \"尚志市\",\n\t \"230184\": \"五常市\",\n\t \"230186\": \"其它区\",\n\t \"230200\": \"齐齐哈尔市\",\n\t \"230202\": \"龙沙区\",\n\t \"230203\": \"建华区\",\n\t \"230204\": \"铁锋区\",\n\t \"230205\": \"昂昂溪区\",\n\t \"230206\": \"富拉尔基区\",\n\t \"230207\": \"碾子山区\",\n\t \"230208\": \"梅里斯达斡尔族区\",\n\t \"230221\": \"龙江县\",\n\t \"230223\": \"依安县\",\n\t \"230224\": \"泰来县\",\n\t \"230225\": \"甘南县\",\n\t \"230227\": \"富裕县\",\n\t \"230229\": \"克山县\",\n\t \"230230\": \"克东县\",\n\t \"230231\": \"拜泉县\",\n\t \"230281\": \"讷河市\",\n\t \"230282\": \"其它区\",\n\t \"230300\": \"鸡西市\",\n\t \"230302\": \"鸡冠区\",\n\t \"230303\": \"恒山区\",\n\t \"230304\": \"滴道区\",\n\t \"230305\": \"梨树区\",\n\t \"230306\": \"城子河区\",\n\t \"230307\": \"麻山区\",\n\t \"230321\": \"鸡东县\",\n\t \"230381\": \"虎林市\",\n\t \"230382\": \"密山市\",\n\t \"230383\": \"其它区\",\n\t \"230400\": \"鹤岗市\",\n\t \"230402\": \"向阳区\",\n\t \"230403\": \"工农区\",\n\t \"230404\": \"南山区\",\n\t \"230405\": \"兴安区\",\n\t \"230406\": \"东山区\",\n\t \"230407\": \"兴山区\",\n\t \"230421\": \"萝北县\",\n\t \"230422\": \"绥滨县\",\n\t \"230423\": \"其它区\",\n\t \"230500\": \"双鸭山市\",\n\t \"230502\": \"尖山区\",\n\t \"230503\": \"岭东区\",\n\t \"230505\": \"四方台区\",\n\t \"230506\": \"宝山区\",\n\t \"230521\": \"集贤县\",\n\t \"230522\": \"友谊县\",\n\t \"230523\": \"宝清县\",\n\t \"230524\": \"饶河县\",\n\t \"230525\": \"其它区\",\n\t \"230600\": \"大庆市\",\n\t \"230602\": \"萨尔图区\",\n\t \"230603\": \"龙凤区\",\n\t \"230604\": \"让胡路区\",\n\t \"230605\": \"红岗区\",\n\t \"230606\": \"大同区\",\n\t \"230621\": \"肇州县\",\n\t \"230622\": \"肇源县\",\n\t \"230623\": \"林甸县\",\n\t \"230624\": \"杜尔伯特蒙古族自治县\",\n\t \"230625\": \"其它区\",\n\t \"230700\": \"伊春市\",\n\t \"230702\": \"伊春区\",\n\t \"230703\": \"南岔区\",\n\t \"230704\": \"友好区\",\n\t \"230705\": \"西林区\",\n\t \"230706\": \"翠峦区\",\n\t \"230707\": \"新青区\",\n\t \"230708\": \"美溪区\",\n\t \"230709\": \"金山屯区\",\n\t \"230710\": \"五营区\",\n\t \"230711\": \"乌马河区\",\n\t \"230712\": \"汤旺河区\",\n\t \"230713\": \"带岭区\",\n\t \"230714\": \"乌伊岭区\",\n\t \"230715\": \"红星区\",\n\t \"230716\": \"上甘岭区\",\n\t \"230722\": \"嘉荫县\",\n\t \"230781\": \"铁力市\",\n\t \"230782\": \"其它区\",\n\t \"230800\": \"佳木斯市\",\n\t \"230803\": \"向阳区\",\n\t \"230804\": \"前进区\",\n\t \"230805\": \"东风区\",\n\t \"230811\": \"郊区\",\n\t \"230822\": \"桦南县\",\n\t \"230826\": \"桦川县\",\n\t \"230828\": \"汤原县\",\n\t \"230833\": \"抚远县\",\n\t \"230881\": \"同江市\",\n\t \"230882\": \"富锦市\",\n\t \"230883\": \"其它区\",\n\t \"230900\": \"七台河市\",\n\t \"230902\": \"新兴区\",\n\t \"230903\": \"桃山区\",\n\t \"230904\": \"茄子河区\",\n\t \"230921\": \"勃利县\",\n\t \"230922\": \"其它区\",\n\t \"231000\": \"牡丹江市\",\n\t \"231002\": \"东安区\",\n\t \"231003\": \"阳明区\",\n\t \"231004\": \"爱民区\",\n\t \"231005\": \"西安区\",\n\t \"231024\": \"东宁县\",\n\t \"231025\": \"林口县\",\n\t \"231081\": \"绥芬河市\",\n\t \"231083\": \"海林市\",\n\t \"231084\": \"宁安市\",\n\t \"231085\": \"穆棱市\",\n\t \"231086\": \"其它区\",\n\t \"231100\": \"黑河市\",\n\t \"231102\": \"爱辉区\",\n\t \"231121\": \"嫩江县\",\n\t \"231123\": \"逊克县\",\n\t \"231124\": \"孙吴县\",\n\t \"231181\": \"北安市\",\n\t \"231182\": \"五大连池市\",\n\t \"231183\": \"其它区\",\n\t \"231200\": \"绥化市\",\n\t \"231202\": \"北林区\",\n\t \"231221\": \"望奎县\",\n\t \"231222\": \"兰西县\",\n\t \"231223\": \"青冈县\",\n\t \"231224\": \"庆安县\",\n\t \"231225\": \"明水县\",\n\t \"231226\": \"绥棱县\",\n\t \"231281\": \"安达市\",\n\t \"231282\": \"肇东市\",\n\t \"231283\": \"海伦市\",\n\t \"231284\": \"其它区\",\n\t \"232700\": \"大兴安岭地区\",\n\t \"232702\": \"松岭区\",\n\t \"232703\": \"新林区\",\n\t \"232704\": \"呼中区\",\n\t \"232721\": \"呼玛县\",\n\t \"232722\": \"塔河县\",\n\t \"232723\": \"漠河县\",\n\t \"232724\": \"加格达奇区\",\n\t \"232725\": \"其它区\",\n\t \"310000\": \"上海\",\n\t \"310100\": \"上海市\",\n\t \"310101\": \"黄浦区\",\n\t \"310104\": \"徐汇区\",\n\t \"310105\": \"长宁区\",\n\t \"310106\": \"静安区\",\n\t \"310107\": \"普陀区\",\n\t \"310108\": \"闸北区\",\n\t \"310109\": \"虹口区\",\n\t \"310110\": \"杨浦区\",\n\t \"310112\": \"闵行区\",\n\t \"310113\": \"宝山区\",\n\t \"310114\": \"嘉定区\",\n\t \"310115\": \"浦东新区\",\n\t \"310116\": \"金山区\",\n\t \"310117\": \"松江区\",\n\t \"310118\": \"青浦区\",\n\t \"310120\": \"奉贤区\",\n\t \"310230\": \"崇明县\",\n\t \"310231\": \"其它区\",\n\t \"320000\": \"江苏省\",\n\t \"320100\": \"南京市\",\n\t \"320102\": \"玄武区\",\n\t \"320104\": \"秦淮区\",\n\t \"320105\": \"建邺区\",\n\t \"320106\": \"鼓楼区\",\n\t \"320111\": \"浦口区\",\n\t \"320113\": \"栖霞区\",\n\t \"320114\": \"雨花台区\",\n\t \"320115\": \"江宁区\",\n\t \"320116\": \"六合区\",\n\t \"320124\": \"溧水区\",\n\t \"320125\": \"高淳区\",\n\t \"320126\": \"其它区\",\n\t \"320200\": \"无锡市\",\n\t \"320202\": \"崇安区\",\n\t \"320203\": \"南长区\",\n\t \"320204\": \"北塘区\",\n\t \"320205\": \"锡山区\",\n\t \"320206\": \"惠山区\",\n\t \"320211\": \"滨湖区\",\n\t \"320281\": \"江阴市\",\n\t \"320282\": \"宜兴市\",\n\t \"320297\": \"其它区\",\n\t \"320300\": \"徐州市\",\n\t \"320302\": \"鼓楼区\",\n\t \"320303\": \"云龙区\",\n\t \"320305\": \"贾汪区\",\n\t \"320311\": \"泉山区\",\n\t \"320321\": \"丰县\",\n\t \"320322\": \"沛县\",\n\t \"320323\": \"铜山区\",\n\t \"320324\": \"睢宁县\",\n\t \"320381\": \"新沂市\",\n\t \"320382\": \"邳州市\",\n\t \"320383\": \"其它区\",\n\t \"320400\": \"常州市\",\n\t \"320402\": \"天宁区\",\n\t \"320404\": \"钟楼区\",\n\t \"320405\": \"戚墅堰区\",\n\t \"320411\": \"新北区\",\n\t \"320412\": \"武进区\",\n\t \"320481\": \"溧阳市\",\n\t \"320482\": \"金坛市\",\n\t \"320483\": \"其它区\",\n\t \"320500\": \"苏州市\",\n\t \"320505\": \"虎丘区\",\n\t \"320506\": \"吴中区\",\n\t \"320507\": \"相城区\",\n\t \"320508\": \"姑苏区\",\n\t \"320581\": \"常熟市\",\n\t \"320582\": \"张家港市\",\n\t \"320583\": \"昆山市\",\n\t \"320584\": \"吴江区\",\n\t \"320585\": \"太仓市\",\n\t \"320596\": \"其它区\",\n\t \"320600\": \"南通市\",\n\t \"320602\": \"崇川区\",\n\t \"320611\": \"港闸区\",\n\t \"320612\": \"通州区\",\n\t \"320621\": \"海安县\",\n\t \"320623\": \"如东县\",\n\t \"320681\": \"启东市\",\n\t \"320682\": \"如皋市\",\n\t \"320684\": \"海门市\",\n\t \"320694\": \"其它区\",\n\t \"320700\": \"连云港市\",\n\t \"320703\": \"连云区\",\n\t \"320705\": \"新浦区\",\n\t \"320706\": \"海州区\",\n\t \"320721\": \"赣榆县\",\n\t \"320722\": \"东海县\",\n\t \"320723\": \"灌云县\",\n\t \"320724\": \"灌南县\",\n\t \"320725\": \"其它区\",\n\t \"320800\": \"淮安市\",\n\t \"320802\": \"清河区\",\n\t \"320803\": \"淮安区\",\n\t \"320804\": \"淮阴区\",\n\t \"320811\": \"清浦区\",\n\t \"320826\": \"涟水县\",\n\t \"320829\": \"洪泽县\",\n\t \"320830\": \"盱眙县\",\n\t \"320831\": \"金湖县\",\n\t \"320832\": \"其它区\",\n\t \"320900\": \"盐城市\",\n\t \"320902\": \"亭湖区\",\n\t \"320903\": \"盐都区\",\n\t \"320921\": \"响水县\",\n\t \"320922\": \"滨海县\",\n\t \"320923\": \"阜宁县\",\n\t \"320924\": \"射阳县\",\n\t \"320925\": \"建湖县\",\n\t \"320981\": \"东台市\",\n\t \"320982\": \"大丰市\",\n\t \"320983\": \"其它区\",\n\t \"321000\": \"扬州市\",\n\t \"321002\": \"广陵区\",\n\t \"321003\": \"邗江区\",\n\t \"321023\": \"宝应县\",\n\t \"321081\": \"仪征市\",\n\t \"321084\": \"高邮市\",\n\t \"321088\": \"江都区\",\n\t \"321093\": \"其它区\",\n\t \"321100\": \"镇江市\",\n\t \"321102\": \"京口区\",\n\t \"321111\": \"润州区\",\n\t \"321112\": \"丹徒区\",\n\t \"321181\": \"丹阳市\",\n\t \"321182\": \"扬中市\",\n\t \"321183\": \"句容市\",\n\t \"321184\": \"其它区\",\n\t \"321200\": \"泰州市\",\n\t \"321202\": \"海陵区\",\n\t \"321203\": \"高港区\",\n\t \"321281\": \"兴化市\",\n\t \"321282\": \"靖江市\",\n\t \"321283\": \"泰兴市\",\n\t \"321284\": \"姜堰区\",\n\t \"321285\": \"其它区\",\n\t \"321300\": \"宿迁市\",\n\t \"321302\": \"宿城区\",\n\t \"321311\": \"宿豫区\",\n\t \"321322\": \"沭阳县\",\n\t \"321323\": \"泗阳县\",\n\t \"321324\": \"泗洪县\",\n\t \"321325\": \"其它区\",\n\t \"330000\": \"浙江省\",\n\t \"330100\": \"杭州市\",\n\t \"330102\": \"上城区\",\n\t \"330103\": \"下城区\",\n\t \"330104\": \"江干区\",\n\t \"330105\": \"拱墅区\",\n\t \"330106\": \"西湖区\",\n\t \"330108\": \"滨江区\",\n\t \"330109\": \"萧山区\",\n\t \"330110\": \"余杭区\",\n\t \"330122\": \"桐庐县\",\n\t \"330127\": \"淳安县\",\n\t \"330182\": \"建德市\",\n\t \"330183\": \"富阳市\",\n\t \"330185\": \"临安市\",\n\t \"330186\": \"其它区\",\n\t \"330200\": \"宁波市\",\n\t \"330203\": \"海曙区\",\n\t \"330204\": \"江东区\",\n\t \"330205\": \"江北区\",\n\t \"330206\": \"北仑区\",\n\t \"330211\": \"镇海区\",\n\t \"330212\": \"鄞州区\",\n\t \"330225\": \"象山县\",\n\t \"330226\": \"宁海县\",\n\t \"330281\": \"余姚市\",\n\t \"330282\": \"慈溪市\",\n\t \"330283\": \"奉化市\",\n\t \"330284\": \"其它区\",\n\t \"330300\": \"温州市\",\n\t \"330302\": \"鹿城区\",\n\t \"330303\": \"龙湾区\",\n\t \"330304\": \"瓯海区\",\n\t \"330322\": \"洞头县\",\n\t \"330324\": \"永嘉县\",\n\t \"330326\": \"平阳县\",\n\t \"330327\": \"苍南县\",\n\t \"330328\": \"文成县\",\n\t \"330329\": \"泰顺县\",\n\t \"330381\": \"瑞安市\",\n\t \"330382\": \"乐清市\",\n\t \"330383\": \"其它区\",\n\t \"330400\": \"嘉兴市\",\n\t \"330402\": \"南湖区\",\n\t \"330411\": \"秀洲区\",\n\t \"330421\": \"嘉善县\",\n\t \"330424\": \"海盐县\",\n\t \"330481\": \"海宁市\",\n\t \"330482\": \"平湖市\",\n\t \"330483\": \"桐乡市\",\n\t \"330484\": \"其它区\",\n\t \"330500\": \"湖州市\",\n\t \"330502\": \"吴兴区\",\n\t \"330503\": \"南浔区\",\n\t \"330521\": \"德清县\",\n\t \"330522\": \"长兴县\",\n\t \"330523\": \"安吉县\",\n\t \"330524\": \"其它区\",\n\t \"330600\": \"绍兴市\",\n\t \"330602\": \"越城区\",\n\t \"330621\": \"绍兴县\",\n\t \"330624\": \"新昌县\",\n\t \"330681\": \"诸暨市\",\n\t \"330682\": \"上虞市\",\n\t \"330683\": \"嵊州市\",\n\t \"330684\": \"其它区\",\n\t \"330700\": \"金华市\",\n\t \"330702\": \"婺城区\",\n\t \"330703\": \"金东区\",\n\t \"330723\": \"武义县\",\n\t \"330726\": \"浦江县\",\n\t \"330727\": \"磐安县\",\n\t \"330781\": \"兰溪市\",\n\t \"330782\": \"义乌市\",\n\t \"330783\": \"东阳市\",\n\t \"330784\": \"永康市\",\n\t \"330785\": \"其它区\",\n\t \"330800\": \"衢州市\",\n\t \"330802\": \"柯城区\",\n\t \"330803\": \"衢江区\",\n\t \"330822\": \"常山县\",\n\t \"330824\": \"开化县\",\n\t \"330825\": \"龙游县\",\n\t \"330881\": \"江山市\",\n\t \"330882\": \"其它区\",\n\t \"330900\": \"舟山市\",\n\t \"330902\": \"定海区\",\n\t \"330903\": \"普陀区\",\n\t \"330921\": \"岱山县\",\n\t \"330922\": \"嵊泗县\",\n\t \"330923\": \"其它区\",\n\t \"331000\": \"台州市\",\n\t \"331002\": \"椒江区\",\n\t \"331003\": \"黄岩区\",\n\t \"331004\": \"路桥区\",\n\t \"331021\": \"玉环县\",\n\t \"331022\": \"三门县\",\n\t \"331023\": \"天台县\",\n\t \"331024\": \"仙居县\",\n\t \"331081\": \"温岭市\",\n\t \"331082\": \"临海市\",\n\t \"331083\": \"其它区\",\n\t \"331100\": \"丽水市\",\n\t \"331102\": \"莲都区\",\n\t \"331121\": \"青田县\",\n\t \"331122\": \"缙云县\",\n\t \"331123\": \"遂昌县\",\n\t \"331124\": \"松阳县\",\n\t \"331125\": \"云和县\",\n\t \"331126\": \"庆元县\",\n\t \"331127\": \"景宁畲族自治县\",\n\t \"331181\": \"龙泉市\",\n\t \"331182\": \"其它区\",\n\t \"340000\": \"安徽省\",\n\t \"340100\": \"合肥市\",\n\t \"340102\": \"瑶海区\",\n\t \"340103\": \"庐阳区\",\n\t \"340104\": \"蜀山区\",\n\t \"340111\": \"包河区\",\n\t \"340121\": \"长丰县\",\n\t \"340122\": \"肥东县\",\n\t \"340123\": \"肥西县\",\n\t \"340192\": \"其它区\",\n\t \"340200\": \"芜湖市\",\n\t \"340202\": \"镜湖区\",\n\t \"340203\": \"弋江区\",\n\t \"340207\": \"鸠江区\",\n\t \"340208\": \"三山区\",\n\t \"340221\": \"芜湖县\",\n\t \"340222\": \"繁昌县\",\n\t \"340223\": \"南陵县\",\n\t \"340224\": \"其它区\",\n\t \"340300\": \"蚌埠市\",\n\t \"340302\": \"龙子湖区\",\n\t \"340303\": \"蚌山区\",\n\t \"340304\": \"禹会区\",\n\t \"340311\": \"淮上区\",\n\t \"340321\": \"怀远县\",\n\t \"340322\": \"五河县\",\n\t \"340323\": \"固镇县\",\n\t \"340324\": \"其它区\",\n\t \"340400\": \"淮南市\",\n\t \"340402\": \"大通区\",\n\t \"340403\": \"田家庵区\",\n\t \"340404\": \"谢家集区\",\n\t \"340405\": \"八公山区\",\n\t \"340406\": \"潘集区\",\n\t \"340421\": \"凤台县\",\n\t \"340422\": \"其它区\",\n\t \"340500\": \"马鞍山市\",\n\t \"340503\": \"花山区\",\n\t \"340504\": \"雨山区\",\n\t \"340506\": \"博望区\",\n\t \"340521\": \"当涂县\",\n\t \"340522\": \"其它区\",\n\t \"340600\": \"淮北市\",\n\t \"340602\": \"杜集区\",\n\t \"340603\": \"相山区\",\n\t \"340604\": \"烈山区\",\n\t \"340621\": \"濉溪县\",\n\t \"340622\": \"其它区\",\n\t \"340700\": \"铜陵市\",\n\t \"340702\": \"铜官山区\",\n\t \"340703\": \"狮子山区\",\n\t \"340711\": \"郊区\",\n\t \"340721\": \"铜陵县\",\n\t \"340722\": \"其它区\",\n\t \"340800\": \"安庆市\",\n\t \"340802\": \"迎江区\",\n\t \"340803\": \"大观区\",\n\t \"340811\": \"宜秀区\",\n\t \"340822\": \"怀宁县\",\n\t \"340823\": \"枞阳县\",\n\t \"340824\": \"潜山县\",\n\t \"340825\": \"太湖县\",\n\t \"340826\": \"宿松县\",\n\t \"340827\": \"望江县\",\n\t \"340828\": \"岳西县\",\n\t \"340881\": \"桐城市\",\n\t \"340882\": \"其它区\",\n\t \"341000\": \"黄山市\",\n\t \"341002\": \"屯溪区\",\n\t \"341003\": \"黄山区\",\n\t \"341004\": \"徽州区\",\n\t \"341021\": \"歙县\",\n\t \"341022\": \"休宁县\",\n\t \"341023\": \"黟县\",\n\t \"341024\": \"祁门县\",\n\t \"341025\": \"其它区\",\n\t \"341100\": \"滁州市\",\n\t \"341102\": \"琅琊区\",\n\t \"341103\": \"南谯区\",\n\t \"341122\": \"来安县\",\n\t \"341124\": \"全椒县\",\n\t \"341125\": \"定远县\",\n\t \"341126\": \"凤阳县\",\n\t \"341181\": \"天长市\",\n\t \"341182\": \"明光市\",\n\t \"341183\": \"其它区\",\n\t \"341200\": \"阜阳市\",\n\t \"341202\": \"颍州区\",\n\t \"341203\": \"颍东区\",\n\t \"341204\": \"颍泉区\",\n\t \"341221\": \"临泉县\",\n\t \"341222\": \"太和县\",\n\t \"341225\": \"阜南县\",\n\t \"341226\": \"颍上县\",\n\t \"341282\": \"界首市\",\n\t \"341283\": \"其它区\",\n\t \"341300\": \"宿州市\",\n\t \"341302\": \"埇桥区\",\n\t \"341321\": \"砀山县\",\n\t \"341322\": \"萧县\",\n\t \"341323\": \"灵璧县\",\n\t \"341324\": \"泗县\",\n\t \"341325\": \"其它区\",\n\t \"341400\": \"巢湖市\",\n\t \"341421\": \"庐江县\",\n\t \"341422\": \"无为县\",\n\t \"341423\": \"含山县\",\n\t \"341424\": \"和县\",\n\t \"341500\": \"六安市\",\n\t \"341502\": \"金安区\",\n\t \"341503\": \"裕安区\",\n\t \"341521\": \"寿县\",\n\t \"341522\": \"霍邱县\",\n\t \"341523\": \"舒城县\",\n\t \"341524\": \"金寨县\",\n\t \"341525\": \"霍山县\",\n\t \"341526\": \"其它区\",\n\t \"341600\": \"亳州市\",\n\t \"341602\": \"谯城区\",\n\t \"341621\": \"涡阳县\",\n\t \"341622\": \"蒙城县\",\n\t \"341623\": \"利辛县\",\n\t \"341624\": \"其它区\",\n\t \"341700\": \"池州市\",\n\t \"341702\": \"贵池区\",\n\t \"341721\": \"东至县\",\n\t \"341722\": \"石台县\",\n\t \"341723\": \"青阳县\",\n\t \"341724\": \"其它区\",\n\t \"341800\": \"宣城市\",\n\t \"341802\": \"宣州区\",\n\t \"341821\": \"郎溪县\",\n\t \"341822\": \"广德县\",\n\t \"341823\": \"泾县\",\n\t \"341824\": \"绩溪县\",\n\t \"341825\": \"旌德县\",\n\t \"341881\": \"宁国市\",\n\t \"341882\": \"其它区\",\n\t \"350000\": \"福建省\",\n\t \"350100\": \"福州市\",\n\t \"350102\": \"鼓楼区\",\n\t \"350103\": \"台江区\",\n\t \"350104\": \"仓山区\",\n\t \"350105\": \"马尾区\",\n\t \"350111\": \"晋安区\",\n\t \"350121\": \"闽侯县\",\n\t \"350122\": \"连江县\",\n\t \"350123\": \"罗源县\",\n\t \"350124\": \"闽清县\",\n\t \"350125\": \"永泰县\",\n\t \"350128\": \"平潭县\",\n\t \"350181\": \"福清市\",\n\t \"350182\": \"长乐市\",\n\t \"350183\": \"其它区\",\n\t \"350200\": \"厦门市\",\n\t \"350203\": \"思明区\",\n\t \"350205\": \"海沧区\",\n\t \"350206\": \"湖里区\",\n\t \"350211\": \"集美区\",\n\t \"350212\": \"同安区\",\n\t \"350213\": \"翔安区\",\n\t \"350214\": \"其它区\",\n\t \"350300\": \"莆田市\",\n\t \"350302\": \"城厢区\",\n\t \"350303\": \"涵江区\",\n\t \"350304\": \"荔城区\",\n\t \"350305\": \"秀屿区\",\n\t \"350322\": \"仙游县\",\n\t \"350323\": \"其它区\",\n\t \"350400\": \"三明市\",\n\t \"350402\": \"梅列区\",\n\t \"350403\": \"三元区\",\n\t \"350421\": \"明溪县\",\n\t \"350423\": \"清流县\",\n\t \"350424\": \"宁化县\",\n\t \"350425\": \"大田县\",\n\t \"350426\": \"尤溪县\",\n\t \"350427\": \"沙县\",\n\t \"350428\": \"将乐县\",\n\t \"350429\": \"泰宁县\",\n\t \"350430\": \"建宁县\",\n\t \"350481\": \"永安市\",\n\t \"350482\": \"其它区\",\n\t \"350500\": \"泉州市\",\n\t \"350502\": \"鲤城区\",\n\t \"350503\": \"丰泽区\",\n\t \"350504\": \"洛江区\",\n\t \"350505\": \"泉港区\",\n\t \"350521\": \"惠安县\",\n\t \"350524\": \"安溪县\",\n\t \"350525\": \"永春县\",\n\t \"350526\": \"德化县\",\n\t \"350527\": \"金门县\",\n\t \"350581\": \"石狮市\",\n\t \"350582\": \"晋江市\",\n\t \"350583\": \"南安市\",\n\t \"350584\": \"其它区\",\n\t \"350600\": \"漳州市\",\n\t \"350602\": \"芗城区\",\n\t \"350603\": \"龙文区\",\n\t \"350622\": \"云霄县\",\n\t \"350623\": \"漳浦县\",\n\t \"350624\": \"诏安县\",\n\t \"350625\": \"长泰县\",\n\t \"350626\": \"东山县\",\n\t \"350627\": \"南靖县\",\n\t \"350628\": \"平和县\",\n\t \"350629\": \"华安县\",\n\t \"350681\": \"龙海市\",\n\t \"350682\": \"其它区\",\n\t \"350700\": \"南平市\",\n\t \"350702\": \"延平区\",\n\t \"350721\": \"顺昌县\",\n\t \"350722\": \"浦城县\",\n\t \"350723\": \"光泽县\",\n\t \"350724\": \"松溪县\",\n\t \"350725\": \"政和县\",\n\t \"350781\": \"邵武市\",\n\t \"350782\": \"武夷山市\",\n\t \"350783\": \"建瓯市\",\n\t \"350784\": \"建阳市\",\n\t \"350785\": \"其它区\",\n\t \"350800\": \"龙岩市\",\n\t \"350802\": \"新罗区\",\n\t \"350821\": \"长汀县\",\n\t \"350822\": \"永定县\",\n\t \"350823\": \"上杭县\",\n\t \"350824\": \"武平县\",\n\t \"350825\": \"连城县\",\n\t \"350881\": \"漳平市\",\n\t \"350882\": \"其它区\",\n\t \"350900\": \"宁德市\",\n\t \"350902\": \"蕉城区\",\n\t \"350921\": \"霞浦县\",\n\t \"350922\": \"古田县\",\n\t \"350923\": \"屏南县\",\n\t \"350924\": \"寿宁县\",\n\t \"350925\": \"周宁县\",\n\t \"350926\": \"柘荣县\",\n\t \"350981\": \"福安市\",\n\t \"350982\": \"福鼎市\",\n\t \"350983\": \"其它区\",\n\t \"360000\": \"江西省\",\n\t \"360100\": \"南昌市\",\n\t \"360102\": \"东湖区\",\n\t \"360103\": \"西湖区\",\n\t \"360104\": \"青云谱区\",\n\t \"360105\": \"湾里区\",\n\t \"360111\": \"青山湖区\",\n\t \"360121\": \"南昌县\",\n\t \"360122\": \"新建县\",\n\t \"360123\": \"安义县\",\n\t \"360124\": \"进贤县\",\n\t \"360128\": \"其它区\",\n\t \"360200\": \"景德镇市\",\n\t \"360202\": \"昌江区\",\n\t \"360203\": \"珠山区\",\n\t \"360222\": \"浮梁县\",\n\t \"360281\": \"乐平市\",\n\t \"360282\": \"其它区\",\n\t \"360300\": \"萍乡市\",\n\t \"360302\": \"安源区\",\n\t \"360313\": \"湘东区\",\n\t \"360321\": \"莲花县\",\n\t \"360322\": \"上栗县\",\n\t \"360323\": \"芦溪县\",\n\t \"360324\": \"其它区\",\n\t \"360400\": \"九江市\",\n\t \"360402\": \"庐山区\",\n\t \"360403\": \"浔阳区\",\n\t \"360421\": \"九江县\",\n\t \"360423\": \"武宁县\",\n\t \"360424\": \"修水县\",\n\t \"360425\": \"永修县\",\n\t \"360426\": \"德安县\",\n\t \"360427\": \"星子县\",\n\t \"360428\": \"都昌县\",\n\t \"360429\": \"湖口县\",\n\t \"360430\": \"彭泽县\",\n\t \"360481\": \"瑞昌市\",\n\t \"360482\": \"其它区\",\n\t \"360483\": \"共青城市\",\n\t \"360500\": \"新余市\",\n\t \"360502\": \"渝水区\",\n\t \"360521\": \"分宜县\",\n\t \"360522\": \"其它区\",\n\t \"360600\": \"鹰潭市\",\n\t \"360602\": \"月湖区\",\n\t \"360622\": \"余江县\",\n\t \"360681\": \"贵溪市\",\n\t \"360682\": \"其它区\",\n\t \"360700\": \"赣州市\",\n\t \"360702\": \"章贡区\",\n\t \"360721\": \"赣县\",\n\t \"360722\": \"信丰县\",\n\t \"360723\": \"大余县\",\n\t \"360724\": \"上犹县\",\n\t \"360725\": \"崇义县\",\n\t \"360726\": \"安远县\",\n\t \"360727\": \"龙南县\",\n\t \"360728\": \"定南县\",\n\t \"360729\": \"全南县\",\n\t \"360730\": \"宁都县\",\n\t \"360731\": \"于都县\",\n\t \"360732\": \"兴国县\",\n\t \"360733\": \"会昌县\",\n\t \"360734\": \"寻乌县\",\n\t \"360735\": \"石城县\",\n\t \"360781\": \"瑞金市\",\n\t \"360782\": \"南康市\",\n\t \"360783\": \"其它区\",\n\t \"360800\": \"吉安市\",\n\t \"360802\": \"吉州区\",\n\t \"360803\": \"青原区\",\n\t \"360821\": \"吉安县\",\n\t \"360822\": \"吉水县\",\n\t \"360823\": \"峡江县\",\n\t \"360824\": \"新干县\",\n\t \"360825\": \"永丰县\",\n\t \"360826\": \"泰和县\",\n\t \"360827\": \"遂川县\",\n\t \"360828\": \"万安县\",\n\t \"360829\": \"安福县\",\n\t \"360830\": \"永新县\",\n\t \"360881\": \"井冈山市\",\n\t \"360882\": \"其它区\",\n\t \"360900\": \"宜春市\",\n\t \"360902\": \"袁州区\",\n\t \"360921\": \"奉新县\",\n\t \"360922\": \"万载县\",\n\t \"360923\": \"上高县\",\n\t \"360924\": \"宜丰县\",\n\t \"360925\": \"靖安县\",\n\t \"360926\": \"铜鼓县\",\n\t \"360981\": \"丰城市\",\n\t \"360982\": \"樟树市\",\n\t \"360983\": \"高安市\",\n\t \"360984\": \"其它区\",\n\t \"361000\": \"抚州市\",\n\t \"361002\": \"临川区\",\n\t \"361021\": \"南城县\",\n\t \"361022\": \"黎川县\",\n\t \"361023\": \"南丰县\",\n\t \"361024\": \"崇仁县\",\n\t \"361025\": \"乐安县\",\n\t \"361026\": \"宜黄县\",\n\t \"361027\": \"金溪县\",\n\t \"361028\": \"资溪县\",\n\t \"361029\": \"东乡县\",\n\t \"361030\": \"广昌县\",\n\t \"361031\": \"其它区\",\n\t \"361100\": \"上饶市\",\n\t \"361102\": \"信州区\",\n\t \"361121\": \"上饶县\",\n\t \"361122\": \"广丰县\",\n\t \"361123\": \"玉山县\",\n\t \"361124\": \"铅山县\",\n\t \"361125\": \"横峰县\",\n\t \"361126\": \"弋阳县\",\n\t \"361127\": \"余干县\",\n\t \"361128\": \"鄱阳县\",\n\t \"361129\": \"万年县\",\n\t \"361130\": \"婺源县\",\n\t \"361181\": \"德兴市\",\n\t \"361182\": \"其它区\",\n\t \"370000\": \"山东省\",\n\t \"370100\": \"济南市\",\n\t \"370102\": \"历下区\",\n\t \"370103\": \"市中区\",\n\t \"370104\": \"槐荫区\",\n\t \"370105\": \"天桥区\",\n\t \"370112\": \"历城区\",\n\t \"370113\": \"长清区\",\n\t \"370124\": \"平阴县\",\n\t \"370125\": \"济阳县\",\n\t \"370126\": \"商河县\",\n\t \"370181\": \"章丘市\",\n\t \"370182\": \"其它区\",\n\t \"370200\": \"青岛市\",\n\t \"370202\": \"市南区\",\n\t \"370203\": \"市北区\",\n\t \"370211\": \"黄岛区\",\n\t \"370212\": \"崂山区\",\n\t \"370213\": \"李沧区\",\n\t \"370214\": \"城阳区\",\n\t \"370281\": \"胶州市\",\n\t \"370282\": \"即墨市\",\n\t \"370283\": \"平度市\",\n\t \"370285\": \"莱西市\",\n\t \"370286\": \"其它区\",\n\t \"370300\": \"淄博市\",\n\t \"370302\": \"淄川区\",\n\t \"370303\": \"张店区\",\n\t \"370304\": \"博山区\",\n\t \"370305\": \"临淄区\",\n\t \"370306\": \"周村区\",\n\t \"370321\": \"桓台县\",\n\t \"370322\": \"高青县\",\n\t \"370323\": \"沂源县\",\n\t \"370324\": \"其它区\",\n\t \"370400\": \"枣庄市\",\n\t \"370402\": \"市中区\",\n\t \"370403\": \"薛城区\",\n\t \"370404\": \"峄城区\",\n\t \"370405\": \"台儿庄区\",\n\t \"370406\": \"山亭区\",\n\t \"370481\": \"滕州市\",\n\t \"370482\": \"其它区\",\n\t \"370500\": \"东营市\",\n\t \"370502\": \"东营区\",\n\t \"370503\": \"河口区\",\n\t \"370521\": \"垦利县\",\n\t \"370522\": \"利津县\",\n\t \"370523\": \"广饶县\",\n\t \"370591\": \"其它区\",\n\t \"370600\": \"烟台市\",\n\t \"370602\": \"芝罘区\",\n\t \"370611\": \"福山区\",\n\t \"370612\": \"牟平区\",\n\t \"370613\": \"莱山区\",\n\t \"370634\": \"长岛县\",\n\t \"370681\": \"龙口市\",\n\t \"370682\": \"莱阳市\",\n\t \"370683\": \"莱州市\",\n\t \"370684\": \"蓬莱市\",\n\t \"370685\": \"招远市\",\n\t \"370686\": \"栖霞市\",\n\t \"370687\": \"海阳市\",\n\t \"370688\": \"其它区\",\n\t \"370700\": \"潍坊市\",\n\t \"370702\": \"潍城区\",\n\t \"370703\": \"寒亭区\",\n\t \"370704\": \"坊子区\",\n\t \"370705\": \"奎文区\",\n\t \"370724\": \"临朐县\",\n\t \"370725\": \"昌乐县\",\n\t \"370781\": \"青州市\",\n\t \"370782\": \"诸城市\",\n\t \"370783\": \"寿光市\",\n\t \"370784\": \"安丘市\",\n\t \"370785\": \"高密市\",\n\t \"370786\": \"昌邑市\",\n\t \"370787\": \"其它区\",\n\t \"370800\": \"济宁市\",\n\t \"370802\": \"市中区\",\n\t \"370811\": \"任城区\",\n\t \"370826\": \"微山县\",\n\t \"370827\": \"鱼台县\",\n\t \"370828\": \"金乡县\",\n\t \"370829\": \"嘉祥县\",\n\t \"370830\": \"汶上县\",\n\t \"370831\": \"泗水县\",\n\t \"370832\": \"梁山县\",\n\t \"370881\": \"曲阜市\",\n\t \"370882\": \"兖州市\",\n\t \"370883\": \"邹城市\",\n\t \"370884\": \"其它区\",\n\t \"370900\": \"泰安市\",\n\t \"370902\": \"泰山区\",\n\t \"370903\": \"岱岳区\",\n\t \"370921\": \"宁阳县\",\n\t \"370923\": \"东平县\",\n\t \"370982\": \"新泰市\",\n\t \"370983\": \"肥城市\",\n\t \"370984\": \"其它区\",\n\t \"371000\": \"威海市\",\n\t \"371002\": \"环翠区\",\n\t \"371081\": \"文登市\",\n\t \"371082\": \"荣成市\",\n\t \"371083\": \"乳山市\",\n\t \"371084\": \"其它区\",\n\t \"371100\": \"日照市\",\n\t \"371102\": \"东港区\",\n\t \"371103\": \"岚山区\",\n\t \"371121\": \"五莲县\",\n\t \"371122\": \"莒县\",\n\t \"371123\": \"其它区\",\n\t \"371200\": \"莱芜市\",\n\t \"371202\": \"莱城区\",\n\t \"371203\": \"钢城区\",\n\t \"371204\": \"其它区\",\n\t \"371300\": \"临沂市\",\n\t \"371302\": \"兰山区\",\n\t \"371311\": \"罗庄区\",\n\t \"371312\": \"河东区\",\n\t \"371321\": \"沂南县\",\n\t \"371322\": \"郯城县\",\n\t \"371323\": \"沂水县\",\n\t \"371324\": \"苍山县\",\n\t \"371325\": \"费县\",\n\t \"371326\": \"平邑县\",\n\t \"371327\": \"莒南县\",\n\t \"371328\": \"蒙阴县\",\n\t \"371329\": \"临沭县\",\n\t \"371330\": \"其它区\",\n\t \"371400\": \"德州市\",\n\t \"371402\": \"德城区\",\n\t \"371421\": \"陵县\",\n\t \"371422\": \"宁津县\",\n\t \"371423\": \"庆云县\",\n\t \"371424\": \"临邑县\",\n\t \"371425\": \"齐河县\",\n\t \"371426\": \"平原县\",\n\t \"371427\": \"夏津县\",\n\t \"371428\": \"武城县\",\n\t \"371481\": \"乐陵市\",\n\t \"371482\": \"禹城市\",\n\t \"371483\": \"其它区\",\n\t \"371500\": \"聊城市\",\n\t \"371502\": \"东昌府区\",\n\t \"371521\": \"阳谷县\",\n\t \"371522\": \"莘县\",\n\t \"371523\": \"茌平县\",\n\t \"371524\": \"东阿县\",\n\t \"371525\": \"冠县\",\n\t \"371526\": \"高唐县\",\n\t \"371581\": \"临清市\",\n\t \"371582\": \"其它区\",\n\t \"371600\": \"滨州市\",\n\t \"371602\": \"滨城区\",\n\t \"371621\": \"惠民县\",\n\t \"371622\": \"阳信县\",\n\t \"371623\": \"无棣县\",\n\t \"371624\": \"沾化县\",\n\t \"371625\": \"博兴县\",\n\t \"371626\": \"邹平县\",\n\t \"371627\": \"其它区\",\n\t \"371700\": \"菏泽市\",\n\t \"371702\": \"牡丹区\",\n\t \"371721\": \"曹县\",\n\t \"371722\": \"单县\",\n\t \"371723\": \"成武县\",\n\t \"371724\": \"巨野县\",\n\t \"371725\": \"郓城县\",\n\t \"371726\": \"鄄城县\",\n\t \"371727\": \"定陶县\",\n\t \"371728\": \"东明县\",\n\t \"371729\": \"其它区\",\n\t \"410000\": \"河南省\",\n\t \"410100\": \"郑州市\",\n\t \"410102\": \"中原区\",\n\t \"410103\": \"二七区\",\n\t \"410104\": \"管城回族区\",\n\t \"410105\": \"金水区\",\n\t \"410106\": \"上街区\",\n\t \"410108\": \"惠济区\",\n\t \"410122\": \"中牟县\",\n\t \"410181\": \"巩义市\",\n\t \"410182\": \"荥阳市\",\n\t \"410183\": \"新密市\",\n\t \"410184\": \"新郑市\",\n\t \"410185\": \"登封市\",\n\t \"410188\": \"其它区\",\n\t \"410200\": \"开封市\",\n\t \"410202\": \"龙亭区\",\n\t \"410203\": \"顺河回族区\",\n\t \"410204\": \"鼓楼区\",\n\t \"410205\": \"禹王台区\",\n\t \"410211\": \"金明区\",\n\t \"410221\": \"杞县\",\n\t \"410222\": \"通许县\",\n\t \"410223\": \"尉氏县\",\n\t \"410224\": \"开封县\",\n\t \"410225\": \"兰考县\",\n\t \"410226\": \"其它区\",\n\t \"410300\": \"洛阳市\",\n\t \"410302\": \"老城区\",\n\t \"410303\": \"西工区\",\n\t \"410304\": \"瀍河回族区\",\n\t \"410305\": \"涧西区\",\n\t \"410306\": \"吉利区\",\n\t \"410307\": \"洛龙区\",\n\t \"410322\": \"孟津县\",\n\t \"410323\": \"新安县\",\n\t \"410324\": \"栾川县\",\n\t \"410325\": \"嵩县\",\n\t \"410326\": \"汝阳县\",\n\t \"410327\": \"宜阳县\",\n\t \"410328\": \"洛宁县\",\n\t \"410329\": \"伊川县\",\n\t \"410381\": \"偃师市\",\n\t \"410400\": \"平顶山市\",\n\t \"410402\": \"新华区\",\n\t \"410403\": \"卫东区\",\n\t \"410404\": \"石龙区\",\n\t \"410411\": \"湛河区\",\n\t \"410421\": \"宝丰县\",\n\t \"410422\": \"叶县\",\n\t \"410423\": \"鲁山县\",\n\t \"410425\": \"郏县\",\n\t \"410481\": \"舞钢市\",\n\t \"410482\": \"汝州市\",\n\t \"410483\": \"其它区\",\n\t \"410500\": \"安阳市\",\n\t \"410502\": \"文峰区\",\n\t \"410503\": \"北关区\",\n\t \"410505\": \"殷都区\",\n\t \"410506\": \"龙安区\",\n\t \"410522\": \"安阳县\",\n\t \"410523\": \"汤阴县\",\n\t \"410526\": \"滑县\",\n\t \"410527\": \"内黄县\",\n\t \"410581\": \"林州市\",\n\t \"410582\": \"其它区\",\n\t \"410600\": \"鹤壁市\",\n\t \"410602\": \"鹤山区\",\n\t \"410603\": \"山城区\",\n\t \"410611\": \"淇滨区\",\n\t \"410621\": \"浚县\",\n\t \"410622\": \"淇县\",\n\t \"410623\": \"其它区\",\n\t \"410700\": \"新乡市\",\n\t \"410702\": \"红旗区\",\n\t \"410703\": \"卫滨区\",\n\t \"410704\": \"凤泉区\",\n\t \"410711\": \"牧野区\",\n\t \"410721\": \"新乡县\",\n\t \"410724\": \"获嘉县\",\n\t \"410725\": \"原阳县\",\n\t \"410726\": \"延津县\",\n\t \"410727\": \"封丘县\",\n\t \"410728\": \"长垣县\",\n\t \"410781\": \"卫辉市\",\n\t \"410782\": \"辉县市\",\n\t \"410783\": \"其它区\",\n\t \"410800\": \"焦作市\",\n\t \"410802\": \"解放区\",\n\t \"410803\": \"中站区\",\n\t \"410804\": \"马村区\",\n\t \"410811\": \"山阳区\",\n\t \"410821\": \"修武县\",\n\t \"410822\": \"博爱县\",\n\t \"410823\": \"武陟县\",\n\t \"410825\": \"温县\",\n\t \"410881\": \"济源市\",\n\t \"410882\": \"沁阳市\",\n\t \"410883\": \"孟州市\",\n\t \"410884\": \"其它区\",\n\t \"410900\": \"濮阳市\",\n\t \"410902\": \"华龙区\",\n\t \"410922\": \"清丰县\",\n\t \"410923\": \"南乐县\",\n\t \"410926\": \"范县\",\n\t \"410927\": \"台前县\",\n\t \"410928\": \"濮阳县\",\n\t \"410929\": \"其它区\",\n\t \"411000\": \"许昌市\",\n\t \"411002\": \"魏都区\",\n\t \"411023\": \"许昌县\",\n\t \"411024\": \"鄢陵县\",\n\t \"411025\": \"襄城县\",\n\t \"411081\": \"禹州市\",\n\t \"411082\": \"长葛市\",\n\t \"411083\": \"其它区\",\n\t \"411100\": \"漯河市\",\n\t \"411102\": \"源汇区\",\n\t \"411103\": \"郾城区\",\n\t \"411104\": \"召陵区\",\n\t \"411121\": \"舞阳县\",\n\t \"411122\": \"临颍县\",\n\t \"411123\": \"其它区\",\n\t \"411200\": \"三门峡市\",\n\t \"411202\": \"湖滨区\",\n\t \"411221\": \"渑池县\",\n\t \"411222\": \"陕县\",\n\t \"411224\": \"卢氏县\",\n\t \"411281\": \"义马市\",\n\t \"411282\": \"灵宝市\",\n\t \"411283\": \"其它区\",\n\t \"411300\": \"南阳市\",\n\t \"411302\": \"宛城区\",\n\t \"411303\": \"卧龙区\",\n\t \"411321\": \"南召县\",\n\t \"411322\": \"方城县\",\n\t \"411323\": \"西峡县\",\n\t \"411324\": \"镇平县\",\n\t \"411325\": \"内乡县\",\n\t \"411326\": \"淅川县\",\n\t \"411327\": \"社旗县\",\n\t \"411328\": \"唐河县\",\n\t \"411329\": \"新野县\",\n\t \"411330\": \"桐柏县\",\n\t \"411381\": \"邓州市\",\n\t \"411382\": \"其它区\",\n\t \"411400\": \"商丘市\",\n\t \"411402\": \"梁园区\",\n\t \"411403\": \"睢阳区\",\n\t \"411421\": \"民权县\",\n\t \"411422\": \"睢县\",\n\t \"411423\": \"宁陵县\",\n\t \"411424\": \"柘城县\",\n\t \"411425\": \"虞城县\",\n\t \"411426\": \"夏邑县\",\n\t \"411481\": \"永城市\",\n\t \"411482\": \"其它区\",\n\t \"411500\": \"信阳市\",\n\t \"411502\": \"浉河区\",\n\t \"411503\": \"平桥区\",\n\t \"411521\": \"罗山县\",\n\t \"411522\": \"光山县\",\n\t \"411523\": \"新县\",\n\t \"411524\": \"商城县\",\n\t \"411525\": \"固始县\",\n\t \"411526\": \"潢川县\",\n\t \"411527\": \"淮滨县\",\n\t \"411528\": \"息县\",\n\t \"411529\": \"其它区\",\n\t \"411600\": \"周口市\",\n\t \"411602\": \"川汇区\",\n\t \"411621\": \"扶沟县\",\n\t \"411622\": \"西华县\",\n\t \"411623\": \"商水县\",\n\t \"411624\": \"沈丘县\",\n\t \"411625\": \"郸城县\",\n\t \"411626\": \"淮阳县\",\n\t \"411627\": \"太康县\",\n\t \"411628\": \"鹿邑县\",\n\t \"411681\": \"项城市\",\n\t \"411682\": \"其它区\",\n\t \"411700\": \"驻马店市\",\n\t \"411702\": \"驿城区\",\n\t \"411721\": \"西平县\",\n\t \"411722\": \"上蔡县\",\n\t \"411723\": \"平舆县\",\n\t \"411724\": \"正阳县\",\n\t \"411725\": \"确山县\",\n\t \"411726\": \"泌阳县\",\n\t \"411727\": \"汝南县\",\n\t \"411728\": \"遂平县\",\n\t \"411729\": \"新蔡县\",\n\t \"411730\": \"其它区\",\n\t \"420000\": \"湖北省\",\n\t \"420100\": \"武汉市\",\n\t \"420102\": \"江岸区\",\n\t \"420103\": \"江汉区\",\n\t \"420104\": \"硚口区\",\n\t \"420105\": \"汉阳区\",\n\t \"420106\": \"武昌区\",\n\t \"420107\": \"青山区\",\n\t \"420111\": \"洪山区\",\n\t \"420112\": \"东西湖区\",\n\t \"420113\": \"汉南区\",\n\t \"420114\": \"蔡甸区\",\n\t \"420115\": \"江夏区\",\n\t \"420116\": \"黄陂区\",\n\t \"420117\": \"新洲区\",\n\t \"420118\": \"其它区\",\n\t \"420200\": \"黄石市\",\n\t \"420202\": \"黄石港区\",\n\t \"420203\": \"西塞山区\",\n\t \"420204\": \"下陆区\",\n\t \"420205\": \"铁山区\",\n\t \"420222\": \"阳新县\",\n\t \"420281\": \"大冶市\",\n\t \"420282\": \"其它区\",\n\t \"420300\": \"十堰市\",\n\t \"420302\": \"茅箭区\",\n\t \"420303\": \"张湾区\",\n\t \"420321\": \"郧县\",\n\t \"420322\": \"郧西县\",\n\t \"420323\": \"竹山县\",\n\t \"420324\": \"竹溪县\",\n\t \"420325\": \"房县\",\n\t \"420381\": \"丹江口市\",\n\t \"420383\": \"其它区\",\n\t \"420500\": \"宜昌市\",\n\t \"420502\": \"西陵区\",\n\t \"420503\": \"伍家岗区\",\n\t \"420504\": \"点军区\",\n\t \"420505\": \"猇亭区\",\n\t \"420506\": \"夷陵区\",\n\t \"420525\": \"远安县\",\n\t \"420526\": \"兴山县\",\n\t \"420527\": \"秭归县\",\n\t \"420528\": \"长阳土家族自治县\",\n\t \"420529\": \"五峰土家族自治县\",\n\t \"420581\": \"宜都市\",\n\t \"420582\": \"当阳市\",\n\t \"420583\": \"枝江市\",\n\t \"420584\": \"其它区\",\n\t \"420600\": \"襄阳市\",\n\t \"420602\": \"襄城区\",\n\t \"420606\": \"樊城区\",\n\t \"420607\": \"襄州区\",\n\t \"420624\": \"南漳县\",\n\t \"420625\": \"谷城县\",\n\t \"420626\": \"保康县\",\n\t \"420682\": \"老河口市\",\n\t \"420683\": \"枣阳市\",\n\t \"420684\": \"宜城市\",\n\t \"420685\": \"其它区\",\n\t \"420700\": \"鄂州市\",\n\t \"420702\": \"梁子湖区\",\n\t \"420703\": \"华容区\",\n\t \"420704\": \"鄂城区\",\n\t \"420705\": \"其它区\",\n\t \"420800\": \"荆门市\",\n\t \"420802\": \"东宝区\",\n\t \"420804\": \"掇刀区\",\n\t \"420821\": \"京山县\",\n\t \"420822\": \"沙洋县\",\n\t \"420881\": \"钟祥市\",\n\t \"420882\": \"其它区\",\n\t \"420900\": \"孝感市\",\n\t \"420902\": \"孝南区\",\n\t \"420921\": \"孝昌县\",\n\t \"420922\": \"大悟县\",\n\t \"420923\": \"云梦县\",\n\t \"420981\": \"应城市\",\n\t \"420982\": \"安陆市\",\n\t \"420984\": \"汉川市\",\n\t \"420985\": \"其它区\",\n\t \"421000\": \"荆州市\",\n\t \"421002\": \"沙市区\",\n\t \"421003\": \"荆州区\",\n\t \"421022\": \"公安县\",\n\t \"421023\": \"监利县\",\n\t \"421024\": \"江陵县\",\n\t \"421081\": \"石首市\",\n\t \"421083\": \"洪湖市\",\n\t \"421087\": \"松滋市\",\n\t \"421088\": \"其它区\",\n\t \"421100\": \"黄冈市\",\n\t \"421102\": \"黄州区\",\n\t \"421121\": \"团风县\",\n\t \"421122\": \"红安县\",\n\t \"421123\": \"罗田县\",\n\t \"421124\": \"英山县\",\n\t \"421125\": \"浠水县\",\n\t \"421126\": \"蕲春县\",\n\t \"421127\": \"黄梅县\",\n\t \"421181\": \"麻城市\",\n\t \"421182\": \"武穴市\",\n\t \"421183\": \"其它区\",\n\t \"421200\": \"咸宁市\",\n\t \"421202\": \"咸安区\",\n\t \"421221\": \"嘉鱼县\",\n\t \"421222\": \"通城县\",\n\t \"421223\": \"崇阳县\",\n\t \"421224\": \"通山县\",\n\t \"421281\": \"赤壁市\",\n\t \"421283\": \"其它区\",\n\t \"421300\": \"随州市\",\n\t \"421302\": \"曾都区\",\n\t \"421321\": \"随县\",\n\t \"421381\": \"广水市\",\n\t \"421382\": \"其它区\",\n\t \"422800\": \"恩施土家族苗族自治州\",\n\t \"422801\": \"恩施市\",\n\t \"422802\": \"利川市\",\n\t \"422822\": \"建始县\",\n\t \"422823\": \"巴东县\",\n\t \"422825\": \"宣恩县\",\n\t \"422826\": \"咸丰县\",\n\t \"422827\": \"来凤县\",\n\t \"422828\": \"鹤峰县\",\n\t \"422829\": \"其它区\",\n\t \"429004\": \"仙桃市\",\n\t \"429005\": \"潜江市\",\n\t \"429006\": \"天门市\",\n\t \"429021\": \"神农架林区\",\n\t \"430000\": \"湖南省\",\n\t \"430100\": \"长沙市\",\n\t \"430102\": \"芙蓉区\",\n\t \"430103\": \"天心区\",\n\t \"430104\": \"岳麓区\",\n\t \"430105\": \"开福区\",\n\t \"430111\": \"雨花区\",\n\t \"430121\": \"长沙县\",\n\t \"430122\": \"望城区\",\n\t \"430124\": \"宁乡县\",\n\t \"430181\": \"浏阳市\",\n\t \"430182\": \"其它区\",\n\t \"430200\": \"株洲市\",\n\t \"430202\": \"荷塘区\",\n\t \"430203\": \"芦淞区\",\n\t \"430204\": \"石峰区\",\n\t \"430211\": \"天元区\",\n\t \"430221\": \"株洲县\",\n\t \"430223\": \"攸县\",\n\t \"430224\": \"茶陵县\",\n\t \"430225\": \"炎陵县\",\n\t \"430281\": \"醴陵市\",\n\t \"430282\": \"其它区\",\n\t \"430300\": \"湘潭市\",\n\t \"430302\": \"雨湖区\",\n\t \"430304\": \"岳塘区\",\n\t \"430321\": \"湘潭县\",\n\t \"430381\": \"湘乡市\",\n\t \"430382\": \"韶山市\",\n\t \"430383\": \"其它区\",\n\t \"430400\": \"衡阳市\",\n\t \"430405\": \"珠晖区\",\n\t \"430406\": \"雁峰区\",\n\t \"430407\": \"石鼓区\",\n\t \"430408\": \"蒸湘区\",\n\t \"430412\": \"南岳区\",\n\t \"430421\": \"衡阳县\",\n\t \"430422\": \"衡南县\",\n\t \"430423\": \"衡山县\",\n\t \"430424\": \"衡东县\",\n\t \"430426\": \"祁东县\",\n\t \"430481\": \"耒阳市\",\n\t \"430482\": \"常宁市\",\n\t \"430483\": \"其它区\",\n\t \"430500\": \"邵阳市\",\n\t \"430502\": \"双清区\",\n\t \"430503\": \"大祥区\",\n\t \"430511\": \"北塔区\",\n\t \"430521\": \"邵东县\",\n\t \"430522\": \"新邵县\",\n\t \"430523\": \"邵阳县\",\n\t \"430524\": \"隆回县\",\n\t \"430525\": \"洞口县\",\n\t \"430527\": \"绥宁县\",\n\t \"430528\": \"新宁县\",\n\t \"430529\": \"城步苗族自治县\",\n\t \"430581\": \"武冈市\",\n\t \"430582\": \"其它区\",\n\t \"430600\": \"岳阳市\",\n\t \"430602\": \"岳阳楼区\",\n\t \"430603\": \"云溪区\",\n\t \"430611\": \"君山区\",\n\t \"430621\": \"岳阳县\",\n\t \"430623\": \"华容县\",\n\t \"430624\": \"湘阴县\",\n\t \"430626\": \"平江县\",\n\t \"430681\": \"汨罗市\",\n\t \"430682\": \"临湘市\",\n\t \"430683\": \"其它区\",\n\t \"430700\": \"常德市\",\n\t \"430702\": \"武陵区\",\n\t \"430703\": \"鼎城区\",\n\t \"430721\": \"安乡县\",\n\t \"430722\": \"汉寿县\",\n\t \"430723\": \"澧县\",\n\t \"430724\": \"临澧县\",\n\t \"430725\": \"桃源县\",\n\t \"430726\": \"石门县\",\n\t \"430781\": \"津市市\",\n\t \"430782\": \"其它区\",\n\t \"430800\": \"张家界市\",\n\t \"430802\": \"永定区\",\n\t \"430811\": \"武陵源区\",\n\t \"430821\": \"慈利县\",\n\t \"430822\": \"桑植县\",\n\t \"430823\": \"其它区\",\n\t \"430900\": \"益阳市\",\n\t \"430902\": \"资阳区\",\n\t \"430903\": \"赫山区\",\n\t \"430921\": \"南县\",\n\t \"430922\": \"桃江县\",\n\t \"430923\": \"安化县\",\n\t \"430981\": \"沅江市\",\n\t \"430982\": \"其它区\",\n\t \"431000\": \"郴州市\",\n\t \"431002\": \"北湖区\",\n\t \"431003\": \"苏仙区\",\n\t \"431021\": \"桂阳县\",\n\t \"431022\": \"宜章县\",\n\t \"431023\": \"永兴县\",\n\t \"431024\": \"嘉禾县\",\n\t \"431025\": \"临武县\",\n\t \"431026\": \"汝城县\",\n\t \"431027\": \"桂东县\",\n\t \"431028\": \"安仁县\",\n\t \"431081\": \"资兴市\",\n\t \"431082\": \"其它区\",\n\t \"431100\": \"永州市\",\n\t \"431102\": \"零陵区\",\n\t \"431103\": \"冷水滩区\",\n\t \"431121\": \"祁阳县\",\n\t \"431122\": \"东安县\",\n\t \"431123\": \"双牌县\",\n\t \"431124\": \"道县\",\n\t \"431125\": \"江永县\",\n\t \"431126\": \"宁远县\",\n\t \"431127\": \"蓝山县\",\n\t \"431128\": \"新田县\",\n\t \"431129\": \"江华瑶族自治县\",\n\t \"431130\": \"其它区\",\n\t \"431200\": \"怀化市\",\n\t \"431202\": \"鹤城区\",\n\t \"431221\": \"中方县\",\n\t \"431222\": \"沅陵县\",\n\t \"431223\": \"辰溪县\",\n\t \"431224\": \"溆浦县\",\n\t \"431225\": \"会同县\",\n\t \"431226\": \"麻阳苗族自治县\",\n\t \"431227\": \"新晃侗族自治县\",\n\t \"431228\": \"芷江侗族自治县\",\n\t \"431229\": \"靖州苗族侗族自治县\",\n\t \"431230\": \"通道侗族自治县\",\n\t \"431281\": \"洪江市\",\n\t \"431282\": \"其它区\",\n\t \"431300\": \"娄底市\",\n\t \"431302\": \"娄星区\",\n\t \"431321\": \"双峰县\",\n\t \"431322\": \"新化县\",\n\t \"431381\": \"冷水江市\",\n\t \"431382\": \"涟源市\",\n\t \"431383\": \"其它区\",\n\t \"433100\": \"湘西土家族苗族自治州\",\n\t \"433101\": \"吉首市\",\n\t \"433122\": \"泸溪县\",\n\t \"433123\": \"凤凰县\",\n\t \"433124\": \"花垣县\",\n\t \"433125\": \"保靖县\",\n\t \"433126\": \"古丈县\",\n\t \"433127\": \"永顺县\",\n\t \"433130\": \"龙山县\",\n\t \"433131\": \"其它区\",\n\t \"440000\": \"广东省\",\n\t \"440100\": \"广州市\",\n\t \"440103\": \"荔湾区\",\n\t \"440104\": \"越秀区\",\n\t \"440105\": \"海珠区\",\n\t \"440106\": \"天河区\",\n\t \"440111\": \"白云区\",\n\t \"440112\": \"黄埔区\",\n\t \"440113\": \"番禺区\",\n\t \"440114\": \"花都区\",\n\t \"440115\": \"南沙区\",\n\t \"440116\": \"萝岗区\",\n\t \"440183\": \"增城市\",\n\t \"440184\": \"从化市\",\n\t \"440189\": \"其它区\",\n\t \"440200\": \"韶关市\",\n\t \"440203\": \"武江区\",\n\t \"440204\": \"浈江区\",\n\t \"440205\": \"曲江区\",\n\t \"440222\": \"始兴县\",\n\t \"440224\": \"仁化县\",\n\t \"440229\": \"翁源县\",\n\t \"440232\": \"乳源瑶族自治县\",\n\t \"440233\": \"新丰县\",\n\t \"440281\": \"乐昌市\",\n\t \"440282\": \"南雄市\",\n\t \"440283\": \"其它区\",\n\t \"440300\": \"深圳市\",\n\t \"440303\": \"罗湖区\",\n\t \"440304\": \"福田区\",\n\t \"440305\": \"南山区\",\n\t \"440306\": \"宝安区\",\n\t \"440307\": \"龙岗区\",\n\t \"440308\": \"盐田区\",\n\t \"440309\": \"其它区\",\n\t \"440320\": \"光明新区\",\n\t \"440321\": \"坪山新区\",\n\t \"440322\": \"大鹏新区\",\n\t \"440323\": \"龙华新区\",\n\t \"440400\": \"珠海市\",\n\t \"440402\": \"香洲区\",\n\t \"440403\": \"斗门区\",\n\t \"440404\": \"金湾区\",\n\t \"440488\": \"其它区\",\n\t \"440500\": \"汕头市\",\n\t \"440507\": \"龙湖区\",\n\t \"440511\": \"金平区\",\n\t \"440512\": \"濠江区\",\n\t \"440513\": \"潮阳区\",\n\t \"440514\": \"潮南区\",\n\t \"440515\": \"澄海区\",\n\t \"440523\": \"南澳县\",\n\t \"440524\": \"其它区\",\n\t \"440600\": \"佛山市\",\n\t \"440604\": \"禅城区\",\n\t \"440605\": \"南海区\",\n\t \"440606\": \"顺德区\",\n\t \"440607\": \"三水区\",\n\t \"440608\": \"高明区\",\n\t \"440609\": \"其它区\",\n\t \"440700\": \"江门市\",\n\t \"440703\": \"蓬江区\",\n\t \"440704\": \"江海区\",\n\t \"440705\": \"新会区\",\n\t \"440781\": \"台山市\",\n\t \"440783\": \"开平市\",\n\t \"440784\": \"鹤山市\",\n\t \"440785\": \"恩平市\",\n\t \"440786\": \"其它区\",\n\t \"440800\": \"湛江市\",\n\t \"440802\": \"赤坎区\",\n\t \"440803\": \"霞山区\",\n\t \"440804\": \"坡头区\",\n\t \"440811\": \"麻章区\",\n\t \"440823\": \"遂溪县\",\n\t \"440825\": \"徐闻县\",\n\t \"440881\": \"廉江市\",\n\t \"440882\": \"雷州市\",\n\t \"440883\": \"吴川市\",\n\t \"440884\": \"其它区\",\n\t \"440900\": \"茂名市\",\n\t \"440902\": \"茂南区\",\n\t \"440903\": \"茂港区\",\n\t \"440923\": \"电白县\",\n\t \"440981\": \"高州市\",\n\t \"440982\": \"化州市\",\n\t \"440983\": \"信宜市\",\n\t \"440984\": \"其它区\",\n\t \"441200\": \"肇庆市\",\n\t \"441202\": \"端州区\",\n\t \"441203\": \"鼎湖区\",\n\t \"441223\": \"广宁县\",\n\t \"441224\": \"怀集县\",\n\t \"441225\": \"封开县\",\n\t \"441226\": \"德庆县\",\n\t \"441283\": \"高要市\",\n\t \"441284\": \"四会市\",\n\t \"441285\": \"其它区\",\n\t \"441300\": \"惠州市\",\n\t \"441302\": \"惠城区\",\n\t \"441303\": \"惠阳区\",\n\t \"441322\": \"博罗县\",\n\t \"441323\": \"惠东县\",\n\t \"441324\": \"龙门县\",\n\t \"441325\": \"其它区\",\n\t \"441400\": \"梅州市\",\n\t \"441402\": \"梅江区\",\n\t \"441421\": \"梅县\",\n\t \"441422\": \"大埔县\",\n\t \"441423\": \"丰顺县\",\n\t \"441424\": \"五华县\",\n\t \"441426\": \"平远县\",\n\t \"441427\": \"蕉岭县\",\n\t \"441481\": \"兴宁市\",\n\t \"441482\": \"其它区\",\n\t \"441500\": \"汕尾市\",\n\t \"441502\": \"城区\",\n\t \"441521\": \"海丰县\",\n\t \"441523\": \"陆河县\",\n\t \"441581\": \"陆丰市\",\n\t \"441582\": \"其它区\",\n\t \"441600\": \"河源市\",\n\t \"441602\": \"源城区\",\n\t \"441621\": \"紫金县\",\n\t \"441622\": \"龙川县\",\n\t \"441623\": \"连平县\",\n\t \"441624\": \"和平县\",\n\t \"441625\": \"东源县\",\n\t \"441626\": \"其它区\",\n\t \"441700\": \"阳江市\",\n\t \"441702\": \"江城区\",\n\t \"441721\": \"阳西县\",\n\t \"441723\": \"阳东县\",\n\t \"441781\": \"阳春市\",\n\t \"441782\": \"其它区\",\n\t \"441800\": \"清远市\",\n\t \"441802\": \"清城区\",\n\t \"441821\": \"佛冈县\",\n\t \"441823\": \"阳山县\",\n\t \"441825\": \"连山壮族瑶族自治县\",\n\t \"441826\": \"连南瑶族自治县\",\n\t \"441827\": \"清新区\",\n\t \"441881\": \"英德市\",\n\t \"441882\": \"连州市\",\n\t \"441883\": \"其它区\",\n\t \"441900\": \"东莞市\",\n\t \"442000\": \"中山市\",\n\t \"442101\": \"东沙群岛\",\n\t \"445100\": \"潮州市\",\n\t \"445102\": \"湘桥区\",\n\t \"445121\": \"潮安区\",\n\t \"445122\": \"饶平县\",\n\t \"445186\": \"其它区\",\n\t \"445200\": \"揭阳市\",\n\t \"445202\": \"榕城区\",\n\t \"445221\": \"揭东区\",\n\t \"445222\": \"揭西县\",\n\t \"445224\": \"惠来县\",\n\t \"445281\": \"普宁市\",\n\t \"445285\": \"其它区\",\n\t \"445300\": \"云浮市\",\n\t \"445302\": \"云城区\",\n\t \"445321\": \"新兴县\",\n\t \"445322\": \"郁南县\",\n\t \"445323\": \"云安县\",\n\t \"445381\": \"罗定市\",\n\t \"445382\": \"其它区\",\n\t \"450000\": \"广西壮族自治区\",\n\t \"450100\": \"南宁市\",\n\t \"450102\": \"兴宁区\",\n\t \"450103\": \"青秀区\",\n\t \"450105\": \"江南区\",\n\t \"450107\": \"西乡塘区\",\n\t \"450108\": \"良庆区\",\n\t \"450109\": \"邕宁区\",\n\t \"450122\": \"武鸣县\",\n\t \"450123\": \"隆安县\",\n\t \"450124\": \"马山县\",\n\t \"450125\": \"上林县\",\n\t \"450126\": \"宾阳县\",\n\t \"450127\": \"横县\",\n\t \"450128\": \"其它区\",\n\t \"450200\": \"柳州市\",\n\t \"450202\": \"城中区\",\n\t \"450203\": \"鱼峰区\",\n\t \"450204\": \"柳南区\",\n\t \"450205\": \"柳北区\",\n\t \"450221\": \"柳江县\",\n\t \"450222\": \"柳城县\",\n\t \"450223\": \"鹿寨县\",\n\t \"450224\": \"融安县\",\n\t \"450225\": \"融水苗族自治县\",\n\t \"450226\": \"三江侗族自治县\",\n\t \"450227\": \"其它区\",\n\t \"450300\": \"桂林市\",\n\t \"450302\": \"秀峰区\",\n\t \"450303\": \"叠彩区\",\n\t \"450304\": \"象山区\",\n\t \"450305\": \"七星区\",\n\t \"450311\": \"雁山区\",\n\t \"450321\": \"阳朔县\",\n\t \"450322\": \"临桂区\",\n\t \"450323\": \"灵川县\",\n\t \"450324\": \"全州县\",\n\t \"450325\": \"兴安县\",\n\t \"450326\": \"永福县\",\n\t \"450327\": \"灌阳县\",\n\t \"450328\": \"龙胜各族自治县\",\n\t \"450329\": \"资源县\",\n\t \"450330\": \"平乐县\",\n\t \"450331\": \"荔浦县\",\n\t \"450332\": \"恭城瑶族自治县\",\n\t \"450333\": \"其它区\",\n\t \"450400\": \"梧州市\",\n\t \"450403\": \"万秀区\",\n\t \"450405\": \"长洲区\",\n\t \"450406\": \"龙圩区\",\n\t \"450421\": \"苍梧县\",\n\t \"450422\": \"藤县\",\n\t \"450423\": \"蒙山县\",\n\t \"450481\": \"岑溪市\",\n\t \"450482\": \"其它区\",\n\t \"450500\": \"北海市\",\n\t \"450502\": \"海城区\",\n\t \"450503\": \"银海区\",\n\t \"450512\": \"铁山港区\",\n\t \"450521\": \"合浦县\",\n\t \"450522\": \"其它区\",\n\t \"450600\": \"防城港市\",\n\t \"450602\": \"港口区\",\n\t \"450603\": \"防城区\",\n\t \"450621\": \"上思县\",\n\t \"450681\": \"东兴市\",\n\t \"450682\": \"其它区\",\n\t \"450700\": \"钦州市\",\n\t \"450702\": \"钦南区\",\n\t \"450703\": \"钦北区\",\n\t \"450721\": \"灵山县\",\n\t \"450722\": \"浦北县\",\n\t \"450723\": \"其它区\",\n\t \"450800\": \"贵港市\",\n\t \"450802\": \"港北区\",\n\t \"450803\": \"港南区\",\n\t \"450804\": \"覃塘区\",\n\t \"450821\": \"平南县\",\n\t \"450881\": \"桂平市\",\n\t \"450882\": \"其它区\",\n\t \"450900\": \"玉林市\",\n\t \"450902\": \"玉州区\",\n\t \"450903\": \"福绵区\",\n\t \"450921\": \"容县\",\n\t \"450922\": \"陆川县\",\n\t \"450923\": \"博白县\",\n\t \"450924\": \"兴业县\",\n\t \"450981\": \"北流市\",\n\t \"450982\": \"其它区\",\n\t \"451000\": \"百色市\",\n\t \"451002\": \"右江区\",\n\t \"451021\": \"田阳县\",\n\t \"451022\": \"田东县\",\n\t \"451023\": \"平果县\",\n\t \"451024\": \"德保县\",\n\t \"451025\": \"靖西县\",\n\t \"451026\": \"那坡县\",\n\t \"451027\": \"凌云县\",\n\t \"451028\": \"乐业县\",\n\t \"451029\": \"田林县\",\n\t \"451030\": \"西林县\",\n\t \"451031\": \"隆林各族自治县\",\n\t \"451032\": \"其它区\",\n\t \"451100\": \"贺州市\",\n\t \"451102\": \"八步区\",\n\t \"451119\": \"平桂管理区\",\n\t \"451121\": \"昭平县\",\n\t \"451122\": \"钟山县\",\n\t \"451123\": \"富川瑶族自治县\",\n\t \"451124\": \"其它区\",\n\t \"451200\": \"河池市\",\n\t \"451202\": \"金城江区\",\n\t \"451221\": \"南丹县\",\n\t \"451222\": \"天峨县\",\n\t \"451223\": \"凤山县\",\n\t \"451224\": \"东兰县\",\n\t \"451225\": \"罗城仫佬族自治县\",\n\t \"451226\": \"环江毛南族自治县\",\n\t \"451227\": \"巴马瑶族自治县\",\n\t \"451228\": \"都安瑶族自治县\",\n\t \"451229\": \"大化瑶族自治县\",\n\t \"451281\": \"宜州市\",\n\t \"451282\": \"其它区\",\n\t \"451300\": \"来宾市\",\n\t \"451302\": \"兴宾区\",\n\t \"451321\": \"忻城县\",\n\t \"451322\": \"象州县\",\n\t \"451323\": \"武宣县\",\n\t \"451324\": \"金秀瑶族自治县\",\n\t \"451381\": \"合山市\",\n\t \"451382\": \"其它区\",\n\t \"451400\": \"崇左市\",\n\t \"451402\": \"江州区\",\n\t \"451421\": \"扶绥县\",\n\t \"451422\": \"宁明县\",\n\t \"451423\": \"龙州县\",\n\t \"451424\": \"大新县\",\n\t \"451425\": \"天等县\",\n\t \"451481\": \"凭祥市\",\n\t \"451482\": \"其它区\",\n\t \"460000\": \"海南省\",\n\t \"460100\": \"海口市\",\n\t \"460105\": \"秀英区\",\n\t \"460106\": \"龙华区\",\n\t \"460107\": \"琼山区\",\n\t \"460108\": \"美兰区\",\n\t \"460109\": \"其它区\",\n\t \"460200\": \"三亚市\",\n\t \"460300\": \"三沙市\",\n\t \"460321\": \"西沙群岛\",\n\t \"460322\": \"南沙群岛\",\n\t \"460323\": \"中沙群岛的岛礁及其海域\",\n\t \"469001\": \"五指山市\",\n\t \"469002\": \"琼海市\",\n\t \"469003\": \"儋州市\",\n\t \"469005\": \"文昌市\",\n\t \"469006\": \"万宁市\",\n\t \"469007\": \"东方市\",\n\t \"469025\": \"定安县\",\n\t \"469026\": \"屯昌县\",\n\t \"469027\": \"澄迈县\",\n\t \"469028\": \"临高县\",\n\t \"469030\": \"白沙黎族自治县\",\n\t \"469031\": \"昌江黎族自治县\",\n\t \"469033\": \"乐东黎族自治县\",\n\t \"469034\": \"陵水黎族自治县\",\n\t \"469035\": \"保亭黎族苗族自治县\",\n\t \"469036\": \"琼中黎族苗族自治县\",\n\t \"471005\": \"其它区\",\n\t \"500000\": \"重庆\",\n\t \"500100\": \"重庆市\",\n\t \"500101\": \"万州区\",\n\t \"500102\": \"涪陵区\",\n\t \"500103\": \"渝中区\",\n\t \"500104\": \"大渡口区\",\n\t \"500105\": \"江北区\",\n\t \"500106\": \"沙坪坝区\",\n\t \"500107\": \"九龙坡区\",\n\t \"500108\": \"南岸区\",\n\t \"500109\": \"北碚区\",\n\t \"500110\": \"万盛区\",\n\t \"500111\": \"双桥区\",\n\t \"500112\": \"渝北区\",\n\t \"500113\": \"巴南区\",\n\t \"500114\": \"黔江区\",\n\t \"500115\": \"长寿区\",\n\t \"500222\": \"綦江区\",\n\t \"500223\": \"潼南县\",\n\t \"500224\": \"铜梁县\",\n\t \"500225\": \"大足区\",\n\t \"500226\": \"荣昌县\",\n\t \"500227\": \"璧山县\",\n\t \"500228\": \"梁平县\",\n\t \"500229\": \"城口县\",\n\t \"500230\": \"丰都县\",\n\t \"500231\": \"垫江县\",\n\t \"500232\": \"武隆县\",\n\t \"500233\": \"忠县\",\n\t \"500234\": \"开县\",\n\t \"500235\": \"云阳县\",\n\t \"500236\": \"奉节县\",\n\t \"500237\": \"巫山县\",\n\t \"500238\": \"巫溪县\",\n\t \"500240\": \"石柱土家族自治县\",\n\t \"500241\": \"秀山土家族苗族自治县\",\n\t \"500242\": \"酉阳土家族苗族自治县\",\n\t \"500243\": \"彭水苗族土家族自治县\",\n\t \"500381\": \"江津区\",\n\t \"500382\": \"合川区\",\n\t \"500383\": \"永川区\",\n\t \"500384\": \"南川区\",\n\t \"500385\": \"其它区\",\n\t \"510000\": \"四川省\",\n\t \"510100\": \"成都市\",\n\t \"510104\": \"锦江区\",\n\t \"510105\": \"青羊区\",\n\t \"510106\": \"金牛区\",\n\t \"510107\": \"武侯区\",\n\t \"510108\": \"成华区\",\n\t \"510112\": \"龙泉驿区\",\n\t \"510113\": \"青白江区\",\n\t \"510114\": \"新都区\",\n\t \"510115\": \"温江区\",\n\t \"510121\": \"金堂县\",\n\t \"510122\": \"双流县\",\n\t \"510124\": \"郫县\",\n\t \"510129\": \"大邑县\",\n\t \"510131\": \"蒲江县\",\n\t \"510132\": \"新津县\",\n\t \"510181\": \"都江堰市\",\n\t \"510182\": \"彭州市\",\n\t \"510183\": \"邛崃市\",\n\t \"510184\": \"崇州市\",\n\t \"510185\": \"其它区\",\n\t \"510300\": \"自贡市\",\n\t \"510302\": \"自流井区\",\n\t \"510303\": \"贡井区\",\n\t \"510304\": \"大安区\",\n\t \"510311\": \"沿滩区\",\n\t \"510321\": \"荣县\",\n\t \"510322\": \"富顺县\",\n\t \"510323\": \"其它区\",\n\t \"510400\": \"攀枝花市\",\n\t \"510402\": \"东区\",\n\t \"510403\": \"西区\",\n\t \"510411\": \"仁和区\",\n\t \"510421\": \"米易县\",\n\t \"510422\": \"盐边县\",\n\t \"510423\": \"其它区\",\n\t \"510500\": \"泸州市\",\n\t \"510502\": \"江阳区\",\n\t \"510503\": \"纳溪区\",\n\t \"510504\": \"龙马潭区\",\n\t \"510521\": \"泸县\",\n\t \"510522\": \"合江县\",\n\t \"510524\": \"叙永县\",\n\t \"510525\": \"古蔺县\",\n\t \"510526\": \"其它区\",\n\t \"510600\": \"德阳市\",\n\t \"510603\": \"旌阳区\",\n\t \"510623\": \"中江县\",\n\t \"510626\": \"罗江县\",\n\t \"510681\": \"广汉市\",\n\t \"510682\": \"什邡市\",\n\t \"510683\": \"绵竹市\",\n\t \"510684\": \"其它区\",\n\t \"510700\": \"绵阳市\",\n\t \"510703\": \"涪城区\",\n\t \"510704\": \"游仙区\",\n\t \"510722\": \"三台县\",\n\t \"510723\": \"盐亭县\",\n\t \"510724\": \"安县\",\n\t \"510725\": \"梓潼县\",\n\t \"510726\": \"北川羌族自治县\",\n\t \"510727\": \"平武县\",\n\t \"510781\": \"江油市\",\n\t \"510782\": \"其它区\",\n\t \"510800\": \"广元市\",\n\t \"510802\": \"利州区\",\n\t \"510811\": \"昭化区\",\n\t \"510812\": \"朝天区\",\n\t \"510821\": \"旺苍县\",\n\t \"510822\": \"青川县\",\n\t \"510823\": \"剑阁县\",\n\t \"510824\": \"苍溪县\",\n\t \"510825\": \"其它区\",\n\t \"510900\": \"遂宁市\",\n\t \"510903\": \"船山区\",\n\t \"510904\": \"安居区\",\n\t \"510921\": \"蓬溪县\",\n\t \"510922\": \"射洪县\",\n\t \"510923\": \"大英县\",\n\t \"510924\": \"其它区\",\n\t \"511000\": \"内江市\",\n\t \"511002\": \"市中区\",\n\t \"511011\": \"东兴区\",\n\t \"511024\": \"威远县\",\n\t \"511025\": \"资中县\",\n\t \"511028\": \"隆昌县\",\n\t \"511029\": \"其它区\",\n\t \"511100\": \"乐山市\",\n\t \"511102\": \"市中区\",\n\t \"511111\": \"沙湾区\",\n\t \"511112\": \"五通桥区\",\n\t \"511113\": \"金口河区\",\n\t \"511123\": \"犍为县\",\n\t \"511124\": \"井研县\",\n\t \"511126\": \"夹江县\",\n\t \"511129\": \"沐川县\",\n\t \"511132\": \"峨边彝族自治县\",\n\t \"511133\": \"马边彝族自治县\",\n\t \"511181\": \"峨眉山市\",\n\t \"511182\": \"其它区\",\n\t \"511300\": \"南充市\",\n\t \"511302\": \"顺庆区\",\n\t \"511303\": \"高坪区\",\n\t \"511304\": \"嘉陵区\",\n\t \"511321\": \"南部县\",\n\t \"511322\": \"营山县\",\n\t \"511323\": \"蓬安县\",\n\t \"511324\": \"仪陇县\",\n\t \"511325\": \"西充县\",\n\t \"511381\": \"阆中市\",\n\t \"511382\": \"其它区\",\n\t \"511400\": \"眉山市\",\n\t \"511402\": \"东坡区\",\n\t \"511421\": \"仁寿县\",\n\t \"511422\": \"彭山县\",\n\t \"511423\": \"洪雅县\",\n\t \"511424\": \"丹棱县\",\n\t \"511425\": \"青神县\",\n\t \"511426\": \"其它区\",\n\t \"511500\": \"宜宾市\",\n\t \"511502\": \"翠屏区\",\n\t \"511521\": \"宜宾县\",\n\t \"511522\": \"南溪区\",\n\t \"511523\": \"江安县\",\n\t \"511524\": \"长宁县\",\n\t \"511525\": \"高县\",\n\t \"511526\": \"珙县\",\n\t \"511527\": \"筠连县\",\n\t \"511528\": \"兴文县\",\n\t \"511529\": \"屏山县\",\n\t \"511530\": \"其它区\",\n\t \"511600\": \"广安市\",\n\t \"511602\": \"广安区\",\n\t \"511603\": \"前锋区\",\n\t \"511621\": \"岳池县\",\n\t \"511622\": \"武胜县\",\n\t \"511623\": \"邻水县\",\n\t \"511681\": \"华蓥市\",\n\t \"511683\": \"其它区\",\n\t \"511700\": \"达州市\",\n\t \"511702\": \"通川区\",\n\t \"511721\": \"达川区\",\n\t \"511722\": \"宣汉县\",\n\t \"511723\": \"开江县\",\n\t \"511724\": \"大竹县\",\n\t \"511725\": \"渠县\",\n\t \"511781\": \"万源市\",\n\t \"511782\": \"其它区\",\n\t \"511800\": \"雅安市\",\n\t \"511802\": \"雨城区\",\n\t \"511821\": \"名山区\",\n\t \"511822\": \"荥经县\",\n\t \"511823\": \"汉源县\",\n\t \"511824\": \"石棉县\",\n\t \"511825\": \"天全县\",\n\t \"511826\": \"芦山县\",\n\t \"511827\": \"宝兴县\",\n\t \"511828\": \"其它区\",\n\t \"511900\": \"巴中市\",\n\t \"511902\": \"巴州区\",\n\t \"511903\": \"恩阳区\",\n\t \"511921\": \"通江县\",\n\t \"511922\": \"南江县\",\n\t \"511923\": \"平昌县\",\n\t \"511924\": \"其它区\",\n\t \"512000\": \"资阳市\",\n\t \"512002\": \"雁江区\",\n\t \"512021\": \"安岳县\",\n\t \"512022\": \"乐至县\",\n\t \"512081\": \"简阳市\",\n\t \"512082\": \"其它区\",\n\t \"513200\": \"阿坝藏族羌族自治州\",\n\t \"513221\": \"汶川县\",\n\t \"513222\": \"理县\",\n\t \"513223\": \"茂县\",\n\t \"513224\": \"松潘县\",\n\t \"513225\": \"九寨沟县\",\n\t \"513226\": \"金川县\",\n\t \"513227\": \"小金县\",\n\t \"513228\": \"黑水县\",\n\t \"513229\": \"马尔康县\",\n\t \"513230\": \"壤塘县\",\n\t \"513231\": \"阿坝县\",\n\t \"513232\": \"若尔盖县\",\n\t \"513233\": \"红原县\",\n\t \"513234\": \"其它区\",\n\t \"513300\": \"甘孜藏族自治州\",\n\t \"513321\": \"康定县\",\n\t \"513322\": \"泸定县\",\n\t \"513323\": \"丹巴县\",\n\t \"513324\": \"九龙县\",\n\t \"513325\": \"雅江县\",\n\t \"513326\": \"道孚县\",\n\t \"513327\": \"炉霍县\",\n\t \"513328\": \"甘孜县\",\n\t \"513329\": \"新龙县\",\n\t \"513330\": \"德格县\",\n\t \"513331\": \"白玉县\",\n\t \"513332\": \"石渠县\",\n\t \"513333\": \"色达县\",\n\t \"513334\": \"理塘县\",\n\t \"513335\": \"巴塘县\",\n\t \"513336\": \"乡城县\",\n\t \"513337\": \"稻城县\",\n\t \"513338\": \"得荣县\",\n\t \"513339\": \"其它区\",\n\t \"513400\": \"凉山彝族自治州\",\n\t \"513401\": \"西昌市\",\n\t \"513422\": \"木里藏族自治县\",\n\t \"513423\": \"盐源县\",\n\t \"513424\": \"德昌县\",\n\t \"513425\": \"会理县\",\n\t \"513426\": \"会东县\",\n\t \"513427\": \"宁南县\",\n\t \"513428\": \"普格县\",\n\t \"513429\": \"布拖县\",\n\t \"513430\": \"金阳县\",\n\t \"513431\": \"昭觉县\",\n\t \"513432\": \"喜德县\",\n\t \"513433\": \"冕宁县\",\n\t \"513434\": \"越西县\",\n\t \"513435\": \"甘洛县\",\n\t \"513436\": \"美姑县\",\n\t \"513437\": \"雷波县\",\n\t \"513438\": \"其它区\",\n\t \"520000\": \"贵州省\",\n\t \"520100\": \"贵阳市\",\n\t \"520102\": \"南明区\",\n\t \"520103\": \"云岩区\",\n\t \"520111\": \"花溪区\",\n\t \"520112\": \"乌当区\",\n\t \"520113\": \"白云区\",\n\t \"520121\": \"开阳县\",\n\t \"520122\": \"息烽县\",\n\t \"520123\": \"修文县\",\n\t \"520151\": \"观山湖区\",\n\t \"520181\": \"清镇市\",\n\t \"520182\": \"其它区\",\n\t \"520200\": \"六盘水市\",\n\t \"520201\": \"钟山区\",\n\t \"520203\": \"六枝特区\",\n\t \"520221\": \"水城县\",\n\t \"520222\": \"盘县\",\n\t \"520223\": \"其它区\",\n\t \"520300\": \"遵义市\",\n\t \"520302\": \"红花岗区\",\n\t \"520303\": \"汇川区\",\n\t \"520321\": \"遵义县\",\n\t \"520322\": \"桐梓县\",\n\t \"520323\": \"绥阳县\",\n\t \"520324\": \"正安县\",\n\t \"520325\": \"道真仡佬族苗族自治县\",\n\t \"520326\": \"务川仡佬族苗族自治县\",\n\t \"520327\": \"凤冈县\",\n\t \"520328\": \"湄潭县\",\n\t \"520329\": \"余庆县\",\n\t \"520330\": \"习水县\",\n\t \"520381\": \"赤水市\",\n\t \"520382\": \"仁怀市\",\n\t \"520383\": \"其它区\",\n\t \"520400\": \"安顺市\",\n\t \"520402\": \"西秀区\",\n\t \"520421\": \"平坝县\",\n\t \"520422\": \"普定县\",\n\t \"520423\": \"镇宁布依族苗族自治县\",\n\t \"520424\": \"关岭布依族苗族自治县\",\n\t \"520425\": \"紫云苗族布依族自治县\",\n\t \"520426\": \"其它区\",\n\t \"522200\": \"铜仁市\",\n\t \"522201\": \"碧江区\",\n\t \"522222\": \"江口县\",\n\t \"522223\": \"玉屏侗族自治县\",\n\t \"522224\": \"石阡县\",\n\t \"522225\": \"思南县\",\n\t \"522226\": \"印江土家族苗族自治县\",\n\t \"522227\": \"德江县\",\n\t \"522228\": \"沿河土家族自治县\",\n\t \"522229\": \"松桃苗族自治县\",\n\t \"522230\": \"万山区\",\n\t \"522231\": \"其它区\",\n\t \"522300\": \"黔西南布依族苗族自治州\",\n\t \"522301\": \"兴义市\",\n\t \"522322\": \"兴仁县\",\n\t \"522323\": \"普安县\",\n\t \"522324\": \"晴隆县\",\n\t \"522325\": \"贞丰县\",\n\t \"522326\": \"望谟县\",\n\t \"522327\": \"册亨县\",\n\t \"522328\": \"安龙县\",\n\t \"522329\": \"其它区\",\n\t \"522400\": \"毕节市\",\n\t \"522401\": \"七星关区\",\n\t \"522422\": \"大方县\",\n\t \"522423\": \"黔西县\",\n\t \"522424\": \"金沙县\",\n\t \"522425\": \"织金县\",\n\t \"522426\": \"纳雍县\",\n\t \"522427\": \"威宁彝族回族苗族自治县\",\n\t \"522428\": \"赫章县\",\n\t \"522429\": \"其它区\",\n\t \"522600\": \"黔东南苗族侗族自治州\",\n\t \"522601\": \"凯里市\",\n\t \"522622\": \"黄平县\",\n\t \"522623\": \"施秉县\",\n\t \"522624\": \"三穗县\",\n\t \"522625\": \"镇远县\",\n\t \"522626\": \"岑巩县\",\n\t \"522627\": \"天柱县\",\n\t \"522628\": \"锦屏县\",\n\t \"522629\": \"剑河县\",\n\t \"522630\": \"台江县\",\n\t \"522631\": \"黎平县\",\n\t \"522632\": \"榕江县\",\n\t \"522633\": \"从江县\",\n\t \"522634\": \"雷山县\",\n\t \"522635\": \"麻江县\",\n\t \"522636\": \"丹寨县\",\n\t \"522637\": \"其它区\",\n\t \"522700\": \"黔南布依族苗族自治州\",\n\t \"522701\": \"都匀市\",\n\t \"522702\": \"福泉市\",\n\t \"522722\": \"荔波县\",\n\t \"522723\": \"贵定县\",\n\t \"522725\": \"瓮安县\",\n\t \"522726\": \"独山县\",\n\t \"522727\": \"平塘县\",\n\t \"522728\": \"罗甸县\",\n\t \"522729\": \"长顺县\",\n\t \"522730\": \"龙里县\",\n\t \"522731\": \"惠水县\",\n\t \"522732\": \"三都水族自治县\",\n\t \"522733\": \"其它区\",\n\t \"530000\": \"云南省\",\n\t \"530100\": \"昆明市\",\n\t \"530102\": \"五华区\",\n\t \"530103\": \"盘龙区\",\n\t \"530111\": \"官渡区\",\n\t \"530112\": \"西山区\",\n\t \"530113\": \"东川区\",\n\t \"530121\": \"呈贡区\",\n\t \"530122\": \"晋宁县\",\n\t \"530124\": \"富民县\",\n\t \"530125\": \"宜良县\",\n\t \"530126\": \"石林彝族自治县\",\n\t \"530127\": \"嵩明县\",\n\t \"530128\": \"禄劝彝族苗族自治县\",\n\t \"530129\": \"寻甸回族彝族自治县\",\n\t \"530181\": \"安宁市\",\n\t \"530182\": \"其它区\",\n\t \"530300\": \"曲靖市\",\n\t \"530302\": \"麒麟区\",\n\t \"530321\": \"马龙县\",\n\t \"530322\": \"陆良县\",\n\t \"530323\": \"师宗县\",\n\t \"530324\": \"罗平县\",\n\t \"530325\": \"富源县\",\n\t \"530326\": \"会泽县\",\n\t \"530328\": \"沾益县\",\n\t \"530381\": \"宣威市\",\n\t \"530382\": \"其它区\",\n\t \"530400\": \"玉溪市\",\n\t \"530402\": \"红塔区\",\n\t \"530421\": \"江川县\",\n\t \"530422\": \"澄江县\",\n\t \"530423\": \"通海县\",\n\t \"530424\": \"华宁县\",\n\t \"530425\": \"易门县\",\n\t \"530426\": \"峨山彝族自治县\",\n\t \"530427\": \"新平彝族傣族自治县\",\n\t \"530428\": \"元江哈尼族彝族傣族自治县\",\n\t \"530429\": \"其它区\",\n\t \"530500\": \"保山市\",\n\t \"530502\": \"隆阳区\",\n\t \"530521\": \"施甸县\",\n\t \"530522\": \"腾冲县\",\n\t \"530523\": \"龙陵县\",\n\t \"530524\": \"昌宁县\",\n\t \"530525\": \"其它区\",\n\t \"530600\": \"昭通市\",\n\t \"530602\": \"昭阳区\",\n\t \"530621\": \"鲁甸县\",\n\t \"530622\": \"巧家县\",\n\t \"530623\": \"盐津县\",\n\t \"530624\": \"大关县\",\n\t \"530625\": \"永善县\",\n\t \"530626\": \"绥江县\",\n\t \"530627\": \"镇雄县\",\n\t \"530628\": \"彝良县\",\n\t \"530629\": \"威信县\",\n\t \"530630\": \"水富县\",\n\t \"530631\": \"其它区\",\n\t \"530700\": \"丽江市\",\n\t \"530702\": \"古城区\",\n\t \"530721\": \"玉龙纳西族自治县\",\n\t \"530722\": \"永胜县\",\n\t \"530723\": \"华坪县\",\n\t \"530724\": \"宁蒗彝族自治县\",\n\t \"530725\": \"其它区\",\n\t \"530800\": \"普洱市\",\n\t \"530802\": \"思茅区\",\n\t \"530821\": \"宁洱哈尼族彝族自治县\",\n\t \"530822\": \"墨江哈尼族自治县\",\n\t \"530823\": \"景东彝族自治县\",\n\t \"530824\": \"景谷傣族彝族自治县\",\n\t \"530825\": \"镇沅彝族哈尼族拉祜族自治县\",\n\t \"530826\": \"江城哈尼族彝族自治县\",\n\t \"530827\": \"孟连傣族拉祜族佤族自治县\",\n\t \"530828\": \"澜沧拉祜族自治县\",\n\t \"530829\": \"西盟佤族自治县\",\n\t \"530830\": \"其它区\",\n\t \"530900\": \"临沧市\",\n\t \"530902\": \"临翔区\",\n\t \"530921\": \"凤庆县\",\n\t \"530922\": \"云县\",\n\t \"530923\": \"永德县\",\n\t \"530924\": \"镇康县\",\n\t \"530925\": \"双江拉祜族佤族布朗族傣族自治县\",\n\t \"530926\": \"耿马傣族佤族自治县\",\n\t \"530927\": \"沧源佤族自治县\",\n\t \"530928\": \"其它区\",\n\t \"532300\": \"楚雄彝族自治州\",\n\t \"532301\": \"楚雄市\",\n\t \"532322\": \"双柏县\",\n\t \"532323\": \"牟定县\",\n\t \"532324\": \"南华县\",\n\t \"532325\": \"姚安县\",\n\t \"532326\": \"大姚县\",\n\t \"532327\": \"永仁县\",\n\t \"532328\": \"元谋县\",\n\t \"532329\": \"武定县\",\n\t \"532331\": \"禄丰县\",\n\t \"532332\": \"其它区\",\n\t \"532500\": \"红河哈尼族彝族自治州\",\n\t \"532501\": \"个旧市\",\n\t \"532502\": \"开远市\",\n\t \"532522\": \"蒙自市\",\n\t \"532523\": \"屏边苗族自治县\",\n\t \"532524\": \"建水县\",\n\t \"532525\": \"石屏县\",\n\t \"532526\": \"弥勒市\",\n\t \"532527\": \"泸西县\",\n\t \"532528\": \"元阳县\",\n\t \"532529\": \"红河县\",\n\t \"532530\": \"金平苗族瑶族傣族自治县\",\n\t \"532531\": \"绿春县\",\n\t \"532532\": \"河口瑶族自治县\",\n\t \"532533\": \"其它区\",\n\t \"532600\": \"文山壮族苗族自治州\",\n\t \"532621\": \"文山市\",\n\t \"532622\": \"砚山县\",\n\t \"532623\": \"西畴县\",\n\t \"532624\": \"麻栗坡县\",\n\t \"532625\": \"马关县\",\n\t \"532626\": \"丘北县\",\n\t \"532627\": \"广南县\",\n\t \"532628\": \"富宁县\",\n\t \"532629\": \"其它区\",\n\t \"532800\": \"西双版纳傣族自治州\",\n\t \"532801\": \"景洪市\",\n\t \"532822\": \"勐海县\",\n\t \"532823\": \"勐腊县\",\n\t \"532824\": \"其它区\",\n\t \"532900\": \"大理白族自治州\",\n\t \"532901\": \"大理市\",\n\t \"532922\": \"漾濞彝族自治县\",\n\t \"532923\": \"祥云县\",\n\t \"532924\": \"宾川县\",\n\t \"532925\": \"弥渡县\",\n\t \"532926\": \"南涧彝族自治县\",\n\t \"532927\": \"巍山彝族回族自治县\",\n\t \"532928\": \"永平县\",\n\t \"532929\": \"云龙县\",\n\t \"532930\": \"洱源县\",\n\t \"532931\": \"剑川县\",\n\t \"532932\": \"鹤庆县\",\n\t \"532933\": \"其它区\",\n\t \"533100\": \"德宏傣族景颇族自治州\",\n\t \"533102\": \"瑞丽市\",\n\t \"533103\": \"芒市\",\n\t \"533122\": \"梁河县\",\n\t \"533123\": \"盈江县\",\n\t \"533124\": \"陇川县\",\n\t \"533125\": \"其它区\",\n\t \"533300\": \"怒江傈僳族自治州\",\n\t \"533321\": \"泸水县\",\n\t \"533323\": \"福贡县\",\n\t \"533324\": \"贡山独龙族怒族自治县\",\n\t \"533325\": \"兰坪白族普米族自治县\",\n\t \"533326\": \"其它区\",\n\t \"533400\": \"迪庆藏族自治州\",\n\t \"533421\": \"香格里拉县\",\n\t \"533422\": \"德钦县\",\n\t \"533423\": \"维西傈僳族自治县\",\n\t \"533424\": \"其它区\",\n\t \"540000\": \"西藏自治区\",\n\t \"540100\": \"拉萨市\",\n\t \"540102\": \"城关区\",\n\t \"540121\": \"林周县\",\n\t \"540122\": \"当雄县\",\n\t \"540123\": \"尼木县\",\n\t \"540124\": \"曲水县\",\n\t \"540125\": \"堆龙德庆县\",\n\t \"540126\": \"达孜县\",\n\t \"540127\": \"墨竹工卡县\",\n\t \"540128\": \"其它区\",\n\t \"542100\": \"昌都地区\",\n\t \"542121\": \"昌都县\",\n\t \"542122\": \"江达县\",\n\t \"542123\": \"贡觉县\",\n\t \"542124\": \"类乌齐县\",\n\t \"542125\": \"丁青县\",\n\t \"542126\": \"察雅县\",\n\t \"542127\": \"八宿县\",\n\t \"542128\": \"左贡县\",\n\t \"542129\": \"芒康县\",\n\t \"542132\": \"洛隆县\",\n\t \"542133\": \"边坝县\",\n\t \"542134\": \"其它区\",\n\t \"542200\": \"山南地区\",\n\t \"542221\": \"乃东县\",\n\t \"542222\": \"扎囊县\",\n\t \"542223\": \"贡嘎县\",\n\t \"542224\": \"桑日县\",\n\t \"542225\": \"琼结县\",\n\t \"542226\": \"曲松县\",\n\t \"542227\": \"措美县\",\n\t \"542228\": \"洛扎县\",\n\t \"542229\": \"加查县\",\n\t \"542231\": \"隆子县\",\n\t \"542232\": \"错那县\",\n\t \"542233\": \"浪卡子县\",\n\t \"542234\": \"其它区\",\n\t \"542300\": \"日喀则地区\",\n\t \"542301\": \"日喀则市\",\n\t \"542322\": \"南木林县\",\n\t \"542323\": \"江孜县\",\n\t \"542324\": \"定日县\",\n\t \"542325\": \"萨迦县\",\n\t \"542326\": \"拉孜县\",\n\t \"542327\": \"昂仁县\",\n\t \"542328\": \"谢通门县\",\n\t \"542329\": \"白朗县\",\n\t \"542330\": \"仁布县\",\n\t \"542331\": \"康马县\",\n\t \"542332\": \"定结县\",\n\t \"542333\": \"仲巴县\",\n\t \"542334\": \"亚东县\",\n\t \"542335\": \"吉隆县\",\n\t \"542336\": \"聂拉木县\",\n\t \"542337\": \"萨嘎县\",\n\t \"542338\": \"岗巴县\",\n\t \"542339\": \"其它区\",\n\t \"542400\": \"那曲地区\",\n\t \"542421\": \"那曲县\",\n\t \"542422\": \"嘉黎县\",\n\t \"542423\": \"比如县\",\n\t \"542424\": \"聂荣县\",\n\t \"542425\": \"安多县\",\n\t \"542426\": \"申扎县\",\n\t \"542427\": \"索县\",\n\t \"542428\": \"班戈县\",\n\t \"542429\": \"巴青县\",\n\t \"542430\": \"尼玛县\",\n\t \"542431\": \"其它区\",\n\t \"542432\": \"双湖县\",\n\t \"542500\": \"阿里地区\",\n\t \"542521\": \"普兰县\",\n\t \"542522\": \"札达县\",\n\t \"542523\": \"噶尔县\",\n\t \"542524\": \"日土县\",\n\t \"542525\": \"革吉县\",\n\t \"542526\": \"改则县\",\n\t \"542527\": \"措勤县\",\n\t \"542528\": \"其它区\",\n\t \"542600\": \"林芝地区\",\n\t \"542621\": \"林芝县\",\n\t \"542622\": \"工布江达县\",\n\t \"542623\": \"米林县\",\n\t \"542624\": \"墨脱县\",\n\t \"542625\": \"波密县\",\n\t \"542626\": \"察隅县\",\n\t \"542627\": \"朗县\",\n\t \"542628\": \"其它区\",\n\t \"610000\": \"陕西省\",\n\t \"610100\": \"西安市\",\n\t \"610102\": \"新城区\",\n\t \"610103\": \"碑林区\",\n\t \"610104\": \"莲湖区\",\n\t \"610111\": \"灞桥区\",\n\t \"610112\": \"未央区\",\n\t \"610113\": \"雁塔区\",\n\t \"610114\": \"阎良区\",\n\t \"610115\": \"临潼区\",\n\t \"610116\": \"长安区\",\n\t \"610122\": \"蓝田县\",\n\t \"610124\": \"周至县\",\n\t \"610125\": \"户县\",\n\t \"610126\": \"高陵县\",\n\t \"610127\": \"其它区\",\n\t \"610200\": \"铜川市\",\n\t \"610202\": \"王益区\",\n\t \"610203\": \"印台区\",\n\t \"610204\": \"耀州区\",\n\t \"610222\": \"宜君县\",\n\t \"610223\": \"其它区\",\n\t \"610300\": \"宝鸡市\",\n\t \"610302\": \"渭滨区\",\n\t \"610303\": \"金台区\",\n\t \"610304\": \"陈仓区\",\n\t \"610322\": \"凤翔县\",\n\t \"610323\": \"岐山县\",\n\t \"610324\": \"扶风县\",\n\t \"610326\": \"眉县\",\n\t \"610327\": \"陇县\",\n\t \"610328\": \"千阳县\",\n\t \"610329\": \"麟游县\",\n\t \"610330\": \"凤县\",\n\t \"610331\": \"太白县\",\n\t \"610332\": \"其它区\",\n\t \"610400\": \"咸阳市\",\n\t \"610402\": \"秦都区\",\n\t \"610403\": \"杨陵区\",\n\t \"610404\": \"渭城区\",\n\t \"610422\": \"三原县\",\n\t \"610423\": \"泾阳县\",\n\t \"610424\": \"乾县\",\n\t \"610425\": \"礼泉县\",\n\t \"610426\": \"永寿县\",\n\t \"610427\": \"彬县\",\n\t \"610428\": \"长武县\",\n\t \"610429\": \"旬邑县\",\n\t \"610430\": \"淳化县\",\n\t \"610431\": \"武功县\",\n\t \"610481\": \"兴平市\",\n\t \"610482\": \"其它区\",\n\t \"610500\": \"渭南市\",\n\t \"610502\": \"临渭区\",\n\t \"610521\": \"华县\",\n\t \"610522\": \"潼关县\",\n\t \"610523\": \"大荔县\",\n\t \"610524\": \"合阳县\",\n\t \"610525\": \"澄城县\",\n\t \"610526\": \"蒲城县\",\n\t \"610527\": \"白水县\",\n\t \"610528\": \"富平县\",\n\t \"610581\": \"韩城市\",\n\t \"610582\": \"华阴市\",\n\t \"610583\": \"其它区\",\n\t \"610600\": \"延安市\",\n\t \"610602\": \"宝塔区\",\n\t \"610621\": \"延长县\",\n\t \"610622\": \"延川县\",\n\t \"610623\": \"子长县\",\n\t \"610624\": \"安塞县\",\n\t \"610625\": \"志丹县\",\n\t \"610626\": \"吴起县\",\n\t \"610627\": \"甘泉县\",\n\t \"610628\": \"富县\",\n\t \"610629\": \"洛川县\",\n\t \"610630\": \"宜川县\",\n\t \"610631\": \"黄龙县\",\n\t \"610632\": \"黄陵县\",\n\t \"610633\": \"其它区\",\n\t \"610700\": \"汉中市\",\n\t \"610702\": \"汉台区\",\n\t \"610721\": \"南郑县\",\n\t \"610722\": \"城固县\",\n\t \"610723\": \"洋县\",\n\t \"610724\": \"西乡县\",\n\t \"610725\": \"勉县\",\n\t \"610726\": \"宁强县\",\n\t \"610727\": \"略阳县\",\n\t \"610728\": \"镇巴县\",\n\t \"610729\": \"留坝县\",\n\t \"610730\": \"佛坪县\",\n\t \"610731\": \"其它区\",\n\t \"610800\": \"榆林市\",\n\t \"610802\": \"榆阳区\",\n\t \"610821\": \"神木县\",\n\t \"610822\": \"府谷县\",\n\t \"610823\": \"横山县\",\n\t \"610824\": \"靖边县\",\n\t \"610825\": \"定边县\",\n\t \"610826\": \"绥德县\",\n\t \"610827\": \"米脂县\",\n\t \"610828\": \"佳县\",\n\t \"610829\": \"吴堡县\",\n\t \"610830\": \"清涧县\",\n\t \"610831\": \"子洲县\",\n\t \"610832\": \"其它区\",\n\t \"610900\": \"安康市\",\n\t \"610902\": \"汉滨区\",\n\t \"610921\": \"汉阴县\",\n\t \"610922\": \"石泉县\",\n\t \"610923\": \"宁陕县\",\n\t \"610924\": \"紫阳县\",\n\t \"610925\": \"岚皋县\",\n\t \"610926\": \"平利县\",\n\t \"610927\": \"镇坪县\",\n\t \"610928\": \"旬阳县\",\n\t \"610929\": \"白河县\",\n\t \"610930\": \"其它区\",\n\t \"611000\": \"商洛市\",\n\t \"611002\": \"商州区\",\n\t \"611021\": \"洛南县\",\n\t \"611022\": \"丹凤县\",\n\t \"611023\": \"商南县\",\n\t \"611024\": \"山阳县\",\n\t \"611025\": \"镇安县\",\n\t \"611026\": \"柞水县\",\n\t \"611027\": \"其它区\",\n\t \"620000\": \"甘肃省\",\n\t \"620100\": \"兰州市\",\n\t \"620102\": \"城关区\",\n\t \"620103\": \"七里河区\",\n\t \"620104\": \"西固区\",\n\t \"620105\": \"安宁区\",\n\t \"620111\": \"红古区\",\n\t \"620121\": \"永登县\",\n\t \"620122\": \"皋兰县\",\n\t \"620123\": \"榆中县\",\n\t \"620124\": \"其它区\",\n\t \"620200\": \"嘉峪关市\",\n\t \"620300\": \"金昌市\",\n\t \"620302\": \"金川区\",\n\t \"620321\": \"永昌县\",\n\t \"620322\": \"其它区\",\n\t \"620400\": \"白银市\",\n\t \"620402\": \"白银区\",\n\t \"620403\": \"平川区\",\n\t \"620421\": \"靖远县\",\n\t \"620422\": \"会宁县\",\n\t \"620423\": \"景泰县\",\n\t \"620424\": \"其它区\",\n\t \"620500\": \"天水市\",\n\t \"620502\": \"秦州区\",\n\t \"620503\": \"麦积区\",\n\t \"620521\": \"清水县\",\n\t \"620522\": \"秦安县\",\n\t \"620523\": \"甘谷县\",\n\t \"620524\": \"武山县\",\n\t \"620525\": \"张家川回族自治县\",\n\t \"620526\": \"其它区\",\n\t \"620600\": \"武威市\",\n\t \"620602\": \"凉州区\",\n\t \"620621\": \"民勤县\",\n\t \"620622\": \"古浪县\",\n\t \"620623\": \"天祝藏族自治县\",\n\t \"620624\": \"其它区\",\n\t \"620700\": \"张掖市\",\n\t \"620702\": \"甘州区\",\n\t \"620721\": \"肃南裕固族自治县\",\n\t \"620722\": \"民乐县\",\n\t \"620723\": \"临泽县\",\n\t \"620724\": \"高台县\",\n\t \"620725\": \"山丹县\",\n\t \"620726\": \"其它区\",\n\t \"620800\": \"平凉市\",\n\t \"620802\": \"崆峒区\",\n\t \"620821\": \"泾川县\",\n\t \"620822\": \"灵台县\",\n\t \"620823\": \"崇信县\",\n\t \"620824\": \"华亭县\",\n\t \"620825\": \"庄浪县\",\n\t \"620826\": \"静宁县\",\n\t \"620827\": \"其它区\",\n\t \"620900\": \"酒泉市\",\n\t \"620902\": \"肃州区\",\n\t \"620921\": \"金塔县\",\n\t \"620922\": \"瓜州县\",\n\t \"620923\": \"肃北蒙古族自治县\",\n\t \"620924\": \"阿克塞哈萨克族自治县\",\n\t \"620981\": \"玉门市\",\n\t \"620982\": \"敦煌市\",\n\t \"620983\": \"其它区\",\n\t \"621000\": \"庆阳市\",\n\t \"621002\": \"西峰区\",\n\t \"621021\": \"庆城县\",\n\t \"621022\": \"环县\",\n\t \"621023\": \"华池县\",\n\t \"621024\": \"合水县\",\n\t \"621025\": \"正宁县\",\n\t \"621026\": \"宁县\",\n\t \"621027\": \"镇原县\",\n\t \"621028\": \"其它区\",\n\t \"621100\": \"定西市\",\n\t \"621102\": \"安定区\",\n\t \"621121\": \"通渭县\",\n\t \"621122\": \"陇西县\",\n\t \"621123\": \"渭源县\",\n\t \"621124\": \"临洮县\",\n\t \"621125\": \"漳县\",\n\t \"621126\": \"岷县\",\n\t \"621127\": \"其它区\",\n\t \"621200\": \"陇南市\",\n\t \"621202\": \"武都区\",\n\t \"621221\": \"成县\",\n\t \"621222\": \"文县\",\n\t \"621223\": \"宕昌县\",\n\t \"621224\": \"康县\",\n\t \"621225\": \"西和县\",\n\t \"621226\": \"礼县\",\n\t \"621227\": \"徽县\",\n\t \"621228\": \"两当县\",\n\t \"621229\": \"其它区\",\n\t \"622900\": \"临夏回族自治州\",\n\t \"622901\": \"临夏市\",\n\t \"622921\": \"临夏县\",\n\t \"622922\": \"康乐县\",\n\t \"622923\": \"永靖县\",\n\t \"622924\": \"广河县\",\n\t \"622925\": \"和政县\",\n\t \"622926\": \"东乡族自治县\",\n\t \"622927\": \"积石山保安族东乡族撒拉族自治县\",\n\t \"622928\": \"其它区\",\n\t \"623000\": \"甘南藏族自治州\",\n\t \"623001\": \"合作市\",\n\t \"623021\": \"临潭县\",\n\t \"623022\": \"卓尼县\",\n\t \"623023\": \"舟曲县\",\n\t \"623024\": \"迭部县\",\n\t \"623025\": \"玛曲县\",\n\t \"623026\": \"碌曲县\",\n\t \"623027\": \"夏河县\",\n\t \"623028\": \"其它区\",\n\t \"630000\": \"青海省\",\n\t \"630100\": \"西宁市\",\n\t \"630102\": \"城东区\",\n\t \"630103\": \"城中区\",\n\t \"630104\": \"城西区\",\n\t \"630105\": \"城北区\",\n\t \"630121\": \"大通回族土族自治县\",\n\t \"630122\": \"湟中县\",\n\t \"630123\": \"湟源县\",\n\t \"630124\": \"其它区\",\n\t \"632100\": \"海东市\",\n\t \"632121\": \"平安县\",\n\t \"632122\": \"民和回族土族自治县\",\n\t \"632123\": \"乐都区\",\n\t \"632126\": \"互助土族自治县\",\n\t \"632127\": \"化隆回族自治县\",\n\t \"632128\": \"循化撒拉族自治县\",\n\t \"632129\": \"其它区\",\n\t \"632200\": \"海北藏族自治州\",\n\t \"632221\": \"门源回族自治县\",\n\t \"632222\": \"祁连县\",\n\t \"632223\": \"海晏县\",\n\t \"632224\": \"刚察县\",\n\t \"632225\": \"其它区\",\n\t \"632300\": \"黄南藏族自治州\",\n\t \"632321\": \"同仁县\",\n\t \"632322\": \"尖扎县\",\n\t \"632323\": \"泽库县\",\n\t \"632324\": \"河南蒙古族自治县\",\n\t \"632325\": \"其它区\",\n\t \"632500\": \"海南藏族自治州\",\n\t \"632521\": \"共和县\",\n\t \"632522\": \"同德县\",\n\t \"632523\": \"贵德县\",\n\t \"632524\": \"兴海县\",\n\t \"632525\": \"贵南县\",\n\t \"632526\": \"其它区\",\n\t \"632600\": \"果洛藏族自治州\",\n\t \"632621\": \"玛沁县\",\n\t \"632622\": \"班玛县\",\n\t \"632623\": \"甘德县\",\n\t \"632624\": \"达日县\",\n\t \"632625\": \"久治县\",\n\t \"632626\": \"玛多县\",\n\t \"632627\": \"其它区\",\n\t \"632700\": \"玉树藏族自治州\",\n\t \"632721\": \"玉树市\",\n\t \"632722\": \"杂多县\",\n\t \"632723\": \"称多县\",\n\t \"632724\": \"治多县\",\n\t \"632725\": \"囊谦县\",\n\t \"632726\": \"曲麻莱县\",\n\t \"632727\": \"其它区\",\n\t \"632800\": \"海西蒙古族藏族自治州\",\n\t \"632801\": \"格尔木市\",\n\t \"632802\": \"德令哈市\",\n\t \"632821\": \"乌兰县\",\n\t \"632822\": \"都兰县\",\n\t \"632823\": \"天峻县\",\n\t \"632824\": \"其它区\",\n\t \"640000\": \"宁夏回族自治区\",\n\t \"640100\": \"银川市\",\n\t \"640104\": \"兴庆区\",\n\t \"640105\": \"西夏区\",\n\t \"640106\": \"金凤区\",\n\t \"640121\": \"永宁县\",\n\t \"640122\": \"贺兰县\",\n\t \"640181\": \"灵武市\",\n\t \"640182\": \"其它区\",\n\t \"640200\": \"石嘴山市\",\n\t \"640202\": \"大武口区\",\n\t \"640205\": \"惠农区\",\n\t \"640221\": \"平罗县\",\n\t \"640222\": \"其它区\",\n\t \"640300\": \"吴忠市\",\n\t \"640302\": \"利通区\",\n\t \"640303\": \"红寺堡区\",\n\t \"640323\": \"盐池县\",\n\t \"640324\": \"同心县\",\n\t \"640381\": \"青铜峡市\",\n\t \"640382\": \"其它区\",\n\t \"640400\": \"固原市\",\n\t \"640402\": \"原州区\",\n\t \"640422\": \"西吉县\",\n\t \"640423\": \"隆德县\",\n\t \"640424\": \"泾源县\",\n\t \"640425\": \"彭阳县\",\n\t \"640426\": \"其它区\",\n\t \"640500\": \"中卫市\",\n\t \"640502\": \"沙坡头区\",\n\t \"640521\": \"中宁县\",\n\t \"640522\": \"海原县\",\n\t \"640523\": \"其它区\",\n\t \"650000\": \"新疆维吾尔自治区\",\n\t \"650100\": \"乌鲁木齐市\",\n\t \"650102\": \"天山区\",\n\t \"650103\": \"沙依巴克区\",\n\t \"650104\": \"新市区\",\n\t \"650105\": \"水磨沟区\",\n\t \"650106\": \"头屯河区\",\n\t \"650107\": \"达坂城区\",\n\t \"650109\": \"米东区\",\n\t \"650121\": \"乌鲁木齐县\",\n\t \"650122\": \"其它区\",\n\t \"650200\": \"克拉玛依市\",\n\t \"650202\": \"独山子区\",\n\t \"650203\": \"克拉玛依区\",\n\t \"650204\": \"白碱滩区\",\n\t \"650205\": \"乌尔禾区\",\n\t \"650206\": \"其它区\",\n\t \"652100\": \"吐鲁番地区\",\n\t \"652101\": \"吐鲁番市\",\n\t \"652122\": \"鄯善县\",\n\t \"652123\": \"托克逊县\",\n\t \"652124\": \"其它区\",\n\t \"652200\": \"哈密地区\",\n\t \"652201\": \"哈密市\",\n\t \"652222\": \"巴里坤哈萨克自治县\",\n\t \"652223\": \"伊吾县\",\n\t \"652224\": \"其它区\",\n\t \"652300\": \"昌吉回族自治州\",\n\t \"652301\": \"昌吉市\",\n\t \"652302\": \"阜康市\",\n\t \"652323\": \"呼图壁县\",\n\t \"652324\": \"玛纳斯县\",\n\t \"652325\": \"奇台县\",\n\t \"652327\": \"吉木萨尔县\",\n\t \"652328\": \"木垒哈萨克自治县\",\n\t \"652329\": \"其它区\",\n\t \"652700\": \"博尔塔拉蒙古自治州\",\n\t \"652701\": \"博乐市\",\n\t \"652702\": \"阿拉山口市\",\n\t \"652722\": \"精河县\",\n\t \"652723\": \"温泉县\",\n\t \"652724\": \"其它区\",\n\t \"652800\": \"巴音郭楞蒙古自治州\",\n\t \"652801\": \"库尔勒市\",\n\t \"652822\": \"轮台县\",\n\t \"652823\": \"尉犁县\",\n\t \"652824\": \"若羌县\",\n\t \"652825\": \"且末县\",\n\t \"652826\": \"焉耆回族自治县\",\n\t \"652827\": \"和静县\",\n\t \"652828\": \"和硕县\",\n\t \"652829\": \"博湖县\",\n\t \"652830\": \"其它区\",\n\t \"652900\": \"阿克苏地区\",\n\t \"652901\": \"阿克苏市\",\n\t \"652922\": \"温宿县\",\n\t \"652923\": \"库车县\",\n\t \"652924\": \"沙雅县\",\n\t \"652925\": \"新和县\",\n\t \"652926\": \"拜城县\",\n\t \"652927\": \"乌什县\",\n\t \"652928\": \"阿瓦提县\",\n\t \"652929\": \"柯坪县\",\n\t \"652930\": \"其它区\",\n\t \"653000\": \"克孜勒苏柯尔克孜自治州\",\n\t \"653001\": \"阿图什市\",\n\t \"653022\": \"阿克陶县\",\n\t \"653023\": \"阿合奇县\",\n\t \"653024\": \"乌恰县\",\n\t \"653025\": \"其它区\",\n\t \"653100\": \"喀什地区\",\n\t \"653101\": \"喀什市\",\n\t \"653121\": \"疏附县\",\n\t \"653122\": \"疏勒县\",\n\t \"653123\": \"英吉沙县\",\n\t \"653124\": \"泽普县\",\n\t \"653125\": \"莎车县\",\n\t \"653126\": \"叶城县\",\n\t \"653127\": \"麦盖提县\",\n\t \"653128\": \"岳普湖县\",\n\t \"653129\": \"伽师县\",\n\t \"653130\": \"巴楚县\",\n\t \"653131\": \"塔什库尔干塔吉克自治县\",\n\t \"653132\": \"其它区\",\n\t \"653200\": \"和田地区\",\n\t \"653201\": \"和田市\",\n\t \"653221\": \"和田县\",\n\t \"653222\": \"墨玉县\",\n\t \"653223\": \"皮山县\",\n\t \"653224\": \"洛浦县\",\n\t \"653225\": \"策勒县\",\n\t \"653226\": \"于田县\",\n\t \"653227\": \"民丰县\",\n\t \"653228\": \"其它区\",\n\t \"654000\": \"伊犁哈萨克自治州\",\n\t \"654002\": \"伊宁市\",\n\t \"654003\": \"奎屯市\",\n\t \"654021\": \"伊宁县\",\n\t \"654022\": \"察布查尔锡伯自治县\",\n\t \"654023\": \"霍城县\",\n\t \"654024\": \"巩留县\",\n\t \"654025\": \"新源县\",\n\t \"654026\": \"昭苏县\",\n\t \"654027\": \"特克斯县\",\n\t \"654028\": \"尼勒克县\",\n\t \"654029\": \"其它区\",\n\t \"654200\": \"塔城地区\",\n\t \"654201\": \"塔城市\",\n\t \"654202\": \"乌苏市\",\n\t \"654221\": \"额敏县\",\n\t \"654223\": \"沙湾县\",\n\t \"654224\": \"托里县\",\n\t \"654225\": \"裕民县\",\n\t \"654226\": \"和布克赛尔蒙古自治县\",\n\t \"654227\": \"其它区\",\n\t \"654300\": \"阿勒泰地区\",\n\t \"654301\": \"阿勒泰市\",\n\t \"654321\": \"布尔津县\",\n\t \"654322\": \"富蕴县\",\n\t \"654323\": \"福海县\",\n\t \"654324\": \"哈巴河县\",\n\t \"654325\": \"青河县\",\n\t \"654326\": \"吉木乃县\",\n\t \"654327\": \"其它区\",\n\t \"659001\": \"石河子市\",\n\t \"659002\": \"阿拉尔市\",\n\t \"659003\": \"图木舒克市\",\n\t \"659004\": \"五家渠市\",\n\t \"710000\": \"台湾\",\n\t \"710100\": \"台北市\",\n\t \"710101\": \"中正区\",\n\t \"710102\": \"大同区\",\n\t \"710103\": \"中山区\",\n\t \"710104\": \"松山区\",\n\t \"710105\": \"大安区\",\n\t \"710106\": \"万华区\",\n\t \"710107\": \"信义区\",\n\t \"710108\": \"士林区\",\n\t \"710109\": \"北投区\",\n\t \"710110\": \"内湖区\",\n\t \"710111\": \"南港区\",\n\t \"710112\": \"文山区\",\n\t \"710113\": \"其它区\",\n\t \"710200\": \"高雄市\",\n\t \"710201\": \"新兴区\",\n\t \"710202\": \"前金区\",\n\t \"710203\": \"芩雅区\",\n\t \"710204\": \"盐埕区\",\n\t \"710205\": \"鼓山区\",\n\t \"710206\": \"旗津区\",\n\t \"710207\": \"前镇区\",\n\t \"710208\": \"三民区\",\n\t \"710209\": \"左营区\",\n\t \"710210\": \"楠梓区\",\n\t \"710211\": \"小港区\",\n\t \"710212\": \"其它区\",\n\t \"710241\": \"苓雅区\",\n\t \"710242\": \"仁武区\",\n\t \"710243\": \"大社区\",\n\t \"710244\": \"冈山区\",\n\t \"710245\": \"路竹区\",\n\t \"710246\": \"阿莲区\",\n\t \"710247\": \"田寮区\",\n\t \"710248\": \"燕巢区\",\n\t \"710249\": \"桥头区\",\n\t \"710250\": \"梓官区\",\n\t \"710251\": \"弥陀区\",\n\t \"710252\": \"永安区\",\n\t \"710253\": \"湖内区\",\n\t \"710254\": \"凤山区\",\n\t \"710255\": \"大寮区\",\n\t \"710256\": \"林园区\",\n\t \"710257\": \"鸟松区\",\n\t \"710258\": \"大树区\",\n\t \"710259\": \"旗山区\",\n\t \"710260\": \"美浓区\",\n\t \"710261\": \"六龟区\",\n\t \"710262\": \"内门区\",\n\t \"710263\": \"杉林区\",\n\t \"710264\": \"甲仙区\",\n\t \"710265\": \"桃源区\",\n\t \"710266\": \"那玛夏区\",\n\t \"710267\": \"茂林区\",\n\t \"710268\": \"茄萣区\",\n\t \"710300\": \"台南市\",\n\t \"710301\": \"中西区\",\n\t \"710302\": \"东区\",\n\t \"710303\": \"南区\",\n\t \"710304\": \"北区\",\n\t \"710305\": \"安平区\",\n\t \"710306\": \"安南区\",\n\t \"710307\": \"其它区\",\n\t \"710339\": \"永康区\",\n\t \"710340\": \"归仁区\",\n\t \"710341\": \"新化区\",\n\t \"710342\": \"左镇区\",\n\t \"710343\": \"玉井区\",\n\t \"710344\": \"楠西区\",\n\t \"710345\": \"南化区\",\n\t \"710346\": \"仁德区\",\n\t \"710347\": \"关庙区\",\n\t \"710348\": \"龙崎区\",\n\t \"710349\": \"官田区\",\n\t \"710350\": \"麻豆区\",\n\t \"710351\": \"佳里区\",\n\t \"710352\": \"西港区\",\n\t \"710353\": \"七股区\",\n\t \"710354\": \"将军区\",\n\t \"710355\": \"学甲区\",\n\t \"710356\": \"北门区\",\n\t \"710357\": \"新营区\",\n\t \"710358\": \"后壁区\",\n\t \"710359\": \"白河区\",\n\t \"710360\": \"东山区\",\n\t \"710361\": \"六甲区\",\n\t \"710362\": \"下营区\",\n\t \"710363\": \"柳营区\",\n\t \"710364\": \"盐水区\",\n\t \"710365\": \"善化区\",\n\t \"710366\": \"大内区\",\n\t \"710367\": \"山上区\",\n\t \"710368\": \"新市区\",\n\t \"710369\": \"安定区\",\n\t \"710400\": \"台中市\",\n\t \"710401\": \"中区\",\n\t \"710402\": \"东区\",\n\t \"710403\": \"南区\",\n\t \"710404\": \"西区\",\n\t \"710405\": \"北区\",\n\t \"710406\": \"北屯区\",\n\t \"710407\": \"西屯区\",\n\t \"710408\": \"南屯区\",\n\t \"710409\": \"其它区\",\n\t \"710431\": \"太平区\",\n\t \"710432\": \"大里区\",\n\t \"710433\": \"雾峰区\",\n\t \"710434\": \"乌日区\",\n\t \"710435\": \"丰原区\",\n\t \"710436\": \"后里区\",\n\t \"710437\": \"石冈区\",\n\t \"710438\": \"东势区\",\n\t \"710439\": \"和平区\",\n\t \"710440\": \"新社区\",\n\t \"710441\": \"潭子区\",\n\t \"710442\": \"大雅区\",\n\t \"710443\": \"神冈区\",\n\t \"710444\": \"大肚区\",\n\t \"710445\": \"沙鹿区\",\n\t \"710446\": \"龙井区\",\n\t \"710447\": \"梧栖区\",\n\t \"710448\": \"清水区\",\n\t \"710449\": \"大甲区\",\n\t \"710450\": \"外埔区\",\n\t \"710451\": \"大安区\",\n\t \"710500\": \"金门县\",\n\t \"710507\": \"金沙镇\",\n\t \"710508\": \"金湖镇\",\n\t \"710509\": \"金宁乡\",\n\t \"710510\": \"金城镇\",\n\t \"710511\": \"烈屿乡\",\n\t \"710512\": \"乌坵乡\",\n\t \"710600\": \"南投县\",\n\t \"710614\": \"南投市\",\n\t \"710615\": \"中寮乡\",\n\t \"710616\": \"草屯镇\",\n\t \"710617\": \"国姓乡\",\n\t \"710618\": \"埔里镇\",\n\t \"710619\": \"仁爱乡\",\n\t \"710620\": \"名间乡\",\n\t \"710621\": \"集集镇\",\n\t \"710622\": \"水里乡\",\n\t \"710623\": \"鱼池乡\",\n\t \"710624\": \"信义乡\",\n\t \"710625\": \"竹山镇\",\n\t \"710626\": \"鹿谷乡\",\n\t \"710700\": \"基隆市\",\n\t \"710701\": \"仁爱区\",\n\t \"710702\": \"信义区\",\n\t \"710703\": \"中正区\",\n\t \"710704\": \"中山区\",\n\t \"710705\": \"安乐区\",\n\t \"710706\": \"暖暖区\",\n\t \"710707\": \"七堵区\",\n\t \"710708\": \"其它区\",\n\t \"710800\": \"新竹市\",\n\t \"710801\": \"东区\",\n\t \"710802\": \"北区\",\n\t \"710803\": \"香山区\",\n\t \"710804\": \"其它区\",\n\t \"710900\": \"嘉义市\",\n\t \"710901\": \"东区\",\n\t \"710902\": \"西区\",\n\t \"710903\": \"其它区\",\n\t \"711100\": \"新北市\",\n\t \"711130\": \"万里区\",\n\t \"711131\": \"金山区\",\n\t \"711132\": \"板桥区\",\n\t \"711133\": \"汐止区\",\n\t \"711134\": \"深坑区\",\n\t \"711135\": \"石碇区\",\n\t \"711136\": \"瑞芳区\",\n\t \"711137\": \"平溪区\",\n\t \"711138\": \"双溪区\",\n\t \"711139\": \"贡寮区\",\n\t \"711140\": \"新店区\",\n\t \"711141\": \"坪林区\",\n\t \"711142\": \"乌来区\",\n\t \"711143\": \"永和区\",\n\t \"711144\": \"中和区\",\n\t \"711145\": \"土城区\",\n\t \"711146\": \"三峡区\",\n\t \"711147\": \"树林区\",\n\t \"711148\": \"莺歌区\",\n\t \"711149\": \"三重区\",\n\t \"711150\": \"新庄区\",\n\t \"711151\": \"泰山区\",\n\t \"711152\": \"林口区\",\n\t \"711153\": \"芦洲区\",\n\t \"711154\": \"五股区\",\n\t \"711155\": \"八里区\",\n\t \"711156\": \"淡水区\",\n\t \"711157\": \"三芝区\",\n\t \"711158\": \"石门区\",\n\t \"711200\": \"宜兰县\",\n\t \"711214\": \"宜兰市\",\n\t \"711215\": \"头城镇\",\n\t \"711216\": \"礁溪乡\",\n\t \"711217\": \"壮围乡\",\n\t \"711218\": \"员山乡\",\n\t \"711219\": \"罗东镇\",\n\t \"711220\": \"三星乡\",\n\t \"711221\": \"大同乡\",\n\t \"711222\": \"五结乡\",\n\t \"711223\": \"冬山乡\",\n\t \"711224\": \"苏澳镇\",\n\t \"711225\": \"南澳乡\",\n\t \"711226\": \"钓鱼台\",\n\t \"711300\": \"新竹县\",\n\t \"711314\": \"竹北市\",\n\t \"711315\": \"湖口乡\",\n\t \"711316\": \"新丰乡\",\n\t \"711317\": \"新埔镇\",\n\t \"711318\": \"关西镇\",\n\t \"711319\": \"芎林乡\",\n\t \"711320\": \"宝山乡\",\n\t \"711321\": \"竹东镇\",\n\t \"711322\": \"五峰乡\",\n\t \"711323\": \"横山乡\",\n\t \"711324\": \"尖石乡\",\n\t \"711325\": \"北埔乡\",\n\t \"711326\": \"峨眉乡\",\n\t \"711400\": \"桃园县\",\n\t \"711414\": \"中坜市\",\n\t \"711415\": \"平镇市\",\n\t \"711416\": \"龙潭乡\",\n\t \"711417\": \"杨梅市\",\n\t \"711418\": \"新屋乡\",\n\t \"711419\": \"观音乡\",\n\t \"711420\": \"桃园市\",\n\t \"711421\": \"龟山乡\",\n\t \"711422\": \"八德市\",\n\t \"711423\": \"大溪镇\",\n\t \"711424\": \"复兴乡\",\n\t \"711425\": \"大园乡\",\n\t \"711426\": \"芦竹乡\",\n\t \"711500\": \"苗栗县\",\n\t \"711519\": \"竹南镇\",\n\t \"711520\": \"头份镇\",\n\t \"711521\": \"三湾乡\",\n\t \"711522\": \"南庄乡\",\n\t \"711523\": \"狮潭乡\",\n\t \"711524\": \"后龙镇\",\n\t \"711525\": \"通霄镇\",\n\t \"711526\": \"苑里镇\",\n\t \"711527\": \"苗栗市\",\n\t \"711528\": \"造桥乡\",\n\t \"711529\": \"头屋乡\",\n\t \"711530\": \"公馆乡\",\n\t \"711531\": \"大湖乡\",\n\t \"711532\": \"泰安乡\",\n\t \"711533\": \"铜锣乡\",\n\t \"711534\": \"三义乡\",\n\t \"711535\": \"西湖乡\",\n\t \"711536\": \"卓兰镇\",\n\t \"711700\": \"彰化县\",\n\t \"711727\": \"彰化市\",\n\t \"711728\": \"芬园乡\",\n\t \"711729\": \"花坛乡\",\n\t \"711730\": \"秀水乡\",\n\t \"711731\": \"鹿港镇\",\n\t \"711732\": \"福兴乡\",\n\t \"711733\": \"线西乡\",\n\t \"711734\": \"和美镇\",\n\t \"711735\": \"伸港乡\",\n\t \"711736\": \"员林镇\",\n\t \"711737\": \"社头乡\",\n\t \"711738\": \"永靖乡\",\n\t \"711739\": \"埔心乡\",\n\t \"711740\": \"溪湖镇\",\n\t \"711741\": \"大村乡\",\n\t \"711742\": \"埔盐乡\",\n\t \"711743\": \"田中镇\",\n\t \"711744\": \"北斗镇\",\n\t \"711745\": \"田尾乡\",\n\t \"711746\": \"埤头乡\",\n\t \"711747\": \"溪州乡\",\n\t \"711748\": \"竹塘乡\",\n\t \"711749\": \"二林镇\",\n\t \"711750\": \"大城乡\",\n\t \"711751\": \"芳苑乡\",\n\t \"711752\": \"二水乡\",\n\t \"711900\": \"嘉义县\",\n\t \"711919\": \"番路乡\",\n\t \"711920\": \"梅山乡\",\n\t \"711921\": \"竹崎乡\",\n\t \"711922\": \"阿里山乡\",\n\t \"711923\": \"中埔乡\",\n\t \"711924\": \"大埔乡\",\n\t \"711925\": \"水上乡\",\n\t \"711926\": \"鹿草乡\",\n\t \"711927\": \"太保市\",\n\t \"711928\": \"朴子市\",\n\t \"711929\": \"东石乡\",\n\t \"711930\": \"六脚乡\",\n\t \"711931\": \"新港乡\",\n\t \"711932\": \"民雄乡\",\n\t \"711933\": \"大林镇\",\n\t \"711934\": \"溪口乡\",\n\t \"711935\": \"义竹乡\",\n\t \"711936\": \"布袋镇\",\n\t \"712100\": \"云林县\",\n\t \"712121\": \"斗南镇\",\n\t \"712122\": \"大埤乡\",\n\t \"712123\": \"虎尾镇\",\n\t \"712124\": \"土库镇\",\n\t \"712125\": \"褒忠乡\",\n\t \"712126\": \"东势乡\",\n\t \"712127\": \"台西乡\",\n\t \"712128\": \"仑背乡\",\n\t \"712129\": \"麦寮乡\",\n\t \"712130\": \"斗六市\",\n\t \"712131\": \"林内乡\",\n\t \"712132\": \"古坑乡\",\n\t \"712133\": \"莿桐乡\",\n\t \"712134\": \"西螺镇\",\n\t \"712135\": \"二仑乡\",\n\t \"712136\": \"北港镇\",\n\t \"712137\": \"水林乡\",\n\t \"712138\": \"口湖乡\",\n\t \"712139\": \"四湖乡\",\n\t \"712140\": \"元长乡\",\n\t \"712400\": \"屏东县\",\n\t \"712434\": \"屏东市\",\n\t \"712435\": \"三地门乡\",\n\t \"712436\": \"雾台乡\",\n\t \"712437\": \"玛家乡\",\n\t \"712438\": \"九如乡\",\n\t \"712439\": \"里港乡\",\n\t \"712440\": \"高树乡\",\n\t \"712441\": \"盐埔乡\",\n\t \"712442\": \"长治乡\",\n\t \"712443\": \"麟洛乡\",\n\t \"712444\": \"竹田乡\",\n\t \"712445\": \"内埔乡\",\n\t \"712446\": \"万丹乡\",\n\t \"712447\": \"潮州镇\",\n\t \"712448\": \"泰武乡\",\n\t \"712449\": \"来义乡\",\n\t \"712450\": \"万峦乡\",\n\t \"712451\": \"崁顶乡\",\n\t \"712452\": \"新埤乡\",\n\t \"712453\": \"南州乡\",\n\t \"712454\": \"林边乡\",\n\t \"712455\": \"东港镇\",\n\t \"712456\": \"琉球乡\",\n\t \"712457\": \"佳冬乡\",\n\t \"712458\": \"新园乡\",\n\t \"712459\": \"枋寮乡\",\n\t \"712460\": \"枋山乡\",\n\t \"712461\": \"春日乡\",\n\t \"712462\": \"狮子乡\",\n\t \"712463\": \"车城乡\",\n\t \"712464\": \"牡丹乡\",\n\t \"712465\": \"恒春镇\",\n\t \"712466\": \"满州乡\",\n\t \"712500\": \"台东县\",\n\t \"712517\": \"台东市\",\n\t \"712518\": \"绿岛乡\",\n\t \"712519\": \"兰屿乡\",\n\t \"712520\": \"延平乡\",\n\t \"712521\": \"卑南乡\",\n\t \"712522\": \"鹿野乡\",\n\t \"712523\": \"关山镇\",\n\t \"712524\": \"海端乡\",\n\t \"712525\": \"池上乡\",\n\t \"712526\": \"东河乡\",\n\t \"712527\": \"成功镇\",\n\t \"712528\": \"长滨乡\",\n\t \"712529\": \"金峰乡\",\n\t \"712530\": \"大武乡\",\n\t \"712531\": \"达仁乡\",\n\t \"712532\": \"太麻里乡\",\n\t \"712600\": \"花莲县\",\n\t \"712615\": \"花莲市\",\n\t \"712616\": \"新城乡\",\n\t \"712617\": \"太鲁阁\",\n\t \"712618\": \"秀林乡\",\n\t \"712619\": \"吉安乡\",\n\t \"712620\": \"寿丰乡\",\n\t \"712621\": \"凤林镇\",\n\t \"712622\": \"光复乡\",\n\t \"712623\": \"丰滨乡\",\n\t \"712624\": \"瑞穗乡\",\n\t \"712625\": \"万荣乡\",\n\t \"712626\": \"玉里镇\",\n\t \"712627\": \"卓溪乡\",\n\t \"712628\": \"富里乡\",\n\t \"712700\": \"澎湖县\",\n\t \"712707\": \"马公市\",\n\t \"712708\": \"西屿乡\",\n\t \"712709\": \"望安乡\",\n\t \"712710\": \"七美乡\",\n\t \"712711\": \"白沙乡\",\n\t \"712712\": \"湖西乡\",\n\t \"712800\": \"连江县\",\n\t \"712805\": \"南竿乡\",\n\t \"712806\": \"北竿乡\",\n\t \"712807\": \"莒光乡\",\n\t \"712808\": \"东引乡\",\n\t \"810000\": \"香港特别行政区\",\n\t \"810100\": \"香港岛\",\n\t \"810101\": \"中西区\",\n\t \"810102\": \"湾仔\",\n\t \"810103\": \"东区\",\n\t \"810104\": \"南区\",\n\t \"810200\": \"九龙\",\n\t \"810201\": \"九龙城区\",\n\t \"810202\": \"油尖旺区\",\n\t \"810203\": \"深水埗区\",\n\t \"810204\": \"黄大仙区\",\n\t \"810205\": \"观塘区\",\n\t \"810300\": \"新界\",\n\t \"810301\": \"北区\",\n\t \"810302\": \"大埔区\",\n\t \"810303\": \"沙田区\",\n\t \"810304\": \"西贡区\",\n\t \"810305\": \"元朗区\",\n\t \"810306\": \"屯门区\",\n\t \"810307\": \"荃湾区\",\n\t \"810308\": \"葵青区\",\n\t \"810309\": \"离岛区\",\n\t \"820000\": \"澳门特别行政区\",\n\t \"820100\": \"澳门半岛\",\n\t \"820200\": \"离岛\",\n\t \"990000\": \"海外\",\n\t \"990100\": \"海外\"\n\t}\n\t\n\t// id pid/parentId name children\n\tfunction tree(list) {\n\t var mapped = {}\n\t for (var i = 0, item; i < list.length; i++) {\n\t item = list[i]\n\t if (!item || !item.id) continue\n\t mapped[item.id] = item\n\t }\n\t\n\t var result = []\n\t for (var ii = 0; ii < list.length; ii++) {\n\t item = list[ii]\n\t\n\t if (!item) continue\n\t /* jshint -W041 */\n\t if (item.pid == undefined && item.parentId == undefined) {\n\t result.push(item)\n\t continue\n\t }\n\t var parent = mapped[item.pid] || mapped[item.parentId]\n\t if (!parent) continue\n\t if (!parent.children) parent.children = []\n\t parent.children.push(item)\n\t }\n\t return result\n\t}\n\t\n\tvar DICT_FIXED = function() {\n\t var fixed = []\n\t for (var id in DICT) {\n\t var pid = id.slice(2, 6) === '0000' ? undefined :\n\t id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') :\n\t id.slice(0, 4) + '00'\n\t fixed.push({\n\t id: id,\n\t pid: pid,\n\t name: DICT[id]\n\t })\n\t }\n\t return tree(fixed)\n\t}()\n\t\n\tmodule.exports = DICT_FIXED\n\n/***/ }),\n/* 19 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## Miscellaneous\n\t*/\n\tvar DICT = __webpack_require__(18)\n\tmodule.exports = {\n\t\t// Dice\n\t\td4: function() {\n\t\t\treturn this.natural(1, 4)\n\t\t},\n\t\td6: function() {\n\t\t\treturn this.natural(1, 6)\n\t\t},\n\t\td8: function() {\n\t\t\treturn this.natural(1, 8)\n\t\t},\n\t\td12: function() {\n\t\t\treturn this.natural(1, 12)\n\t\t},\n\t\td20: function() {\n\t\t\treturn this.natural(1, 20)\n\t\t},\n\t\td100: function() {\n\t\t\treturn this.natural(1, 100)\n\t\t},\n\t\t/*\n\t\t 随机生成一个 GUID。\n\t\n\t\t http://www.broofa.com/2008/09/javascript-uuid-function/\n\t\t [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt)\n\t\t UUIDs (Universally Unique IDentifier)\n\t\t GUIDs (Globally Unique IDentifier)\n\t\t The formal definition of the UUID string representation is provided by the following ABNF [7]:\n\t\t UUID = time-low \"-\" time-mid \"-\"\n\t\t time-high-and-version \"-\"\n\t\t clock-seq-and-reserved\n\t\t clock-seq-low \"-\" node\n\t\t time-low = 4hexOctet\n\t\t time-mid = 2hexOctet\n\t\t time-high-and-version = 2hexOctet\n\t\t clock-seq-and-reserved = hexOctet\n\t\t clock-seq-low = hexOctet\n\t\t node = 6hexOctet\n\t\t hexOctet = hexDigit hexDigit\n\t\t hexDigit =\n\t\t \"0\" / \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" / \"8\" / \"9\" /\n\t\t \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" /\n\t\t \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\"\n\t\t \n\t\t https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349\n\t\t*/\n\t\tguid: function() {\n\t\t\tvar pool = \"abcdefABCDEF1234567890\",\n\t\t\t\tguid = this.string(pool, 8) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 4) + '-' +\n\t\t\t\tthis.string(pool, 12);\n\t\t\treturn guid\n\t\t},\n\t\tuuid: function() {\n\t\t\treturn this.guid()\n\t\t},\n\t\t/*\n\t\t 随机生成一个 18 位身份证。\n\t\n\t\t [身份证](http://baike.baidu.com/view/1697.htm#4)\n\t\t 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1\n\t\t [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html)\n\t\t*/\n\t\tid: function() {\n\t\t\tvar id,\n\t\t\t\tsum = 0,\n\t\t\t\trank = [\n\t\t\t\t\t\"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\", \"1\", \"6\", \"3\", \"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\"\n\t\t\t\t],\n\t\t\t\tlast = [\n\t\t\t\t\t\"1\", \"0\", \"X\", \"9\", \"8\", \"7\", \"6\", \"5\", \"4\", \"3\", \"2\"\n\t\t\t\t]\n\t\n\t\t\tid = this.pick(DICT).id +\n\t\t\t\tthis.date('yyyyMMdd') +\n\t\t\t\tthis.string('number', 3)\n\t\n\t\t\tfor (var i = 0; i < id.length; i++) {\n\t\t\t\tsum += id[i] * rank[i];\n\t\t\t}\n\t\t\tid += last[sum % 11];\n\t\n\t\t\treturn id\n\t\t},\n\t\n\t\t/*\n\t\t 生成一个全局的自增整数。\n\t\t 类似自增主键(auto increment primary key)。\n\t\t*/\n\t\tincrement: function() {\n\t\t\tvar key = 0\n\t\t\treturn function(step) {\n\t\t\t\treturn key += (+step || 1) // step?\n\t\t\t}\n\t\t}(),\n\t\tinc: function(step) {\n\t\t\treturn this.increment(step)\n\t\t}\n\t}\n\n/***/ }),\n/* 20 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tvar Parser = __webpack_require__(21)\n\tvar Handler = __webpack_require__(22)\n\tmodule.exports = {\n\t\tParser: Parser,\n\t\tHandler: Handler\n\t}\n\n/***/ }),\n/* 21 */\n/***/ (function(module, exports) {\n\n\t// https://github.com/nuysoft/regexp\n\t// forked from https://github.com/ForbesLindesay/regexp\n\t\n\tfunction parse(n) {\n\t if (\"string\" != typeof n) {\n\t var l = new TypeError(\"The regexp to parse must be represented as a string.\");\n\t throw l;\n\t }\n\t return index = 1, cgs = {}, parser.parse(n);\n\t}\n\t\n\tfunction Token(n) {\n\t this.type = n, this.offset = Token.offset(), this.text = Token.text();\n\t}\n\t\n\tfunction Alternate(n, l) {\n\t Token.call(this, \"alternate\"), this.left = n, this.right = l;\n\t}\n\t\n\tfunction Match(n) {\n\t Token.call(this, \"match\"), this.body = n.filter(Boolean);\n\t}\n\t\n\tfunction Group(n, l) {\n\t Token.call(this, n), this.body = l;\n\t}\n\t\n\tfunction CaptureGroup(n) {\n\t Group.call(this, \"capture-group\"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), \n\t this.body = n;\n\t}\n\t\n\tfunction Quantified(n, l) {\n\t Token.call(this, \"quantified\"), this.body = n, this.quantifier = l;\n\t}\n\t\n\tfunction Quantifier(n, l) {\n\t Token.call(this, \"quantifier\"), this.min = n, this.max = l, this.greedy = !0;\n\t}\n\t\n\tfunction CharSet(n, l) {\n\t Token.call(this, \"charset\"), this.invert = n, this.body = l;\n\t}\n\t\n\tfunction CharacterRange(n, l) {\n\t Token.call(this, \"range\"), this.start = n, this.end = l;\n\t}\n\t\n\tfunction Literal(n) {\n\t Token.call(this, \"literal\"), this.body = n, this.escaped = this.body != this.text;\n\t}\n\t\n\tfunction Unicode(n) {\n\t Token.call(this, \"unicode\"), this.code = n.toUpperCase();\n\t}\n\t\n\tfunction Hex(n) {\n\t Token.call(this, \"hex\"), this.code = n.toUpperCase();\n\t}\n\t\n\tfunction Octal(n) {\n\t Token.call(this, \"octal\"), this.code = n.toUpperCase();\n\t}\n\t\n\tfunction BackReference(n) {\n\t Token.call(this, \"back-reference\"), this.code = n.toUpperCase();\n\t}\n\t\n\tfunction ControlCharacter(n) {\n\t Token.call(this, \"control-character\"), this.code = n.toUpperCase();\n\t}\n\t\n\tvar parser = function() {\n\t function n(n, l) {\n\t function u() {\n\t this.constructor = n;\n\t }\n\t u.prototype = l.prototype, n.prototype = new u();\n\t }\n\t function l(n, l, u, t, r) {\n\t function e(n, l) {\n\t function u(n) {\n\t function l(n) {\n\t return n.charCodeAt(0).toString(16).toUpperCase();\n\t }\n\t return n.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\x08/g, \"\\\\b\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\f/g, \"\\\\f\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(n) {\n\t return \"\\\\x0\" + l(n);\n\t }).replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(n) {\n\t return \"\\\\x\" + l(n);\n\t }).replace(/[\\u0180-\\u0FFF]/g, function(n) {\n\t return \"\\\\u0\" + l(n);\n\t }).replace(/[\\u1080-\\uFFFF]/g, function(n) {\n\t return \"\\\\u\" + l(n);\n\t });\n\t }\n\t var t, r;\n\t switch (n.length) {\n\t case 0:\n\t t = \"end of input\";\n\t break;\n\t\n\t case 1:\n\t t = n[0];\n\t break;\n\t\n\t default:\n\t t = n.slice(0, -1).join(\", \") + \" or \" + n[n.length - 1];\n\t }\n\t return r = l ? '\"' + u(l) + '\"' : \"end of input\", \"Expected \" + t + \" but \" + r + \" found.\";\n\t }\n\t this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, \n\t this.name = \"SyntaxError\", this.message = e(n, l);\n\t }\n\t function u(n) {\n\t function u() {\n\t return n.substring(Lt, qt);\n\t }\n\t function t() {\n\t return Lt;\n\t }\n\t function r(l) {\n\t function u(l, u, t) {\n\t var r, e;\n\t for (r = u; t > r; r++) e = n.charAt(r), \"\\n\" === e ? (l.seenCR || l.line++, l.column = 1, \n\t l.seenCR = !1) : \"\\r\" === e || \"\\u2028\" === e || \"\\u2029\" === e ? (l.line++, l.column = 1, \n\t l.seenCR = !0) : (l.column++, l.seenCR = !1);\n\t }\n\t return Mt !== l && (Mt > l && (Mt = 0, Dt = {\n\t line: 1,\n\t column: 1,\n\t seenCR: !1\n\t }), u(Dt, Mt, l), Mt = l), Dt;\n\t }\n\t function e(n) {\n\t Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n));\n\t }\n\t function o(n) {\n\t var l = 0;\n\t for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++;\n\t }\n\t function c() {\n\t var l, u, t, r, o;\n\t return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, \n\t qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], \n\t t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, \n\t u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, \n\t l = il), l;\n\t }\n\t function i() {\n\t var n, l, u, t, r;\n\t if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), \n\t Wt--, null === t ? u = al : (qt = u, u = il), null !== u) {\n\t for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), \n\t null === r && (r = a());\n\t null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), \n\t null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il);\n\t } else qt = n, n = il; else qt = n, n = il;\n\t return n;\n\t }\n\t function a() {\n\t var n;\n\t return n = x(), null === n && (n = Q(), null === n && (n = B())), n;\n\t }\n\t function f() {\n\t var l, u;\n\t return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), \n\t null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function s() {\n\t var l, u;\n\t return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), \n\t null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function h() {\n\t var n, l, u;\n\t return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), \n\t null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n;\n\t }\n\t function d() {\n\t var n, l, u;\n\t return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, \n\t l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, \n\t n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n;\n\t }\n\t function p() {\n\t var n;\n\t return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), \n\t null === n && (n = g(), null === n && (n = b()))))), n;\n\t }\n\t function v() {\n\t var l, u, t, r, o, c;\n\t return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, \n\t 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, \n\t qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, \n\t l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function w() {\n\t var l, u, t, r;\n\t return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, \n\t 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t }\n\t function A() {\n\t var l, u, t, r;\n\t return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n\t null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, \n\t 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t }\n\t function C() {\n\t var l, u;\n\t return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), \n\t null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function g() {\n\t var l, u;\n\t return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), \n\t null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function b() {\n\t var l, u;\n\t return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), \n\t null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function k() {\n\t var l;\n\t return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), \n\t l;\n\t }\n\t function T() {\n\t var l, u, t;\n\t if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, \n\t 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), \n\t qt++) : (t = null, 0 === Wt && e(Il)); else u = il;\n\t return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, \n\t l;\n\t }\n\t function x() {\n\t var l, u, t, r;\n\t return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), \n\t null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), \n\t null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), \n\t null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n\t }\n\t function y() {\n\t var n, l;\n\t return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, \n\t n = l) : n = l, n;\n\t }\n\t function m() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), \n\t null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function R() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), \n\t null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function F() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), \n\t null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function Q() {\n\t var l, u, t, r, o;\n\t if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), \n\t null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), \n\t null === t && (t = al), null !== t) {\n\t for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), \n\t null === o && (o = U());\n\t null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), \n\t null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il);\n\t } else qt = l, l = il; else qt = l, l = il;\n\t return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l;\n\t }\n\t function S() {\n\t var l, u, t, r;\n\t return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, \n\t 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, \n\t l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, \n\t null === l && (u = null, 0 === Wt && e(du)), l;\n\t }\n\t function U() {\n\t var n, l;\n\t return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), \n\t n;\n\t }\n\t function E() {\n\t var l, u;\n\t return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), \n\t null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function G() {\n\t var n;\n\t return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), \n\t null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), \n\t null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), \n\t null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), \n\t null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n;\n\t }\n\t function B() {\n\t var n;\n\t return n = j(), null === n && (n = q(), null === n && (n = $())), n;\n\t }\n\t function j() {\n\t var l, u;\n\t return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), \n\t null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function $() {\n\t var l, u;\n\t return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, \n\t 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, \n\t Wt--, null === l && (u = null, 0 === Wt && e(yu)), l;\n\t }\n\t function q() {\n\t var n;\n\t return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), \n\t null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), \n\t null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), \n\t null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), \n\t null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), \n\t n;\n\t }\n\t function L() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n\t null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function M() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n\t null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function D() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), \n\t null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function H() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), \n\t null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function O() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), \n\t null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function W() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), \n\t null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function z() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), \n\t null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function I() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), \n\t null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function J() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), \n\t null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function K() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), \n\t null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function N() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), \n\t null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function P() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), \n\t null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function V() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), \n\t null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function X() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), \n\t null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function Y() {\n\t var l, u, t;\n\t return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), \n\t null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n\t null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function Z() {\n\t var l, u, t;\n\t return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n\t null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), \n\t null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t function _() {\n\t var l, u, t, r;\n\t if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n\t null !== u) {\n\t if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), \n\t null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t qt++) : (r = null, 0 === Wt && e(mt)); else t = il;\n\t null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il);\n\t } else qt = l, l = il;\n\t return l;\n\t }\n\t function nl() {\n\t var l, u, t, r;\n\t if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), \n\t null !== u) {\n\t if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n\t null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n\t null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il);\n\t } else qt = l, l = il;\n\t return l;\n\t }\n\t function ll() {\n\t var l, u, t, r;\n\t if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), \n\t null !== u) {\n\t if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n\t null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n\t qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n\t null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il);\n\t } else qt = l, l = il;\n\t return l;\n\t }\n\t function ul() {\n\t var l, u;\n\t return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n\t null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l;\n\t }\n\t function tl() {\n\t var l, u, t;\n\t return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n\t null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n\t null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n\t l = il)) : (qt = l, l = il), l;\n\t }\n\t var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = {\n\t regexp: c\n\t }, cl = c, il = null, al = \"\", fl = \"|\", sl = '\"|\"', hl = function(n, l) {\n\t return l ? new Alternate(n, l[1]) : n;\n\t }, dl = function(n, l, u) {\n\t return new Match([ n ].concat(l).concat([ u ]));\n\t }, pl = \"^\", vl = '\"^\"', wl = function() {\n\t return new Token(\"start\");\n\t }, Al = \"$\", Cl = '\"$\"', gl = function() {\n\t return new Token(\"end\");\n\t }, bl = function(n, l) {\n\t return new Quantified(n, l);\n\t }, kl = \"Quantifier\", Tl = function(n, l) {\n\t return l && (n.greedy = !1), n;\n\t }, xl = \"{\", yl = '\"{\"', ml = \",\", Rl = '\",\"', Fl = \"}\", Ql = '\"}\"', Sl = function(n, l) {\n\t return new Quantifier(n, l);\n\t }, Ul = \",}\", El = '\",}\"', Gl = function(n) {\n\t return new Quantifier(n, 1/0);\n\t }, Bl = function(n) {\n\t return new Quantifier(n, n);\n\t }, jl = \"+\", $l = '\"+\"', ql = function() {\n\t return new Quantifier(1, 1/0);\n\t }, Ll = \"*\", Ml = '\"*\"', Dl = function() {\n\t return new Quantifier(0, 1/0);\n\t }, Hl = \"?\", Ol = '\"?\"', Wl = function() {\n\t return new Quantifier(0, 1);\n\t }, zl = /^[0-9]/, Il = \"[0-9]\", Jl = function(n) {\n\t return +n.join(\"\");\n\t }, Kl = \"(\", Nl = '\"(\"', Pl = \")\", Vl = '\")\"', Xl = function(n) {\n\t return n;\n\t }, Yl = function(n) {\n\t return new CaptureGroup(n);\n\t }, Zl = \"?:\", _l = '\"?:\"', nu = function(n) {\n\t return new Group(\"non-capture-group\", n);\n\t }, lu = \"?=\", uu = '\"?=\"', tu = function(n) {\n\t return new Group(\"positive-lookahead\", n);\n\t }, ru = \"?!\", eu = '\"?!\"', ou = function(n) {\n\t return new Group(\"negative-lookahead\", n);\n\t }, cu = \"CharacterSet\", iu = \"[\", au = '\"[\"', fu = \"]\", su = '\"]\"', hu = function(n, l) {\n\t return new CharSet(!!n, l);\n\t }, du = \"CharacterRange\", pu = \"-\", vu = '\"-\"', wu = function(n, l) {\n\t return new CharacterRange(n, l);\n\t }, Au = \"Character\", Cu = /^[^\\\\\\]]/, gu = \"[^\\\\\\\\\\\\]]\", bu = function(n) {\n\t return new Literal(n);\n\t }, ku = \".\", Tu = '\".\"', xu = function() {\n\t return new Token(\"any-character\");\n\t }, yu = \"Literal\", mu = /^[^|\\\\\\/.[()?+*$\\^]/, Ru = \"[^|\\\\\\\\\\\\/.[()?+*$\\\\^]\", Fu = \"\\\\b\", Qu = '\"\\\\\\\\b\"', Su = function() {\n\t return new Token(\"backspace\");\n\t }, Uu = function() {\n\t return new Token(\"word-boundary\");\n\t }, Eu = \"\\\\B\", Gu = '\"\\\\\\\\B\"', Bu = function() {\n\t return new Token(\"non-word-boundary\");\n\t }, ju = \"\\\\d\", $u = '\"\\\\\\\\d\"', qu = function() {\n\t return new Token(\"digit\");\n\t }, Lu = \"\\\\D\", Mu = '\"\\\\\\\\D\"', Du = function() {\n\t return new Token(\"non-digit\");\n\t }, Hu = \"\\\\f\", Ou = '\"\\\\\\\\f\"', Wu = function() {\n\t return new Token(\"form-feed\");\n\t }, zu = \"\\\\n\", Iu = '\"\\\\\\\\n\"', Ju = function() {\n\t return new Token(\"line-feed\");\n\t }, Ku = \"\\\\r\", Nu = '\"\\\\\\\\r\"', Pu = function() {\n\t return new Token(\"carriage-return\");\n\t }, Vu = \"\\\\s\", Xu = '\"\\\\\\\\s\"', Yu = function() {\n\t return new Token(\"white-space\");\n\t }, Zu = \"\\\\S\", _u = '\"\\\\\\\\S\"', nt = function() {\n\t return new Token(\"non-white-space\");\n\t }, lt = \"\\\\t\", ut = '\"\\\\\\\\t\"', tt = function() {\n\t return new Token(\"tab\");\n\t }, rt = \"\\\\v\", et = '\"\\\\\\\\v\"', ot = function() {\n\t return new Token(\"vertical-tab\");\n\t }, ct = \"\\\\w\", it = '\"\\\\\\\\w\"', at = function() {\n\t return new Token(\"word\");\n\t }, ft = \"\\\\W\", st = '\"\\\\\\\\W\"', ht = function() {\n\t return new Token(\"non-word\");\n\t }, dt = \"\\\\c\", pt = '\"\\\\\\\\c\"', vt = \"any character\", wt = function(n) {\n\t return new ControlCharacter(n);\n\t }, At = \"\\\\\", Ct = '\"\\\\\\\\\"', gt = /^[1-9]/, bt = \"[1-9]\", kt = function(n) {\n\t return new BackReference(n);\n\t }, Tt = \"\\\\0\", xt = '\"\\\\\\\\0\"', yt = /^[0-7]/, mt = \"[0-7]\", Rt = function(n) {\n\t return new Octal(n.join(\"\"));\n\t }, Ft = \"\\\\x\", Qt = '\"\\\\\\\\x\"', St = /^[0-9a-fA-F]/, Ut = \"[0-9a-fA-F]\", Et = function(n) {\n\t return new Hex(n.join(\"\"));\n\t }, Gt = \"\\\\u\", Bt = '\"\\\\\\\\u\"', jt = function(n) {\n\t return new Unicode(n.join(\"\"));\n\t }, $t = function() {\n\t return new Token(\"null-character\");\n\t }, qt = 0, Lt = 0, Mt = 0, Dt = {\n\t line: 1,\n\t column: 1,\n\t seenCR: !1\n\t }, Ht = 0, Ot = [], Wt = 0;\n\t if (\"startRule\" in el) {\n\t if (!(el.startRule in ol)) throw new Error(\"Can't start parsing from rule \\\"\" + el.startRule + '\".');\n\t cl = ol[el.startRule];\n\t }\n\t if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl;\n\t throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column);\n\t }\n\t return n(l, Error), {\n\t SyntaxError: l,\n\t parse: u\n\t };\n\t}(), index = 1, cgs = {};\n\t\n\tmodule.exports = parser\n\n/***/ }),\n/* 22 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## RegExp Handler\n\t\n\t https://github.com/ForbesLindesay/regexp\n\t https://github.com/dmajda/pegjs\n\t http://www.regexper.com/\n\t\n\t 每个节点的结构\n\t {\n\t type: '',\n\t offset: number,\n\t text: '',\n\t body: {},\n\t escaped: true/false\n\t }\n\t\n\t type 可选值\n\t alternate | 选择\n\t match 匹配\n\t capture-group () 捕获组\n\t non-capture-group (?:...) 非捕获组\n\t positive-lookahead (?=p) 零宽正向先行断言\n\t negative-lookahead (?!p) 零宽负向先行断言\n\t quantified a* 重复节点\n\t quantifier * 量词\n\t charset [] 字符集\n\t range {m, n} 范围\n\t literal a 直接量字符\n\t unicode \\uxxxx Unicode\n\t hex \\x 十六进制\n\t octal 八进制\n\t back-reference \\n 反向引用\n\t control-character \\cX 控制字符\n\t\n\t // Token\n\t start ^ 开头\n\t end $ 结尾\n\t any-character . 任意字符\n\t backspace [\\b] 退格直接量\n\t word-boundary \\b 单词边界\n\t non-word-boundary \\B 非单词边界\n\t digit \\d ASCII 数字,[0-9]\n\t non-digit \\D 非 ASCII 数字,[^0-9]\n\t form-feed \\f 换页符\n\t line-feed \\n 换行符\n\t carriage-return \\r 回车符\n\t white-space \\s 空白符\n\t non-white-space \\S 非空白符\n\t tab \\t 制表符\n\t vertical-tab \\v 垂直制表符\n\t word \\w ASCII 字符,[a-zA-Z0-9]\n\t non-word \\W 非 ASCII 字符,[^a-zA-Z0-9]\n\t null-character \\o NUL 字符\n\t */\n\t\n\tvar Util = __webpack_require__(3)\n\tvar Random = __webpack_require__(5)\n\t /*\n\t \n\t */\n\tvar Handler = {\n\t extend: Util.extend\n\t}\n\t\n\t// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart\n\t/*var ASCII_CONTROL_CODE_CHART = {\n\t '@': ['\\u0000'],\n\t A: ['\\u0001'],\n\t B: ['\\u0002'],\n\t C: ['\\u0003'],\n\t D: ['\\u0004'],\n\t E: ['\\u0005'],\n\t F: ['\\u0006'],\n\t G: ['\\u0007', '\\a'],\n\t H: ['\\u0008', '\\b'],\n\t I: ['\\u0009', '\\t'],\n\t J: ['\\u000A', '\\n'],\n\t K: ['\\u000B', '\\v'],\n\t L: ['\\u000C', '\\f'],\n\t M: ['\\u000D', '\\r'],\n\t N: ['\\u000E'],\n\t O: ['\\u000F'],\n\t P: ['\\u0010'],\n\t Q: ['\\u0011'],\n\t R: ['\\u0012'],\n\t S: ['\\u0013'],\n\t T: ['\\u0014'],\n\t U: ['\\u0015'],\n\t V: ['\\u0016'],\n\t W: ['\\u0017'],\n\t X: ['\\u0018'],\n\t Y: ['\\u0019'],\n\t Z: ['\\u001A'],\n\t '[': ['\\u001B', '\\e'],\n\t '\\\\': ['\\u001C'],\n\t ']': ['\\u001D'],\n\t '^': ['\\u001E'],\n\t '_': ['\\u001F']\n\t}*/\n\t\n\t// ASCII printable code chart\n\t// var LOWER = 'abcdefghijklmnopqrstuvwxyz'\n\t// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\t// var NUMBER = '0123456789'\n\t// var SYMBOL = ' !\"#$%&\\'()*+,-./' + ':;<=>?@' + '[\\\\]^_`' + '{|}~'\n\tvar LOWER = ascii(97, 122)\n\tvar UPPER = ascii(65, 90)\n\tvar NUMBER = ascii(48, 57)\n\tvar OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96)\n\tvar PRINTABLE = ascii(32, 126)\n\tvar SPACE = ' \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029'\n\tvar CHARACTER_CLASSES = {\n\t '\\\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95)\n\t '\\\\W': OTHER.replace('_', ''),\n\t '\\\\s': SPACE,\n\t '\\\\S': function() {\n\t var result = PRINTABLE\n\t for (var i = 0; i < SPACE.length; i++) {\n\t result = result.replace(SPACE[i], '')\n\t }\n\t return result\n\t }(),\n\t '\\\\d': NUMBER,\n\t '\\\\D': LOWER + UPPER + OTHER\n\t}\n\t\n\tfunction ascii(from, to) {\n\t var result = ''\n\t for (var i = from; i <= to; i++) {\n\t result += String.fromCharCode(i)\n\t }\n\t return result\n\t}\n\t\n\t// var ast = RegExpParser.parse(regexp.source)\n\tHandler.gen = function(node, result, cache) {\n\t cache = cache || {\n\t guid: 1\n\t }\n\t return Handler[node.type] ? Handler[node.type](node, result, cache) :\n\t Handler.token(node, result, cache)\n\t}\n\t\n\tHandler.extend({\n\t /* jshint unused:false */\n\t token: function(node, result, cache) {\n\t switch (node.type) {\n\t case 'start':\n\t case 'end':\n\t return ''\n\t case 'any-character':\n\t return Random.character()\n\t case 'backspace':\n\t return ''\n\t case 'word-boundary': // TODO\n\t return ''\n\t case 'non-word-boundary': // TODO\n\t break\n\t case 'digit':\n\t return Random.pick(\n\t NUMBER.split('')\n\t )\n\t case 'non-digit':\n\t return Random.pick(\n\t (LOWER + UPPER + OTHER).split('')\n\t )\n\t case 'form-feed':\n\t break\n\t case 'line-feed':\n\t return node.body || node.text\n\t case 'carriage-return':\n\t break\n\t case 'white-space':\n\t return Random.pick(\n\t SPACE.split('')\n\t )\n\t case 'non-white-space':\n\t return Random.pick(\n\t (LOWER + UPPER + NUMBER).split('')\n\t )\n\t case 'tab':\n\t break\n\t case 'vertical-tab':\n\t break\n\t case 'word': // \\w [a-zA-Z0-9]\n\t return Random.pick(\n\t (LOWER + UPPER + NUMBER).split('')\n\t )\n\t case 'non-word': // \\W [^a-zA-Z0-9]\n\t return Random.pick(\n\t OTHER.replace('_', '').split('')\n\t )\n\t case 'null-character':\n\t break\n\t }\n\t return node.body || node.text\n\t },\n\t /*\n\t {\n\t type: 'alternate',\n\t offset: 0,\n\t text: '',\n\t left: {\n\t boyd: []\n\t },\n\t right: {\n\t boyd: []\n\t }\n\t }\n\t */\n\t alternate: function(node, result, cache) {\n\t // node.left/right {}\n\t return this.gen(\n\t Random.boolean() ? node.left : node.right,\n\t result,\n\t cache\n\t )\n\t },\n\t /*\n\t {\n\t type: 'match',\n\t offset: 0,\n\t text: '',\n\t body: []\n\t }\n\t */\n\t match: function(node, result, cache) {\n\t result = ''\n\t // node.body []\n\t for (var i = 0; i < node.body.length; i++) {\n\t result += this.gen(node.body[i], result, cache)\n\t }\n\t return result\n\t },\n\t // ()\n\t 'capture-group': function(node, result, cache) {\n\t // node.body {}\n\t result = this.gen(node.body, result, cache)\n\t cache[cache.guid++] = result\n\t return result\n\t },\n\t // (?:...)\n\t 'non-capture-group': function(node, result, cache) {\n\t // node.body {}\n\t return this.gen(node.body, result, cache)\n\t },\n\t // (?=p)\n\t 'positive-lookahead': function(node, result, cache) {\n\t // node.body\n\t return this.gen(node.body, result, cache)\n\t },\n\t // (?!p)\n\t 'negative-lookahead': function(node, result, cache) {\n\t // node.body\n\t return ''\n\t },\n\t /*\n\t {\n\t type: 'quantified',\n\t offset: 3,\n\t text: 'c*',\n\t body: {\n\t type: 'literal',\n\t offset: 3,\n\t text: 'c',\n\t body: 'c',\n\t escaped: false\n\t },\n\t quantifier: {\n\t type: 'quantifier',\n\t offset: 4,\n\t text: '*',\n\t min: 0,\n\t max: Infinity,\n\t greedy: true\n\t }\n\t }\n\t */\n\t quantified: function(node, result, cache) {\n\t result = ''\n\t // node.quantifier {}\n\t var count = this.quantifier(node.quantifier);\n\t // node.body {}\n\t for (var i = 0; i < count; i++) {\n\t result += this.gen(node.body, result, cache)\n\t }\n\t return result\n\t },\n\t /*\n\t quantifier: {\n\t type: 'quantifier',\n\t offset: 4,\n\t text: '*',\n\t min: 0,\n\t max: Infinity,\n\t greedy: true\n\t }\n\t */\n\t quantifier: function(node, result, cache) {\n\t var min = Math.max(node.min, 0)\n\t var max = isFinite(node.max) ? node.max :\n\t min + Random.integer(3, 7)\n\t return Random.integer(min, max)\n\t },\n\t /*\n\t \n\t */\n\t charset: function(node, result, cache) {\n\t // node.invert\n\t if (node.invert) return this['invert-charset'](node, result, cache)\n\t\n\t // node.body []\n\t var literal = Random.pick(node.body)\n\t return this.gen(literal, result, cache)\n\t },\n\t 'invert-charset': function(node, result, cache) {\n\t var pool = PRINTABLE\n\t for (var i = 0, item; i < node.body.length; i++) {\n\t item = node.body[i]\n\t switch (item.type) {\n\t case 'literal':\n\t pool = pool.replace(item.body, '')\n\t break\n\t case 'range':\n\t var min = this.gen(item.start, result, cache).charCodeAt()\n\t var max = this.gen(item.end, result, cache).charCodeAt()\n\t for (var ii = min; ii <= max; ii++) {\n\t pool = pool.replace(String.fromCharCode(ii), '')\n\t }\n\t /* falls through */\n\t default:\n\t var characters = CHARACTER_CLASSES[item.text]\n\t if (characters) {\n\t for (var iii = 0; iii <= characters.length; iii++) {\n\t pool = pool.replace(characters[iii], '')\n\t }\n\t }\n\t }\n\t }\n\t return Random.pick(pool.split(''))\n\t },\n\t range: function(node, result, cache) {\n\t // node.start, node.end\n\t var min = this.gen(node.start, result, cache).charCodeAt()\n\t var max = this.gen(node.end, result, cache).charCodeAt()\n\t return String.fromCharCode(\n\t Random.integer(min, max)\n\t )\n\t },\n\t literal: function(node, result, cache) {\n\t return node.escaped ? node.body : node.text\n\t },\n\t // Unicode \\u\n\t unicode: function(node, result, cache) {\n\t return String.fromCharCode(\n\t parseInt(node.code, 16)\n\t )\n\t },\n\t // 十六进制 \\xFF\n\t hex: function(node, result, cache) {\n\t return String.fromCharCode(\n\t parseInt(node.code, 16)\n\t )\n\t },\n\t // 八进制 \\0\n\t octal: function(node, result, cache) {\n\t return String.fromCharCode(\n\t parseInt(node.code, 8)\n\t )\n\t },\n\t // 反向引用\n\t 'back-reference': function(node, result, cache) {\n\t return cache[node.code] || ''\n\t },\n\t /*\n\t http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n\t */\n\t CONTROL_CHARACTER_MAP: function() {\n\t var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\\\ ] ^ _'.split(' ')\n\t var CONTROL_CHARACTER_UNICODE = '\\u0000 \\u0001 \\u0002 \\u0003 \\u0004 \\u0005 \\u0006 \\u0007 \\u0008 \\u0009 \\u000A \\u000B \\u000C \\u000D \\u000E \\u000F \\u0010 \\u0011 \\u0012 \\u0013 \\u0014 \\u0015 \\u0016 \\u0017 \\u0018 \\u0019 \\u001A \\u001B \\u001C \\u001D \\u001E \\u001F'.split(' ')\n\t var map = {}\n\t for (var i = 0; i < CONTROL_CHARACTER.length; i++) {\n\t map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]\n\t }\n\t return map\n\t }(),\n\t 'control-character': function(node, result, cache) {\n\t return this.CONTROL_CHARACTER_MAP[node.code]\n\t }\n\t})\n\t\n\tmodule.exports = Handler\n\n/***/ }),\n/* 23 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(24)\n\n/***/ }),\n/* 24 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## toJSONSchema\n\t\n\t 把 Mock.js 风格的数据模板转换成 JSON Schema。\n\t\n\t > [JSON Schema](http://json-schema.org/)\n\t */\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar Parser = __webpack_require__(4)\n\t\n\tfunction toJSONSchema(template, name, path /* Internal Use Only */ ) {\n\t // type rule properties items\n\t path = path || []\n\t var result = {\n\t name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name,\n\t template: template,\n\t type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] }\n\t rule: Parser.parse(name)\n\t }\n\t result.path = path.slice(0)\n\t result.path.push(name === undefined ? 'ROOT' : result.name)\n\t\n\t switch (result.type) {\n\t case 'array':\n\t result.items = []\n\t Util.each(template, function(value, index) {\n\t result.items.push(\n\t toJSONSchema(value, index, result.path)\n\t )\n\t })\n\t break\n\t case 'object':\n\t result.properties = []\n\t Util.each(template, function(value, name) {\n\t result.properties.push(\n\t toJSONSchema(value, name, result.path)\n\t )\n\t })\n\t break\n\t }\n\t\n\t return result\n\t\n\t}\n\t\n\tmodule.exports = toJSONSchema\n\n\n/***/ }),\n/* 25 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(26)\n\n/***/ }),\n/* 26 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/*\n\t ## valid(template, data)\n\t\n\t 校验真实数据 data 是否与数据模板 template 匹配。\n\t \n\t 实现思路:\n\t 1. 解析规则。\n\t 先把数据模板 template 解析为更方便机器解析的 JSON-Schame\n\t name 属性名 \n\t type 属性值类型\n\t template 属性值模板\n\t properties 对象属性数组\n\t items 数组元素数组\n\t rule 属性值生成规则\n\t 2. 递归验证规则。\n\t 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。\n\t\n\t 提示信息 \n\t https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties\n\t [JSON-Schama validator](http://json-schema-validator.herokuapp.com/)\n\t [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/)\n\t*/\n\tvar Constant = __webpack_require__(2)\n\tvar Util = __webpack_require__(3)\n\tvar toJSONSchema = __webpack_require__(23)\n\t\n\tfunction valid(template, data) {\n\t var schema = toJSONSchema(template)\n\t var result = Diff.diff(schema, data)\n\t for (var i = 0; i < result.length; i++) {\n\t // console.log(template, data)\n\t // console.warn(Assert.message(result[i]))\n\t }\n\t return result\n\t}\n\t\n\t/*\n\t ## name\n\t 有生成规则:比较解析后的 name\n\t 无生成规则:直接比较\n\t ## type\n\t 无类型转换:直接比较\n\t 有类型转换:先试着解析 template,然后再检查?\n\t ## value vs. template\n\t 基本类型\n\t 无生成规则:直接比较\n\t 有生成规则:\n\t number\n\t min-max.dmin-dmax\n\t min-max.dcount\n\t count.dmin-dmax\n\t count.dcount\n\t +step\n\t 整数部分\n\t 小数部分\n\t boolean \n\t string \n\t min-max\n\t count\n\t ## properties\n\t 对象\n\t 有生成规则:检测期望的属性个数,继续递归\n\t 无生成规则:检测全部的属性个数,继续递归\n\t ## items\n\t 数组\n\t 有生成规则:\n\t `'name|1': [{}, {} ...]` 其中之一,继续递归\n\t `'name|+1': [{}, {} ...]` 顺序检测,继续递归\n\t `'name|min-max': [{}, {} ...]` 检测个数,继续递归\n\t `'name|count': [{}, {} ...]` 检测个数,继续递归\n\t 无生成规则:检测全部的元素个数,继续递归\n\t*/\n\tvar Diff = {\n\t diff: function diff(schema, data, name /* Internal Use Only */ ) {\n\t var result = []\n\t\n\t // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测\n\t if (\n\t this.name(schema, data, name, result) &&\n\t this.type(schema, data, name, result)\n\t ) {\n\t this.value(schema, data, name, result)\n\t this.properties(schema, data, name, result)\n\t this.items(schema, data, name, result)\n\t }\n\t\n\t return result\n\t },\n\t /* jshint unused:false */\n\t name: function(schema, data, name, result) {\n\t var length = result.length\n\t\n\t Assert.equal('name', schema.path, name + '', schema.name + '', result)\n\t\n\t return result.length === length\n\t },\n\t type: function(schema, data, name, result) {\n\t var length = result.length\n\t\n\t switch (schema.type) {\n\t case 'string':\n\t // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值\n\t if (schema.template.match(Constant.RE_PLACEHOLDER)) return true\n\t break\n\t case 'array':\n\t if (schema.rule.parameters) {\n\t // name|count: array\n\t if (schema.rule.min !== undefined && schema.rule.max === undefined) {\n\t // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致\n\t if (schema.rule.count === 1) return true\n\t }\n\t // 跳过 name|+inc: array\n\t if (schema.rule.parameters[2]) return true\n\t }\n\t break\n\t case 'function':\n\t // 跳过 `'name': function`,因为函数可以返回任何类型的值。\n\t return true\n\t }\n\t\n\t Assert.equal('type', schema.path, Util.type(data), schema.type, result)\n\t\n\t return result.length === length\n\t },\n\t value: function(schema, data, name, result) {\n\t var length = result.length\n\t\n\t var rule = schema.rule\n\t var templateType = schema.type\n\t if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true\n\t\n\t // 无生成规则\n\t if (!rule.parameters) {\n\t switch (templateType) {\n\t case 'regexp':\n\t Assert.match('value', schema.path, data, schema.template, result)\n\t return result.length === length\n\t case 'string':\n\t // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致\n\t if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length\n\t break\n\t }\n\t Assert.equal('value', schema.path, data, schema.template, result)\n\t return result.length === length\n\t }\n\t\n\t // 有生成规则\n\t var actualRepeatCount\n\t switch (templateType) {\n\t case 'number':\n\t var parts = (data + '').split('.')\n\t parts[0] = +parts[0]\n\t\n\t // 整数部分\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result)\n\t // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})')\n\t Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name)\n\t }\n\t\n\t // 小数部分\n\t if (rule.decimal) {\n\t // |dmin-dmax\n\t if (rule.dmin !== undefined && rule.dmax !== undefined) {\n\t Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result)\n\t Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result)\n\t }\n\t // |dcount\n\t if (rule.dmin !== undefined && rule.dmax === undefined) {\n\t Assert.equal('value', schema.path, parts[1].length, rule.dmin, result)\n\t }\n\t }\n\t\n\t break\n\t\n\t case 'boolean':\n\t break\n\t\n\t case 'string':\n\t // 'aaa'.match(/a/g)\n\t actualRepeatCount = data.match(new RegExp(schema.template, 'g'))\n\t actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\t\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t }\n\t\n\t break\n\t\n\t case 'regexp':\n\t actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\\^|\\$$/g, ''), 'g'))\n\t actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\t\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n\t }\n\t break\n\t }\n\t\n\t return result.length === length\n\t },\n\t properties: function(schema, data, name, result) {\n\t var length = result.length\n\t\n\t var rule = schema.rule\n\t var keys = Util.keys(data)\n\t if (!schema.properties) return\n\t\n\t // 无生成规则\n\t if (!schema.rule.parameters) {\n\t Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result)\n\t } else {\n\t // 有生成规则\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result)\n\t Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result)\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t // |1, |>1\n\t if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result)\n\t }\n\t }\n\t\n\t if (result.length !== length) return false\n\t\n\t for (var i = 0; i < keys.length; i++) {\n\t result.push.apply(\n\t result,\n\t this.diff(\n\t function() {\n\t var property\n\t Util.each(schema.properties, function(item /*, index*/ ) {\n\t if (item.name === keys[i]) property = item\n\t })\n\t return property || schema.properties[i]\n\t }(),\n\t data[keys[i]],\n\t keys[i]\n\t )\n\t )\n\t }\n\t\n\t return result.length === length\n\t },\n\t items: function(schema, data, name, result) {\n\t var length = result.length\n\t\n\t if (!schema.items) return\n\t\n\t var rule = schema.rule\n\t\n\t // 无生成规则\n\t if (!schema.rule.parameters) {\n\t Assert.equal('items length', schema.path, data.length, schema.items.length, result)\n\t } else {\n\t // 有生成规则\n\t // |min-max\n\t if (rule.min !== undefined && rule.max !== undefined) {\n\t Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result,\n\t '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements')\n\t Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result,\n\t '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements')\n\t }\n\t // |count\n\t if (rule.min !== undefined && rule.max === undefined) {\n\t // |1, |>1\n\t if (rule.count === 1) return result.length === length\n\t else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result)\n\t }\n\t // |+inc\n\t if (rule.parameters[2]) return result.length === length\n\t }\n\t\n\t if (result.length !== length) return false\n\t\n\t for (var i = 0; i < data.length; i++) {\n\t result.push.apply(\n\t result,\n\t this.diff(\n\t schema.items[i % schema.items.length],\n\t data[i],\n\t i % schema.items.length\n\t )\n\t )\n\t }\n\t\n\t return result.length === length\n\t }\n\t}\n\t\n\t/*\n\t 完善、友好的提示信息\n\t \n\t Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to\n\t 路径 验证类型 描述 \n\t\n\t Expect path.name is less than or equal to expected, but path.name is actual.\n\t\n\t Expect path.name is less than or equal to expected, but path.name is actual.\n\t Expect path.name is greater than or equal to expected, but path.name is actual.\n\t\n\t*/\n\tvar Assert = {\n\t message: function(item) {\n\t return (item.message ||\n\t '[{utype}] Expect {path}\\'{ltype} {action} {expected}, but is {actual}')\n\t .replace('{utype}', item.type.toUpperCase())\n\t .replace('{ltype}', item.type.toLowerCase())\n\t .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path)\n\t .replace('{action}', item.action)\n\t .replace('{expected}', item.expected)\n\t .replace('{actual}', item.actual)\n\t },\n\t equal: function(type, path, actual, expected, result, message) {\n\t if (actual === expected) return true\n\t switch (type) {\n\t case 'type':\n\t // 正则模板 === 字符串最终值\n\t if (expected === 'regexp' && actual === 'string') return true\n\t break\n\t }\n\t\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t // actual matches expected\n\t match: function(type, path, actual, expected, result, message) {\n\t if (expected.test(actual)) return true\n\t\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'matches',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t notEqual: function(type, path, actual, expected, result, message) {\n\t if (actual !== expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is not equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t greaterThan: function(type, path, actual, expected, result, message) {\n\t if (actual > expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is greater than',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t lessThan: function(type, path, actual, expected, result, message) {\n\t if (actual < expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is less to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t greaterThanOrEqualTo: function(type, path, actual, expected, result, message) {\n\t if (actual >= expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is greater than or equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t },\n\t lessThanOrEqualTo: function(type, path, actual, expected, result, message) {\n\t if (actual <= expected) return true\n\t var item = {\n\t path: path,\n\t type: type,\n\t actual: actual,\n\t expected: expected,\n\t action: 'is less than or equal to',\n\t message: message\n\t }\n\t item.message = Assert.message(item)\n\t result.push(item)\n\t return false\n\t }\n\t}\n\t\n\tvalid.Diff = Diff\n\tvalid.Assert = Assert\n\t\n\tmodule.exports = valid\n\n/***/ }),\n/* 27 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\tmodule.exports = __webpack_require__(28)\n\n/***/ }),\n/* 28 */\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* global window, document, location, Event, setTimeout */\n\t/*\n\t ## MockXMLHttpRequest\n\t\n\t 期望的功能:\n\t 1. 完整地覆盖原生 XHR 的行为\n\t 2. 完整地模拟原生 XHR 的行为\n\t 3. 在发起请求时,自动检测是否需要拦截\n\t 4. 如果不必拦截,则执行原生 XHR 的行为\n\t 5. 如果需要拦截,则执行虚拟 XHR 的行为\n\t 6. 兼容 XMLHttpRequest 和 ActiveXObject\n\t new window.XMLHttpRequest()\n\t new window.ActiveXObject(\"Microsoft.XMLHTTP\")\n\t\n\t 关键方法的逻辑:\n\t * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。\n\t * open 此时可以取到 URL,可以决定是否进行拦截。\n\t * send 此时已经确定了请求方式。\n\t\n\t 规范:\n\t http://xhr.spec.whatwg.org/\n\t http://www.w3.org/TR/XMLHttpRequest2/\n\t\n\t 参考实现:\n\t https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js\n\t https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js\n\t https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js\n\t https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js\n\t https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js\n\t\n\t **需不需要全面重写 XMLHttpRequest?**\n\t http://xhr.spec.whatwg.org/#interface-xmlhttprequest\n\t 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。\n\t 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。\n\t\n\t // Event handlers\n\t onloadstart loadstart\n\t onprogress progress\n\t onabort abort\n\t onerror error\n\t onload load\n\t ontimeout timeout\n\t onloadend loadend\n\t onreadystatechange readystatechange\n\t */\n\t\n\tvar Util = __webpack_require__(3)\n\t\n\t// 备份原生 XMLHttpRequest\n\twindow._XMLHttpRequest = window.XMLHttpRequest\n\twindow._ActiveXObject = window.ActiveXObject\n\t\n\t/*\n\t PhantomJS\n\t TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event(\"readystatechange\")')\n\t\n\t https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18\n\t https://github.com/ariya/phantomjs/issues/11289\n\t*/\n\ttry {\n\t new window.Event('custom')\n\t} catch (exception) {\n\t window.Event = function(type, bubbles, cancelable, detail) {\n\t var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent'\n\t event.initCustomEvent(type, bubbles, cancelable, detail)\n\t return event\n\t }\n\t}\n\t\n\tvar XHR_STATES = {\n\t // The object has been constructed.\n\t UNSENT: 0,\n\t // The open() method has been successfully invoked.\n\t OPENED: 1,\n\t // All redirects (if any) have been followed and all HTTP headers of the response have been received.\n\t HEADERS_RECEIVED: 2,\n\t // The response's body is being received.\n\t LOADING: 3,\n\t // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects).\n\t DONE: 4\n\t}\n\t\n\tvar XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ')\n\tvar XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ')\n\tvar XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ')\n\t\n\t// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32\n\tvar HTTP_STATUS_CODES = {\n\t 100: \"Continue\",\n\t 101: \"Switching Protocols\",\n\t 200: \"OK\",\n\t 201: \"Created\",\n\t 202: \"Accepted\",\n\t 203: \"Non-Authoritative Information\",\n\t 204: \"No Content\",\n\t 205: \"Reset Content\",\n\t 206: \"Partial Content\",\n\t 300: \"Multiple Choice\",\n\t 301: \"Moved Permanently\",\n\t 302: \"Found\",\n\t 303: \"See Other\",\n\t 304: \"Not Modified\",\n\t 305: \"Use Proxy\",\n\t 307: \"Temporary Redirect\",\n\t 400: \"Bad Request\",\n\t 401: \"Unauthorized\",\n\t 402: \"Payment Required\",\n\t 403: \"Forbidden\",\n\t 404: \"Not Found\",\n\t 405: \"Method Not Allowed\",\n\t 406: \"Not Acceptable\",\n\t 407: \"Proxy Authentication Required\",\n\t 408: \"Request Timeout\",\n\t 409: \"Conflict\",\n\t 410: \"Gone\",\n\t 411: \"Length Required\",\n\t 412: \"Precondition Failed\",\n\t 413: \"Request Entity Too Large\",\n\t 414: \"Request-URI Too Long\",\n\t 415: \"Unsupported Media Type\",\n\t 416: \"Requested Range Not Satisfiable\",\n\t 417: \"Expectation Failed\",\n\t 422: \"Unprocessable Entity\",\n\t 500: \"Internal Server Error\",\n\t 501: \"Not Implemented\",\n\t 502: \"Bad Gateway\",\n\t 503: \"Service Unavailable\",\n\t 504: \"Gateway Timeout\",\n\t 505: \"HTTP Version Not Supported\"\n\t}\n\t\n\t/*\n\t MockXMLHttpRequest\n\t*/\n\t\n\tfunction MockXMLHttpRequest() {\n\t // 初始化 custom 对象,用于存储自定义属性\n\t this.custom = {\n\t events: {},\n\t requestHeaders: {},\n\t responseHeaders: {}\n\t }\n\t}\n\t\n\tMockXMLHttpRequest._settings = {\n\t timeout: '10-100',\n\t /*\n\t timeout: 50,\n\t timeout: '10-100',\n\t */\n\t}\n\t\n\tMockXMLHttpRequest.setup = function(settings) {\n\t Util.extend(MockXMLHttpRequest._settings, settings)\n\t return MockXMLHttpRequest._settings\n\t}\n\t\n\tUtil.extend(MockXMLHttpRequest, XHR_STATES)\n\tUtil.extend(MockXMLHttpRequest.prototype, XHR_STATES)\n\t\n\t// 标记当前对象为 MockXMLHttpRequest\n\tMockXMLHttpRequest.prototype.mock = true\n\t\n\t// 是否拦截 Ajax 请求\n\tMockXMLHttpRequest.prototype.match = false\n\t\n\t// 初始化 Request 相关的属性和方法\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t // https://xhr.spec.whatwg.org/#the-open()-method\n\t // Sets the request method, request URL, and synchronous flag.\n\t open: function(method, url, async, username, password) {\n\t var that = this\n\t\n\t Util.extend(this.custom, {\n\t method: method,\n\t url: url,\n\t async: typeof async === 'boolean' ? async : true,\n\t username: username,\n\t password: password,\n\t options: {\n\t url: url,\n\t type: method\n\t }\n\t })\n\t\n\t this.custom.timeout = function(timeout) {\n\t if (typeof timeout === 'number') return timeout\n\t if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10)\n\t if (typeof timeout === 'string' && ~timeout.indexOf('-')) {\n\t var tmp = timeout.split('-')\n\t var min = parseInt(tmp[0], 10)\n\t var max = parseInt(tmp[1], 10)\n\t return Math.round(Math.random() * (max - min)) + min\n\t }\n\t }(MockXMLHttpRequest._settings.timeout)\n\t\n\t // 查找与请求参数匹配的数据模板\n\t var item = find(this.custom.options)\n\t\n\t function handle(event) {\n\t // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest\n\t for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) {\n\t try {\n\t that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]\n\t } catch (e) {}\n\t }\n\t // 触发 MockXMLHttpRequest 上的同名事件\n\t that.dispatchEvent(new Event(event.type /*, false, false, that*/ ))\n\t }\n\t\n\t // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。\n\t if (!item) {\n\t // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件\n\t var xhr = createNativeXMLHttpRequest()\n\t this.custom.xhr = xhr\n\t\n\t // 初始化所有事件,用于监听原生 XHR 对象的事件\n\t for (var i = 0; i < XHR_EVENTS.length; i++) {\n\t xhr.addEventListener(XHR_EVENTS[i], handle)\n\t }\n\t\n\t // xhr.open()\n\t if (username) xhr.open(method, url, async, username, password)\n\t else xhr.open(method, url, async)\n\t\n\t // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest\n\t for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) {\n\t try {\n\t xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]\n\t } catch (e) {}\n\t }\n\t\n\t return\n\t }\n\t\n\t // 找到了匹配的数据模板,开始拦截 XHR 请求\n\t this.match = true\n\t this.custom.template = item\n\t this.readyState = MockXMLHttpRequest.OPENED\n\t this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ ))\n\t },\n\t // https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n\t // Combines a header in author request headers.\n\t setRequestHeader: function(name, value) {\n\t // 原生 XHR\n\t if (!this.match) {\n\t this.custom.xhr.setRequestHeader(name, value)\n\t return\n\t }\n\t\n\t // 拦截 XHR\n\t var requestHeaders = this.custom.requestHeaders\n\t if (requestHeaders[name]) requestHeaders[name] += ',' + value\n\t else requestHeaders[name] = value\n\t },\n\t timeout: 0,\n\t withCredentials: false,\n\t upload: {},\n\t // https://xhr.spec.whatwg.org/#the-send()-method\n\t // Initiates the request.\n\t send: function send(data) {\n\t var that = this\n\t this.custom.options.body = data\n\t\n\t // 原生 XHR\n\t if (!this.match) {\n\t this.custom.xhr.send(data)\n\t return\n\t }\n\t\n\t // 拦截 XHR\n\t\n\t // X-Requested-With header\n\t this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest')\n\t\n\t // loadstart The fetch initiates.\n\t this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ ))\n\t\n\t if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步\n\t else done() // 同步\n\t\n\t function done() {\n\t that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED\n\t that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t that.readyState = MockXMLHttpRequest.LOADING\n\t that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t\n\t that.status = 200\n\t that.statusText = HTTP_STATUS_CODES[200]\n\t\n\t // fix #92 #93 by @qddegtya\n\t that.response = that.responseText = JSON.stringify(\n\t convert(that.custom.template, that.custom.options),\n\t null, 4\n\t )\n\t\n\t that.readyState = MockXMLHttpRequest.DONE\n\t that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\t that.dispatchEvent(new Event('load' /*, false, false, that*/ ));\n\t that.dispatchEvent(new Event('loadend' /*, false, false, that*/ ));\n\t }\n\t },\n\t // https://xhr.spec.whatwg.org/#the-abort()-method\n\t // Cancels any network activity.\n\t abort: function abort() {\n\t // 原生 XHR\n\t if (!this.match) {\n\t this.custom.xhr.abort()\n\t return\n\t }\n\t\n\t // 拦截 XHR\n\t this.readyState = MockXMLHttpRequest.UNSENT\n\t this.dispatchEvent(new Event('abort', false, false, this))\n\t this.dispatchEvent(new Event('error', false, false, this))\n\t }\n\t})\n\t\n\t// 初始化 Response 相关的属性和方法\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t responseURL: '',\n\t status: MockXMLHttpRequest.UNSENT,\n\t statusText: '',\n\t // https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n\t getResponseHeader: function(name) {\n\t // 原生 XHR\n\t if (!this.match) {\n\t return this.custom.xhr.getResponseHeader(name)\n\t }\n\t\n\t // 拦截 XHR\n\t return this.custom.responseHeaders[name.toLowerCase()]\n\t },\n\t // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n\t // http://www.utf8-chartable.de/\n\t getAllResponseHeaders: function() {\n\t // 原生 XHR\n\t if (!this.match) {\n\t return this.custom.xhr.getAllResponseHeaders()\n\t }\n\t\n\t // 拦截 XHR\n\t var responseHeaders = this.custom.responseHeaders\n\t var headers = ''\n\t for (var h in responseHeaders) {\n\t if (!responseHeaders.hasOwnProperty(h)) continue\n\t headers += h + ': ' + responseHeaders[h] + '\\r\\n'\n\t }\n\t return headers\n\t },\n\t overrideMimeType: function( /*mime*/ ) {},\n\t responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json'\n\t response: null,\n\t responseText: '',\n\t responseXML: null\n\t})\n\t\n\t// EventTarget\n\tUtil.extend(MockXMLHttpRequest.prototype, {\n\t addEventListener: function addEventListener(type, handle) {\n\t var events = this.custom.events\n\t if (!events[type]) events[type] = []\n\t events[type].push(handle)\n\t },\n\t removeEventListener: function removeEventListener(type, handle) {\n\t var handles = this.custom.events[type] || []\n\t for (var i = 0; i < handles.length; i++) {\n\t if (handles[i] === handle) {\n\t handles.splice(i--, 1)\n\t }\n\t }\n\t },\n\t dispatchEvent: function dispatchEvent(event) {\n\t var handles = this.custom.events[event.type] || []\n\t for (var i = 0; i < handles.length; i++) {\n\t handles[i].call(this, event)\n\t }\n\t\n\t var ontype = 'on' + event.type\n\t if (this[ontype]) this[ontype](event)\n\t }\n\t})\n\t\n\t// Inspired by jQuery\n\tfunction createNativeXMLHttpRequest() {\n\t var isLocal = function() {\n\t var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/\n\t var rurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/\n\t var ajaxLocation = location.href\n\t var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []\n\t return rlocalProtocol.test(ajaxLocParts[1])\n\t }()\n\t\n\t return window.ActiveXObject ?\n\t (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR()\n\t\n\t function createStandardXHR() {\n\t try {\n\t return new window._XMLHttpRequest();\n\t } catch (e) {}\n\t }\n\t\n\t function createActiveXHR() {\n\t try {\n\t return new window._ActiveXObject(\"Microsoft.XMLHTTP\");\n\t } catch (e) {}\n\t }\n\t}\n\t\n\t\n\t// 查找与请求参数匹配的数据模板:URL,Type\n\tfunction find(options) {\n\t\n\t for (var sUrlType in MockXMLHttpRequest.Mock._mocked) {\n\t var item = MockXMLHttpRequest.Mock._mocked[sUrlType]\n\t if (\n\t (!item.rurl || match(item.rurl, options.url)) &&\n\t (!item.rtype || match(item.rtype, options.type.toLowerCase()))\n\t ) {\n\t // console.log('[mock]', options.url, '>', item.rurl)\n\t return item\n\t }\n\t }\n\t\n\t function match(expected, actual) {\n\t if (Util.type(expected) === 'string') {\n\t return expected === actual\n\t }\n\t if (Util.type(expected) === 'regexp') {\n\t return expected.test(actual)\n\t }\n\t }\n\t\n\t}\n\t\n\t// 数据模板 => 响应数据\n\tfunction convert(item, options) {\n\t return Util.isFunction(item.template) ?\n\t item.template(options) : MockXMLHttpRequest.Mock.mock(item.template)\n\t}\n\t\n\tmodule.exports = MockXMLHttpRequest\n\n/***/ })\n/******/ ])\n});\n;\n\n\n// WEBPACK FOOTER //\n// mock-min.js"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 0bf129a854994afac15c","/* global require, module, window */\nvar Handler = require('./mock/handler')\nvar Util = require('./mock/util')\nvar Random = require('./mock/random')\nvar RE = require('./mock/regexp')\nvar toJSONSchema = require('./mock/schema')\nvar valid = require('./mock/valid')\n\nvar XHR\nif (typeof window !== 'undefined') XHR = require('./mock/xhr')\n\n/*!\n Mock - 模拟请求 & 模拟数据\n https://github.com/nuysoft/Mock\n 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com\n*/\nvar Mock = {\n Handler: Handler,\n Random: Random,\n Util: Util,\n XHR: XHR,\n RE: RE,\n toJSONSchema: toJSONSchema,\n valid: valid,\n heredoc: Util.heredoc,\n setup: function(settings) {\n return XHR.setup(settings)\n },\n _mocked: {}\n}\n\nMock.version = '1.0.1-beta3'\n\n// 避免循环依赖\nif (XHR) XHR.Mock = Mock\n\n/*\n * Mock.mock( template )\n * Mock.mock( function() )\n * Mock.mock( rurl, template )\n * Mock.mock( rurl, function(options) )\n * Mock.mock( rurl, rtype, template )\n * Mock.mock( rurl, rtype, function(options) )\n\n 根据数据模板生成模拟数据。\n*/\nMock.mock = function(rurl, rtype, template) {\n // Mock.mock(template)\n if (arguments.length === 1) {\n return Handler.gen(rurl)\n }\n // Mock.mock(rurl, template)\n if (arguments.length === 2) {\n template = rtype\n rtype = undefined\n }\n // 拦截 XHR\n if (XHR) window.XMLHttpRequest = XHR\n Mock._mocked[rurl + (rtype || '')] = {\n rurl: rurl,\n rtype: rtype,\n template: template\n }\n return Mock\n}\n\nmodule.exports = Mock\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock.js\n// module id = 0\n// module chunks = 0","/* \n ## Handler\n\n 处理数据模板。\n \n * Handler.gen( template, name?, context? )\n\n 入口方法。\n\n * Data Template Definition, DTD\n \n 处理数据模板定义。\n\n * Handler.array( options )\n * Handler.object( options )\n * Handler.number( options )\n * Handler.boolean( options )\n * Handler.string( options )\n * Handler.function( options )\n * Handler.regexp( options )\n \n 处理路径(相对和绝对)。\n\n * Handler.getValueByKeyPath( key, options )\n\n * Data Placeholder Definition, DPD\n\n 处理数据占位符定义\n\n * Handler.placeholder( placeholder, context, templateContext, options )\n\n*/\n\nvar Constant = require('./constant')\nvar Util = require('./util')\nvar Parser = require('./parser')\nvar Random = require('./random/')\nvar RE = require('./regexp')\n\nvar Handler = {\n extend: Util.extend\n}\n\n/*\n template 属性值(即数据模板)\n name 属性名\n context 数据上下文,生成后的数据\n templateContext 模板上下文,\n\n Handle.gen(template, name, options)\n context\n currentContext, templateCurrentContext, \n path, templatePath\n root, templateRoot\n*/\nHandler.gen = function(template, name, context) {\n /* jshint -W041 */\n name = name == undefined ? '' : (name + '')\n\n context = context || {}\n context = {\n // 当前访问路径,只有属性名,不包括生成规则\n path: context.path || [Constant.GUID],\n templatePath: context.templatePath || [Constant.GUID++],\n // 最终属性值的上下文\n currentContext: context.currentContext,\n // 属性值模板的上下文\n templateCurrentContext: context.templateCurrentContext || template,\n // 最终值的根\n root: context.root || context.currentContext,\n // 模板的根\n templateRoot: context.templateRoot || context.templateCurrentContext || template\n }\n // console.log('path:', context.path.join('.'), template)\n\n var rule = Parser.parse(name)\n var type = Util.type(template)\n var data\n\n if (Handler[type]) {\n data = Handler[type]({\n // 属性值类型\n type: type,\n // 属性值模板\n template: template,\n // 属性名 + 生成规则\n name: name,\n // 属性名\n parsedName: name ? name.replace(Constant.RE_KEY, '$1') : name,\n\n // 解析后的生成规则\n rule: rule,\n // 相关上下文\n context: context\n })\n\n if (!context.root) context.root = data\n return data\n }\n\n return template\n}\n\nHandler.extend({\n array: function(options) {\n var result = [],\n i, ii;\n\n // 'name|1': []\n // 'name|count': []\n // 'name|min-max': []\n if (options.template.length === 0) return result\n\n // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }]\n if (!options.rule.parameters) {\n for (i = 0; i < options.template.length; i++) {\n options.context.path.push(i)\n options.context.templatePath.push(i)\n result.push(\n Handler.gen(options.template[i], i, {\n path: options.context.path,\n templatePath: options.context.templatePath,\n currentContext: result,\n templateCurrentContext: options.template,\n root: options.context.root || result,\n templateRoot: options.context.templateRoot || options.template\n })\n )\n options.context.path.pop()\n options.context.templatePath.pop()\n }\n } else {\n // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE']\n if (options.rule.min === 1 && options.rule.max === undefined) {\n // fix #17\n options.context.path.push(options.name)\n options.context.templatePath.push(options.name)\n result = Random.pick(\n Handler.gen(options.template, undefined, {\n path: options.context.path,\n templatePath: options.context.templatePath,\n currentContext: result,\n templateCurrentContext: options.template,\n root: options.context.root || result,\n templateRoot: options.context.templateRoot || options.template\n })\n )\n options.context.path.pop()\n options.context.templatePath.pop()\n } else {\n // 'data|+1': [{}, {}]\n if (options.rule.parameters[2]) {\n options.template.__order_index = options.template.__order_index || 0\n\n options.context.path.push(options.name)\n options.context.templatePath.push(options.name)\n result = Handler.gen(options.template, undefined, {\n path: options.context.path,\n templatePath: options.context.templatePath,\n currentContext: result,\n templateCurrentContext: options.template,\n root: options.context.root || result,\n templateRoot: options.context.templateRoot || options.template\n })[\n options.template.__order_index % options.template.length\n ]\n\n options.template.__order_index += +options.rule.parameters[2]\n\n options.context.path.pop()\n options.context.templatePath.pop()\n\n } else {\n // 'data|1-10': [{}]\n for (i = 0; i < options.rule.count; i++) {\n // 'data|1-10': [{}, {}]\n for (ii = 0; ii < options.template.length; ii++) {\n options.context.path.push(result.length)\n options.context.templatePath.push(ii)\n result.push(\n Handler.gen(options.template[ii], result.length, {\n path: options.context.path,\n templatePath: options.context.templatePath,\n currentContext: result,\n templateCurrentContext: options.template,\n root: options.context.root || result,\n templateRoot: options.context.templateRoot || options.template\n })\n )\n options.context.path.pop()\n options.context.templatePath.pop()\n }\n }\n }\n }\n }\n return result\n },\n object: function(options) {\n var result = {},\n keys, fnKeys, key, parsedKey, inc, i;\n\n // 'obj|min-max': {}\n /* jshint -W041 */\n if (options.rule.min != undefined) {\n keys = Util.keys(options.template)\n keys = Random.shuffle(keys)\n keys = keys.slice(0, options.rule.count)\n for (i = 0; i < keys.length; i++) {\n key = keys[i]\n parsedKey = key.replace(Constant.RE_KEY, '$1')\n options.context.path.push(parsedKey)\n options.context.templatePath.push(key)\n result[parsedKey] = Handler.gen(options.template[key], key, {\n path: options.context.path,\n templatePath: options.context.templatePath,\n currentContext: result,\n templateCurrentContext: options.template,\n root: options.context.root || result,\n templateRoot: options.context.templateRoot || options.template\n })\n options.context.path.pop()\n options.context.templatePath.pop()\n }\n\n } else {\n // 'obj': {}\n keys = []\n fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便\n for (key in options.template) {\n (typeof options.template[key] === 'function' ? fnKeys : keys).push(key)\n }\n keys = keys.concat(fnKeys)\n\n /*\n 会改变非函数属性的顺序\n keys = Util.keys(options.template)\n keys.sort(function(a, b) {\n var afn = typeof options.template[a] === 'function'\n var bfn = typeof options.template[b] === 'function'\n if (afn === bfn) return 0\n if (afn && !bfn) return 1\n if (!afn && bfn) return -1\n })\n */\n\n for (i = 0; i < keys.length; i++) {\n key = keys[i]\n parsedKey = key.replace(Constant.RE_KEY, '$1')\n options.context.path.push(parsedKey)\n options.context.templatePath.push(key)\n result[parsedKey] = Handler.gen(options.template[key], key, {\n path: options.context.path,\n templatePath: options.context.templatePath,\n currentContext: result,\n templateCurrentContext: options.template,\n root: options.context.root || result,\n templateRoot: options.context.templateRoot || options.template\n })\n options.context.path.pop()\n options.context.templatePath.pop()\n // 'id|+1': 1\n inc = key.match(Constant.RE_KEY)\n if (inc && inc[2] && Util.type(options.template[key]) === 'number') {\n options.template[key] += parseInt(inc[2], 10)\n }\n }\n }\n return result\n },\n number: function(options) {\n var result, parts;\n if (options.rule.decimal) { // float\n options.template += ''\n parts = options.template.split('.')\n // 'float1|.1-10': 10,\n // 'float2|1-100.1-10': 1,\n // 'float3|999.1-10': 1,\n // 'float4|.3-10': 123.123,\n parts[0] = options.rule.range ? options.rule.count : parts[0]\n parts[1] = (parts[1] || '').slice(0, options.rule.dcount)\n while (parts[1].length < options.rule.dcount) {\n parts[1] += (\n // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789')\n )\n }\n result = parseFloat(parts.join('.'), 10)\n } else { // integer\n // 'grade1|1-100': 1,\n result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template\n }\n return result\n },\n boolean: function(options) {\n var result;\n // 'prop|multiple': false, 当前值是相反值的概率倍数\n // 'prop|probability-probability': false, 当前值与相反值的概率\n result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template\n return result\n },\n string: function(options) {\n var result = '',\n i, placeholders, ph, phed;\n if (options.template.length) {\n\n // 'foo': '★',\n /* jshint -W041 */\n if (options.rule.count == undefined) {\n result += options.template\n }\n\n // 'star|1-5': '★',\n for (i = 0; i < options.rule.count; i++) {\n result += options.template\n }\n // 'email|1-10': '@EMAIL, ',\n placeholders = result.match(Constant.RE_PLACEHOLDER) || [] // A-Z_0-9 > \\w_\n for (i = 0; i < placeholders.length; i++) {\n ph = placeholders[i]\n\n // 遇到转义斜杠,不需要解析占位符\n if (/^\\\\/.test(ph)) {\n placeholders.splice(i--, 1)\n continue\n }\n\n phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options)\n\n // 只有一个占位符,并且没有其他字符\n if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // \n result = phed\n break\n\n if (Util.isNumeric(phed)) {\n result = parseFloat(phed, 10)\n break\n }\n if (/^(true|false)$/.test(phed)) {\n result = phed === 'true' ? true :\n phed === 'false' ? false :\n phed // 已经是布尔值\n break\n }\n }\n result = result.replace(ph, phed)\n }\n\n } else {\n // 'ASCII|1-10': '',\n // 'ASCII': '',\n result = options.rule.range ? Random.string(options.rule.count) : options.template\n }\n return result\n },\n 'function': function(options) {\n // ( context, options )\n return options.template.call(options.context.currentContext, options)\n },\n 'regexp': function(options) {\n var source = ''\n\n // 'name': /regexp/,\n /* jshint -W041 */\n if (options.rule.count == undefined) {\n source += options.template.source // regexp.source\n }\n\n // 'name|1-5': /regexp/,\n for (var i = 0; i < options.rule.count; i++) {\n source += options.template.source\n }\n\n return RE.Handler.gen(\n RE.Parser.parse(\n source\n )\n )\n }\n})\n\nHandler.extend({\n _all: function() {\n var re = {};\n for (var key in Random) re[key.toLowerCase()] = key\n return re\n },\n // 处理占位符,转换为最终值\n placeholder: function(placeholder, obj, templateContext, options) {\n // console.log(options.context.path)\n // 1 key, 2 params\n Constant.RE_PLACEHOLDER.exec('')\n var parts = Constant.RE_PLACEHOLDER.exec(placeholder),\n key = parts && parts[1],\n lkey = key && key.toLowerCase(),\n okey = this._all()[lkey],\n params = parts && parts[2] || ''\n var pathParts = this.splitPathToArray(key)\n\n // 解析占位符的参数\n try {\n // 1. 尝试保持参数的类型\n /*\n #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24)\n [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056)\n 应该属于 Window Firefox 30.0 的 BUG\n */\n /* jshint -W061 */\n params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')')\n } catch (error) {\n // 2. 如果失败,只能解析为字符串\n // console.error(error)\n // if (error instanceof ReferenceError) params = parts[2].split(/,\\s*/);\n // else throw error\n params = parts[2].split(/,\\s*/)\n }\n\n // 占位符优先引用数据模板中的属性\n if (obj && (key in obj)) return obj[key]\n\n // @index @key\n // if (Constant.RE_INDEX.test(key)) return +options.name\n // if (Constant.RE_KEY.test(key)) return options.name\n\n // 绝对路径 or 相对路径\n if (\n key.charAt(0) === '/' ||\n pathParts.length > 1\n ) return this.getValueByKeyPath(key, options)\n\n // 递归引用数据模板中的属性\n if (templateContext &&\n (typeof templateContext === 'object') &&\n (key in templateContext) &&\n (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己\n ) {\n // 先计算被引用的属性值\n templateContext[key] = Handler.gen(templateContext[key], key, {\n currentContext: obj,\n templateCurrentContext: templateContext\n })\n return templateContext[key]\n }\n\n // 如果未找到,则原样返回\n if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder\n\n // 递归解析参数中的占位符\n for (var i = 0; i < params.length; i++) {\n Constant.RE_PLACEHOLDER.exec('')\n if (Constant.RE_PLACEHOLDER.test(params[i])) {\n params[i] = Handler.placeholder(params[i], obj, templateContext, options)\n }\n }\n\n var handle = Random[key] || Random[lkey] || Random[okey]\n switch (Util.type(handle)) {\n case 'array':\n // 自动从数组中取一个,例如 @areas\n return Random.pick(handle)\n case 'function':\n // 执行占位符方法(大多数情况)\n handle.options = options\n var re = handle.apply(Random, params)\n if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。\n delete handle.options\n return re\n }\n },\n getValueByKeyPath: function(key, options) {\n var originalKey = key\n var keyPathParts = this.splitPathToArray(key)\n var absolutePathParts = []\n\n // 绝对路径\n if (key.charAt(0) === '/') {\n absolutePathParts = [options.context.path[0]].concat(\n this.normalizePath(keyPathParts)\n )\n } else {\n // 相对路径\n if (keyPathParts.length > 1) {\n absolutePathParts = options.context.path.slice(0)\n absolutePathParts.pop()\n absolutePathParts = this.normalizePath(\n absolutePathParts.concat(keyPathParts)\n )\n\n }\n }\n\n try {\n key = keyPathParts[keyPathParts.length - 1]\n var currentContext = options.context.root\n var templateCurrentContext = options.context.templateRoot\n for (var i = 1; i < absolutePathParts.length - 1; i++) {\n currentContext = currentContext[absolutePathParts[i]]\n templateCurrentContext = templateCurrentContext[absolutePathParts[i]]\n }\n // 引用的值已经计算好\n if (currentContext && (key in currentContext)) return currentContext[key]\n \n // 尚未计算,递归引用数据模板中的属性\n if (templateCurrentContext &&\n (typeof templateCurrentContext === 'object') &&\n (key in templateCurrentContext) &&\n (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己\n ) {\n // 先计算被引用的属性值\n templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, {\n currentContext: currentContext,\n templateCurrentContext: templateCurrentContext\n })\n return templateCurrentContext[key]\n }\n } catch(err) { }\n\n return '@' + keyPathParts.join('/')\n },\n // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js\n normalizePath: function(pathParts) {\n var newPathParts = []\n for (var i = 0; i < pathParts.length; i++) {\n switch (pathParts[i]) {\n case '..':\n newPathParts.pop()\n break\n case '.':\n break\n default:\n newPathParts.push(pathParts[i])\n }\n }\n return newPathParts\n },\n splitPathToArray: function(path) {\n var parts = path.split(/\\/+/);\n if (!parts[parts.length - 1]) parts = parts.slice(0, -1)\n if (!parts[0]) parts = parts.slice(1)\n return parts;\n }\n})\n\nmodule.exports = Handler\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/handler.js\n// module id = 1\n// module chunks = 0","/*\n ## Constant\n\n 常量集合。\n */\n/*\n RE_KEY\n 'name|min-max': value\n 'name|count': value\n 'name|min-max.dmin-dmax': value\n 'name|min-max.dcount': value\n 'name|count.dmin-dmax': value\n 'name|count.dcount': value\n 'name|+step': value\n\n 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ]\n\n RE_PLACEHOLDER\n placeholder(*)\n\n [正则查看工具](http://www.regexper.com/)\n\n #26 生成规则 支持 负数,例如 number|-100-100\n*/\nmodule.exports = {\n GUID: 1,\n RE_KEY: /(.+)\\|(?:\\+(\\d+)|([\\+\\-]?\\d+-?[\\+\\-]?\\d*)?(?:\\.(\\d+-?\\d*))?)/,\n RE_RANGE: /([\\+\\-]?\\d+)-?([\\+\\-]?\\d+)?/,\n RE_PLACEHOLDER: /\\\\*@([^@#%&()\\?\\s]+)(?:\\((.*?)\\))?/g\n // /\\\\*@([^@#%&()\\?\\s\\/\\.]+)(?:\\((.*?)\\))?/g\n // RE_INDEX: /^index$/,\n // RE_KEY: /^key$/\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/constant.js\n// module id = 2\n// module chunks = 0","/*\n ## Utilities\n*/\nvar Util = {}\n\nUtil.extend = function extend() {\n var target = arguments[0] || {},\n i = 1,\n length = arguments.length,\n options, name, src, copy, clone\n\n if (length === 1) {\n target = this\n i = 0\n }\n\n for (; i < length; i++) {\n options = arguments[i]\n if (!options) continue\n\n for (name in options) {\n src = target[name]\n copy = options[name]\n\n if (target === copy) continue\n if (copy === undefined) continue\n\n if (Util.isArray(copy) || Util.isObject(copy)) {\n if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : []\n if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {}\n\n target[name] = Util.extend(clone, copy)\n } else {\n target[name] = copy\n }\n }\n }\n\n return target\n}\n\nUtil.each = function each(obj, iterator, context) {\n var i, key\n if (this.type(obj) === 'number') {\n for (i = 0; i < obj; i++) {\n iterator(i, i)\n }\n } else if (obj.length === +obj.length) {\n for (i = 0; i < obj.length; i++) {\n if (iterator.call(context, obj[i], i, obj) === false) break\n }\n } else {\n for (key in obj) {\n if (iterator.call(context, obj[key], key, obj) === false) break\n }\n }\n}\n\nUtil.type = function type(obj) {\n return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\\[object (\\w+)\\]/)[1].toLowerCase()\n}\n\nUtil.each('String Object Array RegExp Function'.split(' '), function(value) {\n Util['is' + value] = function(obj) {\n return Util.type(obj) === value.toLowerCase()\n }\n})\n\nUtil.isObjectOrArray = function(value) {\n return Util.isObject(value) || Util.isArray(value)\n}\n\nUtil.isNumeric = function(value) {\n return !isNaN(parseFloat(value)) && isFinite(value)\n}\n\nUtil.keys = function(obj) {\n var keys = [];\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) keys.push(key)\n }\n return keys;\n}\nUtil.values = function(obj) {\n var values = [];\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) values.push(obj[key])\n }\n return values;\n}\n\n/*\n ### Mock.heredoc(fn)\n\n * Mock.heredoc(fn)\n\n 以直观、安全的方式书写(多行)HTML 模板。\n\n **使用示例**如下所示:\n\n var tpl = Mock.heredoc(function() {\n /*!\n {{email}}{{age}}\n \n *\\/\n })\n \n **相关阅读**\n * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、\n*/\nUtil.heredoc = function heredoc(fn) {\n // 1. 移除起始的 function(){ /*!\n // 2. 移除末尾的 */ }\n // 3. 移除起始和末尾的空格\n return fn.toString()\n .replace(/^[^\\/]+\\/\\*!?/, '')\n .replace(/\\*\\/[^\\/]+$/, '')\n .replace(/^[\\s\\xA0]+/, '').replace(/[\\s\\xA0]+$/, '') // .trim()\n}\n\nUtil.noop = function() {}\n\nmodule.exports = Util\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/util.js\n// module id = 3\n// module chunks = 0","/*\n\t## Parser\n\n\t解析数据模板(属性名部分)。\n\n\t* Parser.parse( name )\n\t\t\n\t\t```json\n\t\t{\n\t\t\tparameters: [ name, inc, range, decimal ],\n\t\t\trnage: [ min , max ],\n\n\t\t\tmin: min,\n\t\t\tmax: max,\n\t\t\tcount : count,\n\n\t\t\tdecimal: decimal,\n\t\t\tdmin: dmin,\n\t\t\tdmax: dmax,\n\t\t\tdcount: dcount\n\t\t}\n\t\t```\n */\n\nvar Constant = require('./constant')\nvar Random = require('./random/')\n\n/* jshint -W041 */\nmodule.exports = {\n\tparse: function(name) {\n\t\tname = name == undefined ? '' : (name + '')\n\n\t\tvar parameters = (name || '').match(Constant.RE_KEY)\n\n\t\tvar range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE)\n\t\tvar min = range && range[1] && parseInt(range[1], 10) // || 1\n\t\tvar max = range && range[2] && parseInt(range[2], 10) // || 1\n\t\t\t// repeat || min-max || 1\n\t\t\t// var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1\n\t\tvar count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined\n\n\t\tvar decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE)\n\t\tvar dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0,\n\t\tvar dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0,\n\t\t\t// int || dmin-dmax || 0\n\t\tvar dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined\n\n\t\tvar result = {\n\t\t\t// 1 name, 2 inc, 3 range, 4 decimal\n\t\t\tparameters: parameters,\n\t\t\t// 1 min, 2 max\n\t\t\trange: range,\n\t\t\tmin: min,\n\t\t\tmax: max,\n\t\t\t// min-max\n\t\t\tcount: count,\n\t\t\t// 是否有 decimal\n\t\t\tdecimal: decimal,\n\t\t\tdmin: dmin,\n\t\t\tdmax: dmax,\n\t\t\t// dmin-dimax\n\t\t\tdcount: dcount\n\t\t}\n\n\t\tfor (var r in result) {\n\t\t\tif (result[r] != undefined) return result\n\t\t}\n\n\t\treturn {}\n\t}\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/parser.js\n// module id = 4\n// module chunks = 0","/*\n ## Mock.Random\n \n 工具类,用于生成各种随机数据。\n*/\n\nvar Util = require('../util')\n\nvar Random = {\n extend: Util.extend\n}\n\nRandom.extend(require('./basic'))\nRandom.extend(require('./date'))\nRandom.extend(require('./image'))\nRandom.extend(require('./color'))\nRandom.extend(require('./text'))\nRandom.extend(require('./name'))\nRandom.extend(require('./web'))\nRandom.extend(require('./address'))\nRandom.extend(require('./helper'))\nRandom.extend(require('./misc'))\n\nmodule.exports = Random\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/index.js\n// module id = 5\n// module chunks = 0","/*\n ## Basics\n*/\nmodule.exports = {\n // 返回一个随机的布尔值。\n boolean: function(min, max, cur) {\n if (cur !== undefined) {\n min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1\n max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1\n return Math.random() > 1.0 / (min + max) * min ? !cur : cur\n }\n\n return Math.random() >= 0.5\n },\n bool: function(min, max, cur) {\n return this.boolean(min, max, cur)\n },\n // 返回一个随机的自然数(大于等于 0 的整数)。\n natural: function(min, max) {\n min = typeof min !== 'undefined' ? parseInt(min, 10) : 0\n max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n return Math.round(Math.random() * (max - min)) + min\n },\n // 返回一个随机的整数。\n integer: function(min, max) {\n min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992\n max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53\n return Math.round(Math.random() * (max - min)) + min\n },\n int: function(min, max) {\n return this.integer(min, max)\n },\n // 返回一个随机的浮点数。\n float: function(min, max, dmin, dmax) {\n dmin = dmin === undefined ? 0 : dmin\n dmin = Math.max(Math.min(dmin, 17), 0)\n dmax = dmax === undefined ? 17 : dmax\n dmax = Math.max(Math.min(dmax, 17), 0)\n var ret = this.integer(min, max) + '.';\n for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) {\n ret += (\n // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。\n (i < dcount - 1) ? this.character('number') : this.character('123456789')\n )\n }\n return parseFloat(ret, 10)\n },\n // 返回一个随机字符。\n character: function(pool) {\n var pools = {\n lower: 'abcdefghijklmnopqrstuvwxyz',\n upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n number: '0123456789',\n symbol: '!@#$%^&*()[]'\n }\n pools.alpha = pools.lower + pools.upper\n pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol\n\n pool = pools[('' + pool).toLowerCase()] || pool\n return pool.charAt(this.natural(0, pool.length - 1))\n },\n char: function(pool) {\n return this.character(pool)\n },\n // 返回一个随机字符串。\n string: function(pool, min, max) {\n var len\n switch (arguments.length) {\n case 0: // ()\n len = this.natural(3, 7)\n break\n case 1: // ( length )\n len = pool\n pool = undefined\n break\n case 2:\n // ( pool, length )\n if (typeof arguments[0] === 'string') {\n len = min\n } else {\n // ( min, max )\n len = this.natural(pool, min)\n pool = undefined\n }\n break\n case 3:\n len = this.natural(min, max)\n break\n }\n\n var text = ''\n for (var i = 0; i < len; i++) {\n text += this.character(pool)\n }\n\n return text\n },\n str: function( /*pool, min, max*/ ) {\n return this.string.apply(this, arguments)\n },\n // 返回一个整型数组。\n range: function(start, stop, step) {\n // range( stop )\n if (arguments.length <= 1) {\n stop = start || 0;\n start = 0;\n }\n // range( start, stop )\n step = arguments[2] || 1;\n\n start = +start\n stop = +stop\n step = +step\n\n var len = Math.max(Math.ceil((stop - start) / step), 0);\n var idx = 0;\n var range = new Array(len);\n\n while (idx < len) {\n range[idx++] = start;\n start += step;\n }\n\n return range;\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/basic.js\n// module id = 6\n// module chunks = 0","/*\n ## Date\n*/\nvar patternLetters = {\n yyyy: 'getFullYear',\n yy: function(date) {\n return ('' + date.getFullYear()).slice(2)\n },\n y: 'yy',\n\n MM: function(date) {\n var m = date.getMonth() + 1\n return m < 10 ? '0' + m : m\n },\n M: function(date) {\n return date.getMonth() + 1\n },\n\n dd: function(date) {\n var d = date.getDate()\n return d < 10 ? '0' + d : d\n },\n d: 'getDate',\n\n HH: function(date) {\n var h = date.getHours()\n return h < 10 ? '0' + h : h\n },\n H: 'getHours',\n hh: function(date) {\n var h = date.getHours() % 12\n return h < 10 ? '0' + h : h\n },\n h: function(date) {\n return date.getHours() % 12\n },\n\n mm: function(date) {\n var m = date.getMinutes()\n return m < 10 ? '0' + m : m\n },\n m: 'getMinutes',\n\n ss: function(date) {\n var s = date.getSeconds()\n return s < 10 ? '0' + s : s\n },\n s: 'getSeconds',\n\n SS: function(date) {\n var ms = date.getMilliseconds()\n return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms\n },\n S: 'getMilliseconds',\n\n A: function(date) {\n return date.getHours() < 12 ? 'AM' : 'PM'\n },\n a: function(date) {\n return date.getHours() < 12 ? 'am' : 'pm'\n },\n T: 'getTime'\n}\nmodule.exports = {\n // 日期占位符集合。\n _patternLetters: patternLetters,\n // 日期占位符正则。\n _rformat: new RegExp((function() {\n var re = []\n for (var i in patternLetters) re.push(i)\n return '(' + re.join('|') + ')'\n })(), 'g'),\n // 格式化日期。\n _formatDate: function(date, format) {\n return format.replace(this._rformat, function creatNewSubString($0, flag) {\n return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) :\n patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) :\n date[patternLetters[flag]]()\n })\n },\n // 生成一个随机的 Date 对象。\n _randomDate: function(min, max) { // min, max\n min = min === undefined ? new Date(0) : min\n max = max === undefined ? new Date() : max\n return new Date(Math.random() * (max.getTime() - min.getTime()))\n },\n // 返回一个随机的日期字符串。\n date: function(format) {\n format = format || 'yyyy-MM-dd'\n return this._formatDate(this._randomDate(), format)\n },\n // 返回一个随机的时间字符串。\n time: function(format) {\n format = format || 'HH:mm:ss'\n return this._formatDate(this._randomDate(), format)\n },\n // 返回一个随机的日期和时间字符串。\n datetime: function(format) {\n format = format || 'yyyy-MM-dd HH:mm:ss'\n return this._formatDate(this._randomDate(), format)\n },\n // 返回当前的日期和时间字符串。\n now: function(unit, format) {\n // now(unit) now(format)\n if (arguments.length === 1) {\n // now(format)\n if (!/year|month|day|hour|minute|second|week/.test(unit)) {\n format = unit\n unit = ''\n }\n }\n unit = (unit || '').toLowerCase()\n format = format || 'yyyy-MM-dd HH:mm:ss'\n\n var date = new Date()\n\n /* jshint -W086 */\n // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/\n switch (unit) {\n case 'year':\n date.setMonth(0)\n case 'month':\n date.setDate(1)\n case 'week':\n case 'day':\n date.setHours(0)\n case 'hour':\n date.setMinutes(0)\n case 'minute':\n date.setSeconds(0)\n case 'second':\n date.setMilliseconds(0)\n }\n switch (unit) {\n case 'week':\n date.setDate(date.getDate() - date.getDay())\n }\n\n return this._formatDate(date, format)\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/date.js\n// module id = 7\n// module chunks = 0","/* global document */\n/*\n ## Image\n*/\nmodule.exports = {\n // 常见的广告宽高\n _adSize: [\n '300x250', '250x250', '240x400', '336x280', '180x150',\n '720x300', '468x60', '234x60', '88x31', '120x90',\n '120x60', '120x240', '125x125', '728x90', '160x600',\n '120x600', '300x600'\n ],\n // 常见的屏幕宽高\n _screenSize: [\n '320x200', '320x240', '640x480', '800x480', '800x480',\n '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200',\n '2560x1600'\n ],\n // 常见的视频宽高\n _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'],\n /*\n 生成一个随机的图片地址。\n\n 替代图片源\n http://fpoimg.com/\n 参考自 \n http://rensanning.iteye.com/blog/1933310\n http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485\n */\n image: function(size, background, foreground, format, text) {\n // Random.image( size, background, foreground, text )\n if (arguments.length === 4) {\n text = format\n format = undefined\n }\n // Random.image( size, background, text )\n if (arguments.length === 3) {\n text = foreground\n foreground = undefined\n }\n // Random.image()\n if (!size) size = this.pick(this._adSize)\n\n if (background && ~background.indexOf('#')) background = background.slice(1)\n if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1)\n\n // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello\n return 'http://dummyimage.com/' + size +\n (background ? '/' + background : '') +\n (foreground ? '/' + foreground : '') +\n (format ? '.' + format : '') +\n (text ? '&text=' + text : '')\n },\n img: function() {\n return this.image.apply(this, arguments)\n },\n\n /*\n BrandColors\n http://brandcolors.net/\n A collection of major brand color codes curated by Galen Gidman.\n 大牌公司的颜色集合\n\n // 获取品牌和颜色\n $('h2').each(function(index, item){\n item = $(item)\n console.log('\\'' + item.text() + '\\'', ':', '\\'' + item.next().text() + '\\'', ',')\n })\n */\n _brandColors: {\n '4ormat': '#fb0a2a',\n '500px': '#02adea',\n 'About.me (blue)': '#00405d',\n 'About.me (yellow)': '#ffcc33',\n 'Addvocate': '#ff6138',\n 'Adobe': '#ff0000',\n 'Aim': '#fcd20b',\n 'Amazon': '#e47911',\n 'Android': '#a4c639',\n 'Angie\\'s List': '#7fbb00',\n 'AOL': '#0060a3',\n 'Atlassian': '#003366',\n 'Behance': '#053eff',\n 'Big Cartel': '#97b538',\n 'bitly': '#ee6123',\n 'Blogger': '#fc4f08',\n 'Boeing': '#0039a6',\n 'Booking.com': '#003580',\n 'Carbonmade': '#613854',\n 'Cheddar': '#ff7243',\n 'Code School': '#3d4944',\n 'Delicious': '#205cc0',\n 'Dell': '#3287c1',\n 'Designmoo': '#e54a4f',\n 'Deviantart': '#4e6252',\n 'Designer News': '#2d72da',\n 'Devour': '#fd0001',\n 'DEWALT': '#febd17',\n 'Disqus (blue)': '#59a3fc',\n 'Disqus (orange)': '#db7132',\n 'Dribbble': '#ea4c89',\n 'Dropbox': '#3d9ae8',\n 'Drupal': '#0c76ab',\n 'Dunked': '#2a323a',\n 'eBay': '#89c507',\n 'Ember': '#f05e1b',\n 'Engadget': '#00bdf6',\n 'Envato': '#528036',\n 'Etsy': '#eb6d20',\n 'Evernote': '#5ba525',\n 'Fab.com': '#dd0017',\n 'Facebook': '#3b5998',\n 'Firefox': '#e66000',\n 'Flickr (blue)': '#0063dc',\n 'Flickr (pink)': '#ff0084',\n 'Forrst': '#5b9a68',\n 'Foursquare': '#25a0ca',\n 'Garmin': '#007cc3',\n 'GetGlue': '#2d75a2',\n 'Gimmebar': '#f70078',\n 'GitHub': '#171515',\n 'Google Blue': '#0140ca',\n 'Google Green': '#16a61e',\n 'Google Red': '#dd1812',\n 'Google Yellow': '#fcca03',\n 'Google+': '#dd4b39',\n 'Grooveshark': '#f77f00',\n 'Groupon': '#82b548',\n 'Hacker News': '#ff6600',\n 'HelloWallet': '#0085ca',\n 'Heroku (light)': '#c7c5e6',\n 'Heroku (dark)': '#6567a5',\n 'HootSuite': '#003366',\n 'Houzz': '#73ba37',\n 'HTML5': '#ec6231',\n 'IKEA': '#ffcc33',\n 'IMDb': '#f3ce13',\n 'Instagram': '#3f729b',\n 'Intel': '#0071c5',\n 'Intuit': '#365ebf',\n 'Kickstarter': '#76cc1e',\n 'kippt': '#e03500',\n 'Kodery': '#00af81',\n 'LastFM': '#c3000d',\n 'LinkedIn': '#0e76a8',\n 'Livestream': '#cf0005',\n 'Lumo': '#576396',\n 'Mixpanel': '#a086d3',\n 'Meetup': '#e51937',\n 'Nokia': '#183693',\n 'NVIDIA': '#76b900',\n 'Opera': '#cc0f16',\n 'Path': '#e41f11',\n 'PayPal (dark)': '#1e477a',\n 'PayPal (light)': '#3b7bbf',\n 'Pinboard': '#0000e6',\n 'Pinterest': '#c8232c',\n 'PlayStation': '#665cbe',\n 'Pocket': '#ee4056',\n 'Prezi': '#318bff',\n 'Pusha': '#0f71b4',\n 'Quora': '#a82400',\n 'QUOTE.fm': '#66ceff',\n 'Rdio': '#008fd5',\n 'Readability': '#9c0000',\n 'Red Hat': '#cc0000',\n 'Resource': '#7eb400',\n 'Rockpack': '#0ba6ab',\n 'Roon': '#62b0d9',\n 'RSS': '#ee802f',\n 'Salesforce': '#1798c1',\n 'Samsung': '#0c4da2',\n 'Shopify': '#96bf48',\n 'Skype': '#00aff0',\n 'Snagajob': '#f47a20',\n 'Softonic': '#008ace',\n 'SoundCloud': '#ff7700',\n 'Space Box': '#f86960',\n 'Spotify': '#81b71a',\n 'Sprint': '#fee100',\n 'Squarespace': '#121212',\n 'StackOverflow': '#ef8236',\n 'Staples': '#cc0000',\n 'Status Chart': '#d7584f',\n 'Stripe': '#008cdd',\n 'StudyBlue': '#00afe1',\n 'StumbleUpon': '#f74425',\n 'T-Mobile': '#ea0a8e',\n 'Technorati': '#40a800',\n 'The Next Web': '#ef4423',\n 'Treehouse': '#5cb868',\n 'Trulia': '#5eab1f',\n 'Tumblr': '#34526f',\n 'Twitch.tv': '#6441a5',\n 'Twitter': '#00acee',\n 'TYPO3': '#ff8700',\n 'Ubuntu': '#dd4814',\n 'Ustream': '#3388ff',\n 'Verizon': '#ef1d1d',\n 'Vimeo': '#86c9ef',\n 'Vine': '#00a478',\n 'Virb': '#06afd8',\n 'Virgin Media': '#cc0000',\n 'Wooga': '#5b009c',\n 'WordPress (blue)': '#21759b',\n 'WordPress (orange)': '#d54e21',\n 'WordPress (grey)': '#464646',\n 'Wunderlist': '#2b88d9',\n 'XBOX': '#9bc848',\n 'XING': '#126567',\n 'Yahoo!': '#720e9e',\n 'Yandex': '#ffcc00',\n 'Yelp': '#c41200',\n 'YouTube': '#c4302b',\n 'Zalongo': '#5498dc',\n 'Zendesk': '#78a300',\n 'Zerply': '#9dcc7a',\n 'Zootool': '#5e8b1d'\n },\n _brandNames: function() {\n var brands = [];\n for (var b in this._brandColors) {\n brands.push(b)\n }\n return brands\n },\n /*\n 生成一段随机的 Base64 图片编码。\n\n https://github.com/imsky/holder\n Holder renders image placeholders entirely on the client side.\n\n dataImageHolder: function(size) {\n return 'holder.js/' + size\n },\n */\n dataImage: function(size, text) {\n var canvas\n if (typeof document !== 'undefined') {\n canvas = document.createElement('canvas')\n } else {\n /*\n https://github.com/Automattic/node-canvas\n npm install canvas --save\n 安装问题:\n * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva\n * https://github.com/Automattic/node-canvas/issues/415\n * https://github.com/Automattic/node-canvas/wiki/_pages\n\n PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。\n */\n var Canvas = module.require('canvas')\n canvas = new Canvas()\n }\n\n var ctx = canvas && canvas.getContext && canvas.getContext(\"2d\")\n if (!canvas || !ctx) return ''\n\n if (!size) size = this.pick(this._adSize)\n text = text !== undefined ? text : size\n\n size = size.split('x')\n\n var width = parseInt(size[0], 10),\n height = parseInt(size[1], 10),\n background = this._brandColors[this.pick(this._brandNames())],\n foreground = '#FFF',\n text_height = 14,\n font = 'sans-serif';\n\n canvas.width = width\n canvas.height = height\n ctx.textAlign = 'center'\n ctx.textBaseline = 'middle'\n ctx.fillStyle = background\n ctx.fillRect(0, 0, width, height)\n ctx.fillStyle = foreground\n ctx.font = 'bold ' + text_height + 'px ' + font\n ctx.fillText(text, (width / 2), (height / 2), width)\n return canvas.toDataURL('image/png')\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/image.js\n// module id = 8\n// module chunks = 0","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tmodule.children = [];\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n}\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 9\n// module chunks = 0","/*\n ## Color\n\n http://llllll.li/randomColor/\n A color generator for JavaScript.\n randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art.\n\n http://randomcolour.com/\n var bg_colour = Math.floor(Math.random() * 16777215).toString(16);\n bg_colour = \"#\" + (\"000000\" + bg_colour).slice(-6);\n document.bgColor = bg_colour;\n \n http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult.\n https://github.com/devongovett/color-generator\n\n http://www.paulirish.com/2009/random-hex-color-code-snippets/\n Random Hex Color Code Generator in JavaScript\n\n http://chancejs.com/#color\n chance.color()\n // => '#79c157'\n chance.color({format: 'hex'})\n // => '#d67118'\n chance.color({format: 'shorthex'})\n // => '#60f'\n chance.color({format: 'rgb'})\n // => 'rgb(110,52,164)'\n\n http://tool.c7sky.com/webcolor\n 网页设计常用色彩搭配表\n \n https://github.com/One-com/one-color\n An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels.\n API 很赞\n\n https://github.com/harthur/color\n JavaScript color conversion and manipulation library\n\n https://github.com/leaverou/css-colors\n Share & convert CSS colors\n http://leaverou.github.io/css-colors/#slategray\n Type a CSS color keyword, #hex, hsl(), rgba(), whatever:\n\n 色调 hue\n http://baike.baidu.com/view/23368.htm\n 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。\n 饱和度 saturation\n http://baike.baidu.com/view/189644.htm\n 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。\n 亮度 brightness\n http://baike.baidu.com/view/34773.htm\n 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。\n 照度 luminosity\n 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。\n\n http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript\n var letters = '0123456789ABCDEF'.split('')\n var color = '#'\n for (var i = 0; i < 6; i++) {\n color += letters[Math.floor(Math.random() * 16)]\n }\n return color\n \n // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。\n // _brainlessColor()\n var color = Math.floor(\n Math.random() *\n (16 * 16 * 16 * 16 * 16 * 16 - 1)\n ).toString(16)\n color = \"#\" + (\"000000\" + color).slice(-6)\n return color.toUpperCase()\n*/\n\nvar Convert = require('./color_convert')\nvar DICT = require('./color_dict')\n\nmodule.exports = {\n // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。\n color: function(name) {\n if (name || DICT[name]) return DICT[name].nicer\n return this.hex()\n },\n // #DAC0DE\n hex: function() {\n var hsv = this._goldenRatioColor()\n var rgb = Convert.hsv2rgb(hsv)\n var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2])\n return hex\n },\n // rgb(128,255,255)\n rgb: function() {\n var hsv = this._goldenRatioColor()\n var rgb = Convert.hsv2rgb(hsv)\n return 'rgb(' +\n parseInt(rgb[0], 10) + ', ' +\n parseInt(rgb[1], 10) + ', ' +\n parseInt(rgb[2], 10) + ')'\n },\n // rgba(128,255,255,0.3)\n rgba: function() {\n var hsv = this._goldenRatioColor()\n var rgb = Convert.hsv2rgb(hsv)\n return 'rgba(' +\n parseInt(rgb[0], 10) + ', ' +\n parseInt(rgb[1], 10) + ', ' +\n parseInt(rgb[2], 10) + ', ' +\n Math.random().toFixed(2) + ')'\n },\n // hsl(300,80%,90%)\n hsl: function() {\n var hsv = this._goldenRatioColor()\n var hsl = Convert.hsv2hsl(hsv)\n return 'hsl(' +\n parseInt(hsl[0], 10) + ', ' +\n parseInt(hsl[1], 10) + ', ' +\n parseInt(hsl[2], 10) + ')'\n },\n // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/\n // https://github.com/devongovett/color-generator/blob/master/index.js\n // 随机生成一个有吸引力的颜色。\n _goldenRatioColor: function(saturation, value) {\n this._goldenRatio = 0.618033988749895\n this._hue = this._hue || Math.random()\n this._hue += this._goldenRatio\n this._hue %= 1\n\n if (typeof saturation !== \"number\") saturation = 0.5;\n if (typeof value !== \"number\") value = 0.95;\n\n return [\n this._hue * 360,\n saturation * 100,\n value * 100\n ]\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/color.js\n// module id = 10\n// module chunks = 0","/*\n ## Color Convert\n\n http://blog.csdn.net/idfaya/article/details/6770414\n 颜色空间RGB与HSV(HSL)的转换\n*/\n// https://github.com/harthur/color-convert/blob/master/conversions.js\nmodule.exports = {\n\trgb2hsl: function rgb2hsl(rgb) {\n\t\tvar r = rgb[0] / 255,\n\t\t\tg = rgb[1] / 255,\n\t\t\tb = rgb[2] / 255,\n\t\t\tmin = Math.min(r, g, b),\n\t\t\tmax = Math.max(r, g, b),\n\t\t\tdelta = max - min,\n\t\t\th, s, l;\n\n\t\tif (max == min)\n\t\t\th = 0;\n\t\telse if (r == max)\n\t\t\th = (g - b) / delta;\n\t\telse if (g == max)\n\t\t\th = 2 + (b - r) / delta;\n\t\telse if (b == max)\n\t\t\th = 4 + (r - g) / delta;\n\n\t\th = Math.min(h * 60, 360);\n\n\t\tif (h < 0)\n\t\t\th += 360;\n\n\t\tl = (min + max) / 2;\n\n\t\tif (max == min)\n\t\t\ts = 0;\n\t\telse if (l <= 0.5)\n\t\t\ts = delta / (max + min);\n\t\telse\n\t\t\ts = delta / (2 - max - min);\n\n\t\treturn [h, s * 100, l * 100];\n\t},\n\trgb2hsv: function rgb2hsv(rgb) {\n\t\tvar r = rgb[0],\n\t\t\tg = rgb[1],\n\t\t\tb = rgb[2],\n\t\t\tmin = Math.min(r, g, b),\n\t\t\tmax = Math.max(r, g, b),\n\t\t\tdelta = max - min,\n\t\t\th, s, v;\n\n\t\tif (max === 0)\n\t\t\ts = 0;\n\t\telse\n\t\t\ts = (delta / max * 1000) / 10;\n\n\t\tif (max == min)\n\t\t\th = 0;\n\t\telse if (r == max)\n\t\t\th = (g - b) / delta;\n\t\telse if (g == max)\n\t\t\th = 2 + (b - r) / delta;\n\t\telse if (b == max)\n\t\t\th = 4 + (r - g) / delta;\n\n\t\th = Math.min(h * 60, 360);\n\n\t\tif (h < 0)\n\t\t\th += 360;\n\n\t\tv = ((max / 255) * 1000) / 10;\n\n\t\treturn [h, s, v];\n\t},\n\thsl2rgb: function hsl2rgb(hsl) {\n\t\tvar h = hsl[0] / 360,\n\t\t\ts = hsl[1] / 100,\n\t\t\tl = hsl[2] / 100,\n\t\t\tt1, t2, t3, rgb, val;\n\n\t\tif (s === 0) {\n\t\t\tval = l * 255;\n\t\t\treturn [val, val, val];\n\t\t}\n\n\t\tif (l < 0.5)\n\t\t\tt2 = l * (1 + s);\n\t\telse\n\t\t\tt2 = l + s - l * s;\n\t\tt1 = 2 * l - t2;\n\n\t\trgb = [0, 0, 0];\n\t\tfor (var i = 0; i < 3; i++) {\n\t\t\tt3 = h + 1 / 3 * -(i - 1);\n\t\t\tif (t3 < 0) t3++;\n\t\t\tif (t3 > 1) t3--;\n\n\t\t\tif (6 * t3 < 1)\n\t\t\t\tval = t1 + (t2 - t1) * 6 * t3;\n\t\t\telse if (2 * t3 < 1)\n\t\t\t\tval = t2;\n\t\t\telse if (3 * t3 < 2)\n\t\t\t\tval = t1 + (t2 - t1) * (2 / 3 - t3) * 6;\n\t\t\telse\n\t\t\t\tval = t1;\n\n\t\t\trgb[i] = val * 255;\n\t\t}\n\n\t\treturn rgb;\n\t},\n\thsl2hsv: function hsl2hsv(hsl) {\n\t\tvar h = hsl[0],\n\t\t\ts = hsl[1] / 100,\n\t\t\tl = hsl[2] / 100,\n\t\t\tsv, v;\n\t\tl *= 2;\n\t\ts *= (l <= 1) ? l : 2 - l;\n\t\tv = (l + s) / 2;\n\t\tsv = (2 * s) / (l + s);\n\t\treturn [h, sv * 100, v * 100];\n\t},\n\thsv2rgb: function hsv2rgb(hsv) {\n\t\tvar h = hsv[0] / 60\n\t\tvar s = hsv[1] / 100\n\t\tvar v = hsv[2] / 100\n\t\tvar hi = Math.floor(h) % 6\n\n\t\tvar f = h - Math.floor(h)\n\t\tvar p = 255 * v * (1 - s)\n\t\tvar q = 255 * v * (1 - (s * f))\n\t\tvar t = 255 * v * (1 - (s * (1 - f)))\n\n\t\tv = 255 * v\n\n\t\tswitch (hi) {\n\t\t\tcase 0:\n\t\t\t\treturn [v, t, p]\n\t\t\tcase 1:\n\t\t\t\treturn [q, v, p]\n\t\t\tcase 2:\n\t\t\t\treturn [p, v, t]\n\t\t\tcase 3:\n\t\t\t\treturn [p, q, v]\n\t\t\tcase 4:\n\t\t\t\treturn [t, p, v]\n\t\t\tcase 5:\n\t\t\t\treturn [v, p, q]\n\t\t}\n\t},\n\thsv2hsl: function hsv2hsl(hsv) {\n\t\tvar h = hsv[0],\n\t\t\ts = hsv[1] / 100,\n\t\t\tv = hsv[2] / 100,\n\t\t\tsl, l;\n\n\t\tl = (2 - s) * v;\n\t\tsl = s * v;\n\t\tsl /= (l <= 1) ? l : 2 - l;\n\t\tl /= 2;\n\t\treturn [h, sl * 100, l * 100];\n\t},\n\t// http://www.140byt.es/keywords/color\n\trgb2hex: function(\n\t\ta, // red, as a number from 0 to 255\n\t\tb, // green, as a number from 0 to 255\n\t\tc // blue, as a number from 0 to 255\n\t) {\n\t\treturn \"#\" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1)\n\t},\n\thex2rgb: function(\n\t\ta // take a \"#xxxxxx\" hex string,\n\t) {\n\t\ta = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0;\n\t\treturn [a >> 16, a >> 8 & 255, a & 255]\n\t}\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/color_convert.js\n// module id = 11\n// module chunks = 0","/*\n ## Color 字典数据\n\n 字典数据来源 [A nicer color palette for the web](http://clrs.cc/)\n*/\nmodule.exports = {\n // name value nicer\n navy: {\n value: '#000080',\n nicer: '#001F3F'\n },\n blue: {\n value: '#0000ff',\n nicer: '#0074D9'\n },\n aqua: {\n value: '#00ffff',\n nicer: '#7FDBFF'\n },\n teal: {\n value: '#008080',\n nicer: '#39CCCC'\n },\n olive: {\n value: '#008000',\n nicer: '#3D9970'\n },\n green: {\n value: '#008000',\n nicer: '#2ECC40'\n },\n lime: {\n value: '#00ff00',\n nicer: '#01FF70'\n },\n yellow: {\n value: '#ffff00',\n nicer: '#FFDC00'\n },\n orange: {\n value: '#ffa500',\n nicer: '#FF851B'\n },\n red: {\n value: '#ff0000',\n nicer: '#FF4136'\n },\n maroon: {\n value: '#800000',\n nicer: '#85144B'\n },\n fuchsia: {\n value: '#ff00ff',\n nicer: '#F012BE'\n },\n purple: {\n value: '#800080',\n nicer: '#B10DC9'\n },\n silver: {\n value: '#c0c0c0',\n nicer: '#DDDDDD'\n },\n gray: {\n value: '#808080',\n nicer: '#AAAAAA'\n },\n black: {\n value: '#000000',\n nicer: '#111111'\n },\n white: {\n value: '#FFFFFF',\n nicer: '#FFFFFF'\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/color_dict.js\n// module id = 12\n// module chunks = 0","/*\n ## Text\n\n http://www.lipsum.com/\n*/\nvar Basic = require('./basic')\nvar Helper = require('./helper')\n\nfunction range(defaultMin, defaultMax, min, max) {\n return min === undefined ? Basic.natural(defaultMin, defaultMax) : // ()\n max === undefined ? min : // ( len )\n Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max )\n}\n\nmodule.exports = {\n // 随机生成一段文本。\n paragraph: function(min, max) {\n var len = range(3, 7, min, max)\n var result = []\n for (var i = 0; i < len; i++) {\n result.push(this.sentence())\n }\n return result.join(' ')\n },\n // \n cparagraph: function(min, max) {\n var len = range(3, 7, min, max)\n var result = []\n for (var i = 0; i < len; i++) {\n result.push(this.csentence())\n }\n return result.join('')\n },\n // 随机生成一个句子,第一个单词的首字母大写。\n sentence: function(min, max) {\n var len = range(12, 18, min, max)\n var result = []\n for (var i = 0; i < len; i++) {\n result.push(this.word())\n }\n return Helper.capitalize(result.join(' ')) + '.'\n },\n // 随机生成一个中文句子。\n csentence: function(min, max) {\n var len = range(12, 18, min, max)\n var result = []\n for (var i = 0; i < len; i++) {\n result.push(this.cword())\n }\n\n return result.join('') + '。'\n },\n // 随机生成一个单词。\n word: function(min, max) {\n var len = range(3, 10, min, max)\n var result = '';\n for (var i = 0; i < len; i++) {\n result += Basic.character('lower')\n }\n return result\n },\n // 随机生成一个或多个汉字。\n cword: function(pool, min, max) {\n // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm\n var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'\n\n var len\n switch (arguments.length) {\n case 0: // ()\n pool = DICT_KANZI\n len = 1\n break\n case 1: // ( pool )\n if (typeof arguments[0] === 'string') {\n len = 1\n } else {\n // ( length )\n len = pool\n pool = DICT_KANZI\n }\n break\n case 2:\n // ( pool, length )\n if (typeof arguments[0] === 'string') {\n len = min\n } else {\n // ( min, max )\n len = this.natural(pool, min)\n pool = DICT_KANZI\n }\n break\n case 3:\n len = this.natural(min, max)\n break\n }\n\n var result = ''\n for (var i = 0; i < len; i++) {\n result += pool.charAt(this.natural(0, pool.length - 1))\n }\n return result\n },\n // 随机生成一句标题,其中每个单词的首字母大写。\n title: function(min, max) {\n var len = range(3, 7, min, max)\n var result = []\n for (var i = 0; i < len; i++) {\n result.push(this.capitalize(this.word()))\n }\n return result.join(' ')\n },\n // 随机生成一句中文标题。\n ctitle: function(min, max) {\n var len = range(3, 7, min, max)\n var result = []\n for (var i = 0; i < len; i++) {\n result.push(this.cword())\n }\n return result.join('')\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/text.js\n// module id = 13\n// module chunks = 0","/*\n ## Helpers\n*/\n\nvar Util = require('../util')\n\nmodule.exports = {\n\t// 把字符串的第一个字母转换为大写。\n\tcapitalize: function(word) {\n\t\treturn (word + '').charAt(0).toUpperCase() + (word + '').substr(1)\n\t},\n\t// 把字符串转换为大写。\n\tupper: function(str) {\n\t\treturn (str + '').toUpperCase()\n\t},\n\t// 把字符串转换为小写。\n\tlower: function(str) {\n\t\treturn (str + '').toLowerCase()\n\t},\n\t// 从数组中随机选取一个元素,并返回。\n\tpick: function pick(arr, min, max) {\n\t\t// pick( item1, item2 ... )\n\t\tif (!Util.isArray(arr)) {\n\t\t\tarr = [].slice.call(arguments)\n\t\t\tmin = 1\n\t\t\tmax = 1\n\t\t} else {\n\t\t\t// pick( [ item1, item2 ... ] )\n\t\t\tif (min === undefined) min = 1\n\n\t\t\t// pick( [ item1, item2 ... ], count )\n\t\t\tif (max === undefined) max = min\n\t\t}\n\n\t\tif (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]\n\n\t\t// pick( [ item1, item2 ... ], min, max )\n\t\treturn this.shuffle(arr, min, max)\n\n\t\t// 通过参数个数判断方法签名,扩展性太差!#90\n\t\t// switch (arguments.length) {\n\t\t// \tcase 1:\n\t\t// \t\t// pick( [ item1, item2 ... ] )\n\t\t// \t\treturn arr[this.natural(0, arr.length - 1)]\n\t\t// \tcase 2:\n\t\t// \t\t// pick( [ item1, item2 ... ], count )\n\t\t// \t\tmax = min\n\t\t// \t\t\t/* falls through */\n\t\t// \tcase 3:\n\t\t// \t\t// pick( [ item1, item2 ... ], min, max )\n\t\t// \t\treturn this.shuffle(arr, min, max)\n\t\t// }\n\t},\n\t/*\n\t 打乱数组中元素的顺序,并返回。\n\t Given an array, scramble the order and return it.\n\n\t 其他的实现思路:\n\t // https://code.google.com/p/jslibs/wiki/JavascriptTips\n\t result = result.sort(function() {\n\t return Math.random() - 0.5\n\t })\n\t*/\n\tshuffle: function shuffle(arr, min, max) {\n\t\tarr = arr || []\n\t\tvar old = arr.slice(0),\n\t\t\tresult = [],\n\t\t\tindex = 0,\n\t\t\tlength = old.length;\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tindex = this.natural(0, old.length - 1)\n\t\t\tresult.push(old[index])\n\t\t\told.splice(index, 1)\n\t\t}\n\t\tswitch (arguments.length) {\n\t\t\tcase 0:\n\t\t\tcase 1:\n\t\t\t\treturn result\n\t\t\tcase 2:\n\t\t\t\tmax = min\n\t\t\t\t\t/* falls through */\n\t\t\tcase 3:\n\t\t\t\tmin = parseInt(min, 10)\n\t\t\t\tmax = parseInt(max, 10)\n\t\t\t\treturn result.slice(0, this.natural(min, max))\n\t\t}\n\t},\n\t/*\n\t * Random.order(item, item)\n\t * Random.order([item, item ...])\n\n\t 顺序获取数组中的元素\n\n\t [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22)\n\n\t 不支持单独调用!\n\t*/\n\torder: function order(array) {\n\t\torder.cache = order.cache || {}\n\n\t\tif (arguments.length > 1) array = [].slice.call(arguments, 0)\n\n\t\t// options.context.path/templatePath\n\t\tvar options = order.options\n\t\tvar templatePath = options.context.templatePath.join('.')\n\n\t\tvar cache = (\n\t\t\torder.cache[templatePath] = order.cache[templatePath] || {\n\t\t\t\tindex: 0,\n\t\t\t\tarray: array\n\t\t\t}\n\t\t)\n\n\t\treturn cache.array[cache.index++ % cache.array.length]\n\t}\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/helper.js\n// module id = 14\n// module chunks = 0","/*\n ## Name\n\n [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html)\n*/\nmodule.exports = {\n\t// 随机生成一个常见的英文名。\n\tfirst: function() {\n\t\tvar names = [\n\t\t\t// male\n\t\t\t\"James\", \"John\", \"Robert\", \"Michael\", \"William\",\n\t\t\t\"David\", \"Richard\", \"Charles\", \"Joseph\", \"Thomas\",\n\t\t\t\"Christopher\", \"Daniel\", \"Paul\", \"Mark\", \"Donald\",\n\t\t\t\"George\", \"Kenneth\", \"Steven\", \"Edward\", \"Brian\",\n\t\t\t\"Ronald\", \"Anthony\", \"Kevin\", \"Jason\", \"Matthew\",\n\t\t\t\"Gary\", \"Timothy\", \"Jose\", \"Larry\", \"Jeffrey\",\n\t\t\t\"Frank\", \"Scott\", \"Eric\"\n\t\t].concat([\n\t\t\t// female\n\t\t\t\"Mary\", \"Patricia\", \"Linda\", \"Barbara\", \"Elizabeth\",\n\t\t\t\"Jennifer\", \"Maria\", \"Susan\", \"Margaret\", \"Dorothy\",\n\t\t\t\"Lisa\", \"Nancy\", \"Karen\", \"Betty\", \"Helen\",\n\t\t\t\"Sandra\", \"Donna\", \"Carol\", \"Ruth\", \"Sharon\",\n\t\t\t\"Michelle\", \"Laura\", \"Sarah\", \"Kimberly\", \"Deborah\",\n\t\t\t\"Jessica\", \"Shirley\", \"Cynthia\", \"Angela\", \"Melissa\",\n\t\t\t\"Brenda\", \"Amy\", \"Anna\"\n\t\t])\n\t\treturn this.pick(names)\n\t\t\t// or this.capitalize(this.word())\n\t},\n\t// 随机生成一个常见的英文姓。\n\tlast: function() {\n\t\tvar names = [\n\t\t\t\"Smith\", \"Johnson\", \"Williams\", \"Brown\", \"Jones\",\n\t\t\t\"Miller\", \"Davis\", \"Garcia\", \"Rodriguez\", \"Wilson\",\n\t\t\t\"Martinez\", \"Anderson\", \"Taylor\", \"Thomas\", \"Hernandez\",\n\t\t\t\"Moore\", \"Martin\", \"Jackson\", \"Thompson\", \"White\",\n\t\t\t\"Lopez\", \"Lee\", \"Gonzalez\", \"Harris\", \"Clark\",\n\t\t\t\"Lewis\", \"Robinson\", \"Walker\", \"Perez\", \"Hall\",\n\t\t\t\"Young\", \"Allen\"\n\t\t]\n\t\treturn this.pick(names)\n\t\t\t// or this.capitalize(this.word())\n\t},\n\t// 随机生成一个常见的英文姓名。\n\tname: function(middle) {\n\t\treturn this.first() + ' ' +\n\t\t\t(middle ? this.first() + ' ' : '') +\n\t\t\tthis.last()\n\t},\n\t/*\n\t 随机生成一个常见的中文姓。\n\t [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm)\n\t [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/)\n\t */\n\tcfirst: function() {\n\t\tvar names = (\n\t\t\t'王 李 张 刘 陈 杨 赵 黄 周 吴 ' +\n\t\t\t'徐 孙 胡 朱 高 林 何 郭 马 罗 ' +\n\t\t\t'梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' +\n\t\t\t'程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' +\n\t\t\t'苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' +\n\t\t\t'余 潘 杜 戴 夏 锺 汪 田 任 姜 ' +\n\t\t\t'范 方 石 姚 谭 廖 邹 熊 金 陆 ' +\n\t\t\t'郝 孔 白 崔 康 毛 邱 秦 江 史 ' +\n\t\t\t'顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' +\n\t\t\t'尹 黎 易 常 武 乔 贺 赖 龚 文'\n\t\t).split(' ')\n\t\treturn this.pick(names)\n\t},\n\t/*\n\t 随机生成一个常见的中文名。\n\t [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html)\n\t */\n\tclast: function() {\n\t\tvar names = (\n\t\t\t'伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' +\n\t\t\t'洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' +\n\t\t\t'平 刚 桂英'\n\t\t).split(' ')\n\t\treturn this.pick(names)\n\t},\n\t// 随机生成一个常见的中文姓名。\n\tcname: function() {\n\t\treturn this.cfirst() + this.clast()\n\t}\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/name.js\n// module id = 15\n// module chunks = 0","/*\n ## Web\n*/\nmodule.exports = {\n /*\n 随机生成一个 URL。\n\n [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt)\n http Hypertext Transfer Protocol \n ftp File Transfer protocol \n gopher The Gopher protocol \n mailto Electronic mail address \n mid Message identifiers for electronic mail \n cid Content identifiers for MIME body part \n news Usenet news \n nntp Usenet news for local NNTP access only \n prospero Access using the prospero protocols \n telnet rlogin tn3270 Reference to interactive sessions\n wais Wide Area Information Servers \n */\n url: function(protocol, host) {\n return (protocol || this.protocol()) + '://' + // protocol?\n (host || this.domain()) + // host?\n '/' + this.word()\n },\n // 随机生成一个 URL 协议。\n protocol: function() {\n return this.pick(\n // 协议簇\n 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ')\n )\n },\n // 随机生成一个域名。\n domain: function(tld) {\n return this.word() + '.' + (tld || this.tld())\n },\n /*\n 随机生成一个顶级域名。\n 国际顶级域名 international top-level domain-names, iTLDs\n 国家顶级域名 national top-level domainnames, nTLDs\n [域名后缀大全](http://www.163ns.com/zixun/post/4417.html)\n */\n tld: function() { // Top Level Domain\n return this.pick(\n (\n // 域名后缀\n 'com net org edu gov int mil cn ' +\n // 国内域名\n 'com.cn net.cn gov.cn org.cn ' +\n // 中文国内域名\n '中国 中国互联.公司 中国互联.网络 ' +\n // 新国际域名\n 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' +\n // 世界各国域名后缀\n 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw'\n ).split(' ')\n )\n },\n // 随机生成一个邮件地址。\n email: function(domain) {\n return this.character('lower') + '.' + this.word() + '@' +\n (\n domain ||\n (this.word() + '.' + this.tld())\n )\n // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld()\n // return this.word() + '@' + (domain || this.domain())\n },\n // 随机生成一个 IP 地址。\n ip: function() {\n return this.natural(0, 255) + '.' +\n this.natural(0, 255) + '.' +\n this.natural(0, 255) + '.' +\n this.natural(0, 255)\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/web.js\n// module id = 16\n// module chunks = 0","/*\n ## Address\n*/\n\nvar DICT = require('./address_dict')\nvar REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']\n\nmodule.exports = {\n // 随机生成一个大区。\n region: function() {\n return this.pick(REGION)\n },\n // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。\n province: function() {\n return this.pick(DICT).name\n },\n // 随机生成一个(中国)市。\n city: function(prefix) {\n var province = this.pick(DICT)\n var city = this.pick(province.children)\n return prefix ? [province.name, city.name].join(' ') : city.name\n },\n // 随机生成一个(中国)县。\n county: function(prefix) {\n var province = this.pick(DICT)\n var city = this.pick(province.children)\n var county = this.pick(city.children) || {\n name: '-'\n }\n return prefix ? [province.name, city.name, county.name].join(' ') : county.name\n },\n // 随机生成一个邮政编码(六位数字)。\n zip: function(len) {\n var zip = ''\n for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9)\n return zip\n }\n\n // address: function() {},\n // phone: function() {},\n // areacode: function() {},\n // street: function() {},\n // street_suffixes: function() {},\n // street_suffix: function() {},\n // states: function() {},\n // state: function() {},\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/address.js\n// module id = 17\n// module chunks = 0","/*\n ## Address 字典数据\n\n 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856\n\n 国标 省(市)级行政区划码表\n\n 华北 北京市 天津市 河北省 山西省 内蒙古自治区\n 东北 辽宁省 吉林省 黑龙江省\n 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省\n 华南 广东省 广西壮族自治区 海南省\n 华中 河南省 湖北省 湖南省\n 西南 重庆市 四川省 贵州省 云南省 西藏自治区\n 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区\n 港澳台 香港特别行政区 澳门特别行政区 台湾省\n \n **排序**\n \n ```js\n var map = {}\n _.each(_.keys(REGIONS),function(id){\n map[id] = REGIONS[ID]\n })\n JSON.stringify(map)\n ```\n*/\nvar DICT = {\n \"110000\": \"北京\",\n \"110100\": \"北京市\",\n \"110101\": \"东城区\",\n \"110102\": \"西城区\",\n \"110105\": \"朝阳区\",\n \"110106\": \"丰台区\",\n \"110107\": \"石景山区\",\n \"110108\": \"海淀区\",\n \"110109\": \"门头沟区\",\n \"110111\": \"房山区\",\n \"110112\": \"通州区\",\n \"110113\": \"顺义区\",\n \"110114\": \"昌平区\",\n \"110115\": \"大兴区\",\n \"110116\": \"怀柔区\",\n \"110117\": \"平谷区\",\n \"110228\": \"密云县\",\n \"110229\": \"延庆县\",\n \"110230\": \"其它区\",\n \"120000\": \"天津\",\n \"120100\": \"天津市\",\n \"120101\": \"和平区\",\n \"120102\": \"河东区\",\n \"120103\": \"河西区\",\n \"120104\": \"南开区\",\n \"120105\": \"河北区\",\n \"120106\": \"红桥区\",\n \"120110\": \"东丽区\",\n \"120111\": \"西青区\",\n \"120112\": \"津南区\",\n \"120113\": \"北辰区\",\n \"120114\": \"武清区\",\n \"120115\": \"宝坻区\",\n \"120116\": \"滨海新区\",\n \"120221\": \"宁河县\",\n \"120223\": \"静海县\",\n \"120225\": \"蓟县\",\n \"120226\": \"其它区\",\n \"130000\": \"河北省\",\n \"130100\": \"石家庄市\",\n \"130102\": \"长安区\",\n \"130103\": \"桥东区\",\n \"130104\": \"桥西区\",\n \"130105\": \"新华区\",\n \"130107\": \"井陉矿区\",\n \"130108\": \"裕华区\",\n \"130121\": \"井陉县\",\n \"130123\": \"正定县\",\n \"130124\": \"栾城县\",\n \"130125\": \"行唐县\",\n \"130126\": \"灵寿县\",\n \"130127\": \"高邑县\",\n \"130128\": \"深泽县\",\n \"130129\": \"赞皇县\",\n \"130130\": \"无极县\",\n \"130131\": \"平山县\",\n \"130132\": \"元氏县\",\n \"130133\": \"赵县\",\n \"130181\": \"辛集市\",\n \"130182\": \"藁城市\",\n \"130183\": \"晋州市\",\n \"130184\": \"新乐市\",\n \"130185\": \"鹿泉市\",\n \"130186\": \"其它区\",\n \"130200\": \"唐山市\",\n \"130202\": \"路南区\",\n \"130203\": \"路北区\",\n \"130204\": \"古冶区\",\n \"130205\": \"开平区\",\n \"130207\": \"丰南区\",\n \"130208\": \"丰润区\",\n \"130223\": \"滦县\",\n \"130224\": \"滦南县\",\n \"130225\": \"乐亭县\",\n \"130227\": \"迁西县\",\n \"130229\": \"玉田县\",\n \"130230\": \"曹妃甸区\",\n \"130281\": \"遵化市\",\n \"130283\": \"迁安市\",\n \"130284\": \"其它区\",\n \"130300\": \"秦皇岛市\",\n \"130302\": \"海港区\",\n \"130303\": \"山海关区\",\n \"130304\": \"北戴河区\",\n \"130321\": \"青龙满族自治县\",\n \"130322\": \"昌黎县\",\n \"130323\": \"抚宁县\",\n \"130324\": \"卢龙县\",\n \"130398\": \"其它区\",\n \"130400\": \"邯郸市\",\n \"130402\": \"邯山区\",\n \"130403\": \"丛台区\",\n \"130404\": \"复兴区\",\n \"130406\": \"峰峰矿区\",\n \"130421\": \"邯郸县\",\n \"130423\": \"临漳县\",\n \"130424\": \"成安县\",\n \"130425\": \"大名县\",\n \"130426\": \"涉县\",\n \"130427\": \"磁县\",\n \"130428\": \"肥乡县\",\n \"130429\": \"永年县\",\n \"130430\": \"邱县\",\n \"130431\": \"鸡泽县\",\n \"130432\": \"广平县\",\n \"130433\": \"馆陶县\",\n \"130434\": \"魏县\",\n \"130435\": \"曲周县\",\n \"130481\": \"武安市\",\n \"130482\": \"其它区\",\n \"130500\": \"邢台市\",\n \"130502\": \"桥东区\",\n \"130503\": \"桥西区\",\n \"130521\": \"邢台县\",\n \"130522\": \"临城县\",\n \"130523\": \"内丘县\",\n \"130524\": \"柏乡县\",\n \"130525\": \"隆尧县\",\n \"130526\": \"任县\",\n \"130527\": \"南和县\",\n \"130528\": \"宁晋县\",\n \"130529\": \"巨鹿县\",\n \"130530\": \"新河县\",\n \"130531\": \"广宗县\",\n \"130532\": \"平乡县\",\n \"130533\": \"威县\",\n \"130534\": \"清河县\",\n \"130535\": \"临西县\",\n \"130581\": \"南宫市\",\n \"130582\": \"沙河市\",\n \"130583\": \"其它区\",\n \"130600\": \"保定市\",\n \"130602\": \"新市区\",\n \"130603\": \"北市区\",\n \"130604\": \"南市区\",\n \"130621\": \"满城县\",\n \"130622\": \"清苑县\",\n \"130623\": \"涞水县\",\n \"130624\": \"阜平县\",\n \"130625\": \"徐水县\",\n \"130626\": \"定兴县\",\n \"130627\": \"唐县\",\n \"130628\": \"高阳县\",\n \"130629\": \"容城县\",\n \"130630\": \"涞源县\",\n \"130631\": \"望都县\",\n \"130632\": \"安新县\",\n \"130633\": \"易县\",\n \"130634\": \"曲阳县\",\n \"130635\": \"蠡县\",\n \"130636\": \"顺平县\",\n \"130637\": \"博野县\",\n \"130638\": \"雄县\",\n \"130681\": \"涿州市\",\n \"130682\": \"定州市\",\n \"130683\": \"安国市\",\n \"130684\": \"高碑店市\",\n \"130699\": \"其它区\",\n \"130700\": \"张家口市\",\n \"130702\": \"桥东区\",\n \"130703\": \"桥西区\",\n \"130705\": \"宣化区\",\n \"130706\": \"下花园区\",\n \"130721\": \"宣化县\",\n \"130722\": \"张北县\",\n \"130723\": \"康保县\",\n \"130724\": \"沽源县\",\n \"130725\": \"尚义县\",\n \"130726\": \"蔚县\",\n \"130727\": \"阳原县\",\n \"130728\": \"怀安县\",\n \"130729\": \"万全县\",\n \"130730\": \"怀来县\",\n \"130731\": \"涿鹿县\",\n \"130732\": \"赤城县\",\n \"130733\": \"崇礼县\",\n \"130734\": \"其它区\",\n \"130800\": \"承德市\",\n \"130802\": \"双桥区\",\n \"130803\": \"双滦区\",\n \"130804\": \"鹰手营子矿区\",\n \"130821\": \"承德县\",\n \"130822\": \"兴隆县\",\n \"130823\": \"平泉县\",\n \"130824\": \"滦平县\",\n \"130825\": \"隆化县\",\n \"130826\": \"丰宁满族自治县\",\n \"130827\": \"宽城满族自治县\",\n \"130828\": \"围场满族蒙古族自治县\",\n \"130829\": \"其它区\",\n \"130900\": \"沧州市\",\n \"130902\": \"新华区\",\n \"130903\": \"运河区\",\n \"130921\": \"沧县\",\n \"130922\": \"青县\",\n \"130923\": \"东光县\",\n \"130924\": \"海兴县\",\n \"130925\": \"盐山县\",\n \"130926\": \"肃宁县\",\n \"130927\": \"南皮县\",\n \"130928\": \"吴桥县\",\n \"130929\": \"献县\",\n \"130930\": \"孟村回族自治县\",\n \"130981\": \"泊头市\",\n \"130982\": \"任丘市\",\n \"130983\": \"黄骅市\",\n \"130984\": \"河间市\",\n \"130985\": \"其它区\",\n \"131000\": \"廊坊市\",\n \"131002\": \"安次区\",\n \"131003\": \"广阳区\",\n \"131022\": \"固安县\",\n \"131023\": \"永清县\",\n \"131024\": \"香河县\",\n \"131025\": \"大城县\",\n \"131026\": \"文安县\",\n \"131028\": \"大厂回族自治县\",\n \"131081\": \"霸州市\",\n \"131082\": \"三河市\",\n \"131083\": \"其它区\",\n \"131100\": \"衡水市\",\n \"131102\": \"桃城区\",\n \"131121\": \"枣强县\",\n \"131122\": \"武邑县\",\n \"131123\": \"武强县\",\n \"131124\": \"饶阳县\",\n \"131125\": \"安平县\",\n \"131126\": \"故城县\",\n \"131127\": \"景县\",\n \"131128\": \"阜城县\",\n \"131181\": \"冀州市\",\n \"131182\": \"深州市\",\n \"131183\": \"其它区\",\n \"140000\": \"山西省\",\n \"140100\": \"太原市\",\n \"140105\": \"小店区\",\n \"140106\": \"迎泽区\",\n \"140107\": \"杏花岭区\",\n \"140108\": \"尖草坪区\",\n \"140109\": \"万柏林区\",\n \"140110\": \"晋源区\",\n \"140121\": \"清徐县\",\n \"140122\": \"阳曲县\",\n \"140123\": \"娄烦县\",\n \"140181\": \"古交市\",\n \"140182\": \"其它区\",\n \"140200\": \"大同市\",\n \"140202\": \"城区\",\n \"140203\": \"矿区\",\n \"140211\": \"南郊区\",\n \"140212\": \"新荣区\",\n \"140221\": \"阳高县\",\n \"140222\": \"天镇县\",\n \"140223\": \"广灵县\",\n \"140224\": \"灵丘县\",\n \"140225\": \"浑源县\",\n \"140226\": \"左云县\",\n \"140227\": \"大同县\",\n \"140228\": \"其它区\",\n \"140300\": \"阳泉市\",\n \"140302\": \"城区\",\n \"140303\": \"矿区\",\n \"140311\": \"郊区\",\n \"140321\": \"平定县\",\n \"140322\": \"盂县\",\n \"140323\": \"其它区\",\n \"140400\": \"长治市\",\n \"140421\": \"长治县\",\n \"140423\": \"襄垣县\",\n \"140424\": \"屯留县\",\n \"140425\": \"平顺县\",\n \"140426\": \"黎城县\",\n \"140427\": \"壶关县\",\n \"140428\": \"长子县\",\n \"140429\": \"武乡县\",\n \"140430\": \"沁县\",\n \"140431\": \"沁源县\",\n \"140481\": \"潞城市\",\n \"140482\": \"城区\",\n \"140483\": \"郊区\",\n \"140485\": \"其它区\",\n \"140500\": \"晋城市\",\n \"140502\": \"城区\",\n \"140521\": \"沁水县\",\n \"140522\": \"阳城县\",\n \"140524\": \"陵川县\",\n \"140525\": \"泽州县\",\n \"140581\": \"高平市\",\n \"140582\": \"其它区\",\n \"140600\": \"朔州市\",\n \"140602\": \"朔城区\",\n \"140603\": \"平鲁区\",\n \"140621\": \"山阴县\",\n \"140622\": \"应县\",\n \"140623\": \"右玉县\",\n \"140624\": \"怀仁县\",\n \"140625\": \"其它区\",\n \"140700\": \"晋中市\",\n \"140702\": \"榆次区\",\n \"140721\": \"榆社县\",\n \"140722\": \"左权县\",\n \"140723\": \"和顺县\",\n \"140724\": \"昔阳县\",\n \"140725\": \"寿阳县\",\n \"140726\": \"太谷县\",\n \"140727\": \"祁县\",\n \"140728\": \"平遥县\",\n \"140729\": \"灵石县\",\n \"140781\": \"介休市\",\n \"140782\": \"其它区\",\n \"140800\": \"运城市\",\n \"140802\": \"盐湖区\",\n \"140821\": \"临猗县\",\n \"140822\": \"万荣县\",\n \"140823\": \"闻喜县\",\n \"140824\": \"稷山县\",\n \"140825\": \"新绛县\",\n \"140826\": \"绛县\",\n \"140827\": \"垣曲县\",\n \"140828\": \"夏县\",\n \"140829\": \"平陆县\",\n \"140830\": \"芮城县\",\n \"140881\": \"永济市\",\n \"140882\": \"河津市\",\n \"140883\": \"其它区\",\n \"140900\": \"忻州市\",\n \"140902\": \"忻府区\",\n \"140921\": \"定襄县\",\n \"140922\": \"五台县\",\n \"140923\": \"代县\",\n \"140924\": \"繁峙县\",\n \"140925\": \"宁武县\",\n \"140926\": \"静乐县\",\n \"140927\": \"神池县\",\n \"140928\": \"五寨县\",\n \"140929\": \"岢岚县\",\n \"140930\": \"河曲县\",\n \"140931\": \"保德县\",\n \"140932\": \"偏关县\",\n \"140981\": \"原平市\",\n \"140982\": \"其它区\",\n \"141000\": \"临汾市\",\n \"141002\": \"尧都区\",\n \"141021\": \"曲沃县\",\n \"141022\": \"翼城县\",\n \"141023\": \"襄汾县\",\n \"141024\": \"洪洞县\",\n \"141025\": \"古县\",\n \"141026\": \"安泽县\",\n \"141027\": \"浮山县\",\n \"141028\": \"吉县\",\n \"141029\": \"乡宁县\",\n \"141030\": \"大宁县\",\n \"141031\": \"隰县\",\n \"141032\": \"永和县\",\n \"141033\": \"蒲县\",\n \"141034\": \"汾西县\",\n \"141081\": \"侯马市\",\n \"141082\": \"霍州市\",\n \"141083\": \"其它区\",\n \"141100\": \"吕梁市\",\n \"141102\": \"离石区\",\n \"141121\": \"文水县\",\n \"141122\": \"交城县\",\n \"141123\": \"兴县\",\n \"141124\": \"临县\",\n \"141125\": \"柳林县\",\n \"141126\": \"石楼县\",\n \"141127\": \"岚县\",\n \"141128\": \"方山县\",\n \"141129\": \"中阳县\",\n \"141130\": \"交口县\",\n \"141181\": \"孝义市\",\n \"141182\": \"汾阳市\",\n \"141183\": \"其它区\",\n \"150000\": \"内蒙古自治区\",\n \"150100\": \"呼和浩特市\",\n \"150102\": \"新城区\",\n \"150103\": \"回民区\",\n \"150104\": \"玉泉区\",\n \"150105\": \"赛罕区\",\n \"150121\": \"土默特左旗\",\n \"150122\": \"托克托县\",\n \"150123\": \"和林格尔县\",\n \"150124\": \"清水河县\",\n \"150125\": \"武川县\",\n \"150126\": \"其它区\",\n \"150200\": \"包头市\",\n \"150202\": \"东河区\",\n \"150203\": \"昆都仑区\",\n \"150204\": \"青山区\",\n \"150205\": \"石拐区\",\n \"150206\": \"白云鄂博矿区\",\n \"150207\": \"九原区\",\n \"150221\": \"土默特右旗\",\n \"150222\": \"固阳县\",\n \"150223\": \"达尔罕茂明安联合旗\",\n \"150224\": \"其它区\",\n \"150300\": \"乌海市\",\n \"150302\": \"海勃湾区\",\n \"150303\": \"海南区\",\n \"150304\": \"乌达区\",\n \"150305\": \"其它区\",\n \"150400\": \"赤峰市\",\n \"150402\": \"红山区\",\n \"150403\": \"元宝山区\",\n \"150404\": \"松山区\",\n \"150421\": \"阿鲁科尔沁旗\",\n \"150422\": \"巴林左旗\",\n \"150423\": \"巴林右旗\",\n \"150424\": \"林西县\",\n \"150425\": \"克什克腾旗\",\n \"150426\": \"翁牛特旗\",\n \"150428\": \"喀喇沁旗\",\n \"150429\": \"宁城县\",\n \"150430\": \"敖汉旗\",\n \"150431\": \"其它区\",\n \"150500\": \"通辽市\",\n \"150502\": \"科尔沁区\",\n \"150521\": \"科尔沁左翼中旗\",\n \"150522\": \"科尔沁左翼后旗\",\n \"150523\": \"开鲁县\",\n \"150524\": \"库伦旗\",\n \"150525\": \"奈曼旗\",\n \"150526\": \"扎鲁特旗\",\n \"150581\": \"霍林郭勒市\",\n \"150582\": \"其它区\",\n \"150600\": \"鄂尔多斯市\",\n \"150602\": \"东胜区\",\n \"150621\": \"达拉特旗\",\n \"150622\": \"准格尔旗\",\n \"150623\": \"鄂托克前旗\",\n \"150624\": \"鄂托克旗\",\n \"150625\": \"杭锦旗\",\n \"150626\": \"乌审旗\",\n \"150627\": \"伊金霍洛旗\",\n \"150628\": \"其它区\",\n \"150700\": \"呼伦贝尔市\",\n \"150702\": \"海拉尔区\",\n \"150703\": \"扎赉诺尔区\",\n \"150721\": \"阿荣旗\",\n \"150722\": \"莫力达瓦达斡尔族自治旗\",\n \"150723\": \"鄂伦春自治旗\",\n \"150724\": \"鄂温克族自治旗\",\n \"150725\": \"陈巴尔虎旗\",\n \"150726\": \"新巴尔虎左旗\",\n \"150727\": \"新巴尔虎右旗\",\n \"150781\": \"满洲里市\",\n \"150782\": \"牙克石市\",\n \"150783\": \"扎兰屯市\",\n \"150784\": \"额尔古纳市\",\n \"150785\": \"根河市\",\n \"150786\": \"其它区\",\n \"150800\": \"巴彦淖尔市\",\n \"150802\": \"临河区\",\n \"150821\": \"五原县\",\n \"150822\": \"磴口县\",\n \"150823\": \"乌拉特前旗\",\n \"150824\": \"乌拉特中旗\",\n \"150825\": \"乌拉特后旗\",\n \"150826\": \"杭锦后旗\",\n \"150827\": \"其它区\",\n \"150900\": \"乌兰察布市\",\n \"150902\": \"集宁区\",\n \"150921\": \"卓资县\",\n \"150922\": \"化德县\",\n \"150923\": \"商都县\",\n \"150924\": \"兴和县\",\n \"150925\": \"凉城县\",\n \"150926\": \"察哈尔右翼前旗\",\n \"150927\": \"察哈尔右翼中旗\",\n \"150928\": \"察哈尔右翼后旗\",\n \"150929\": \"四子王旗\",\n \"150981\": \"丰镇市\",\n \"150982\": \"其它区\",\n \"152200\": \"兴安盟\",\n \"152201\": \"乌兰浩特市\",\n \"152202\": \"阿尔山市\",\n \"152221\": \"科尔沁右翼前旗\",\n \"152222\": \"科尔沁右翼中旗\",\n \"152223\": \"扎赉特旗\",\n \"152224\": \"突泉县\",\n \"152225\": \"其它区\",\n \"152500\": \"锡林郭勒盟\",\n \"152501\": \"二连浩特市\",\n \"152502\": \"锡林浩特市\",\n \"152522\": \"阿巴嘎旗\",\n \"152523\": \"苏尼特左旗\",\n \"152524\": \"苏尼特右旗\",\n \"152525\": \"东乌珠穆沁旗\",\n \"152526\": \"西乌珠穆沁旗\",\n \"152527\": \"太仆寺旗\",\n \"152528\": \"镶黄旗\",\n \"152529\": \"正镶白旗\",\n \"152530\": \"正蓝旗\",\n \"152531\": \"多伦县\",\n \"152532\": \"其它区\",\n \"152900\": \"阿拉善盟\",\n \"152921\": \"阿拉善左旗\",\n \"152922\": \"阿拉善右旗\",\n \"152923\": \"额济纳旗\",\n \"152924\": \"其它区\",\n \"210000\": \"辽宁省\",\n \"210100\": \"沈阳市\",\n \"210102\": \"和平区\",\n \"210103\": \"沈河区\",\n \"210104\": \"大东区\",\n \"210105\": \"皇姑区\",\n \"210106\": \"铁西区\",\n \"210111\": \"苏家屯区\",\n \"210112\": \"东陵区\",\n \"210113\": \"新城子区\",\n \"210114\": \"于洪区\",\n \"210122\": \"辽中县\",\n \"210123\": \"康平县\",\n \"210124\": \"法库县\",\n \"210181\": \"新民市\",\n \"210184\": \"沈北新区\",\n \"210185\": \"其它区\",\n \"210200\": \"大连市\",\n \"210202\": \"中山区\",\n \"210203\": \"西岗区\",\n \"210204\": \"沙河口区\",\n \"210211\": \"甘井子区\",\n \"210212\": \"旅顺口区\",\n \"210213\": \"金州区\",\n \"210224\": \"长海县\",\n \"210281\": \"瓦房店市\",\n \"210282\": \"普兰店市\",\n \"210283\": \"庄河市\",\n \"210298\": \"其它区\",\n \"210300\": \"鞍山市\",\n \"210302\": \"铁东区\",\n \"210303\": \"铁西区\",\n \"210304\": \"立山区\",\n \"210311\": \"千山区\",\n \"210321\": \"台安县\",\n \"210323\": \"岫岩满族自治县\",\n \"210381\": \"海城市\",\n \"210382\": \"其它区\",\n \"210400\": \"抚顺市\",\n \"210402\": \"新抚区\",\n \"210403\": \"东洲区\",\n \"210404\": \"望花区\",\n \"210411\": \"顺城区\",\n \"210421\": \"抚顺县\",\n \"210422\": \"新宾满族自治县\",\n \"210423\": \"清原满族自治县\",\n \"210424\": \"其它区\",\n \"210500\": \"本溪市\",\n \"210502\": \"平山区\",\n \"210503\": \"溪湖区\",\n \"210504\": \"明山区\",\n \"210505\": \"南芬区\",\n \"210521\": \"本溪满族自治县\",\n \"210522\": \"桓仁满族自治县\",\n \"210523\": \"其它区\",\n \"210600\": \"丹东市\",\n \"210602\": \"元宝区\",\n \"210603\": \"振兴区\",\n \"210604\": \"振安区\",\n \"210624\": \"宽甸满族自治县\",\n \"210681\": \"东港市\",\n \"210682\": \"凤城市\",\n \"210683\": \"其它区\",\n \"210700\": \"锦州市\",\n \"210702\": \"古塔区\",\n \"210703\": \"凌河区\",\n \"210711\": \"太和区\",\n \"210726\": \"黑山县\",\n \"210727\": \"义县\",\n \"210781\": \"凌海市\",\n \"210782\": \"北镇市\",\n \"210783\": \"其它区\",\n \"210800\": \"营口市\",\n \"210802\": \"站前区\",\n \"210803\": \"西市区\",\n \"210804\": \"鲅鱼圈区\",\n \"210811\": \"老边区\",\n \"210881\": \"盖州市\",\n \"210882\": \"大石桥市\",\n \"210883\": \"其它区\",\n \"210900\": \"阜新市\",\n \"210902\": \"海州区\",\n \"210903\": \"新邱区\",\n \"210904\": \"太平区\",\n \"210905\": \"清河门区\",\n \"210911\": \"细河区\",\n \"210921\": \"阜新蒙古族自治县\",\n \"210922\": \"彰武县\",\n \"210923\": \"其它区\",\n \"211000\": \"辽阳市\",\n \"211002\": \"白塔区\",\n \"211003\": \"文圣区\",\n \"211004\": \"宏伟区\",\n \"211005\": \"弓长岭区\",\n \"211011\": \"太子河区\",\n \"211021\": \"辽阳县\",\n \"211081\": \"灯塔市\",\n \"211082\": \"其它区\",\n \"211100\": \"盘锦市\",\n \"211102\": \"双台子区\",\n \"211103\": \"兴隆台区\",\n \"211121\": \"大洼县\",\n \"211122\": \"盘山县\",\n \"211123\": \"其它区\",\n \"211200\": \"铁岭市\",\n \"211202\": \"银州区\",\n \"211204\": \"清河区\",\n \"211221\": \"铁岭县\",\n \"211223\": \"西丰县\",\n \"211224\": \"昌图县\",\n \"211281\": \"调兵山市\",\n \"211282\": \"开原市\",\n \"211283\": \"其它区\",\n \"211300\": \"朝阳市\",\n \"211302\": \"双塔区\",\n \"211303\": \"龙城区\",\n \"211321\": \"朝阳县\",\n \"211322\": \"建平县\",\n \"211324\": \"喀喇沁左翼蒙古族自治县\",\n \"211381\": \"北票市\",\n \"211382\": \"凌源市\",\n \"211383\": \"其它区\",\n \"211400\": \"葫芦岛市\",\n \"211402\": \"连山区\",\n \"211403\": \"龙港区\",\n \"211404\": \"南票区\",\n \"211421\": \"绥中县\",\n \"211422\": \"建昌县\",\n \"211481\": \"兴城市\",\n \"211482\": \"其它区\",\n \"220000\": \"吉林省\",\n \"220100\": \"长春市\",\n \"220102\": \"南关区\",\n \"220103\": \"宽城区\",\n \"220104\": \"朝阳区\",\n \"220105\": \"二道区\",\n \"220106\": \"绿园区\",\n \"220112\": \"双阳区\",\n \"220122\": \"农安县\",\n \"220181\": \"九台市\",\n \"220182\": \"榆树市\",\n \"220183\": \"德惠市\",\n \"220188\": \"其它区\",\n \"220200\": \"吉林市\",\n \"220202\": \"昌邑区\",\n \"220203\": \"龙潭区\",\n \"220204\": \"船营区\",\n \"220211\": \"丰满区\",\n \"220221\": \"永吉县\",\n \"220281\": \"蛟河市\",\n \"220282\": \"桦甸市\",\n \"220283\": \"舒兰市\",\n \"220284\": \"磐石市\",\n \"220285\": \"其它区\",\n \"220300\": \"四平市\",\n \"220302\": \"铁西区\",\n \"220303\": \"铁东区\",\n \"220322\": \"梨树县\",\n \"220323\": \"伊通满族自治县\",\n \"220381\": \"公主岭市\",\n \"220382\": \"双辽市\",\n \"220383\": \"其它区\",\n \"220400\": \"辽源市\",\n \"220402\": \"龙山区\",\n \"220403\": \"西安区\",\n \"220421\": \"东丰县\",\n \"220422\": \"东辽县\",\n \"220423\": \"其它区\",\n \"220500\": \"通化市\",\n \"220502\": \"东昌区\",\n \"220503\": \"二道江区\",\n \"220521\": \"通化县\",\n \"220523\": \"辉南县\",\n \"220524\": \"柳河县\",\n \"220581\": \"梅河口市\",\n \"220582\": \"集安市\",\n \"220583\": \"其它区\",\n \"220600\": \"白山市\",\n \"220602\": \"浑江区\",\n \"220621\": \"抚松县\",\n \"220622\": \"靖宇县\",\n \"220623\": \"长白朝鲜族自治县\",\n \"220625\": \"江源区\",\n \"220681\": \"临江市\",\n \"220682\": \"其它区\",\n \"220700\": \"松原市\",\n \"220702\": \"宁江区\",\n \"220721\": \"前郭尔罗斯蒙古族自治县\",\n \"220722\": \"长岭县\",\n \"220723\": \"乾安县\",\n \"220724\": \"扶余市\",\n \"220725\": \"其它区\",\n \"220800\": \"白城市\",\n \"220802\": \"洮北区\",\n \"220821\": \"镇赉县\",\n \"220822\": \"通榆县\",\n \"220881\": \"洮南市\",\n \"220882\": \"大安市\",\n \"220883\": \"其它区\",\n \"222400\": \"延边朝鲜族自治州\",\n \"222401\": \"延吉市\",\n \"222402\": \"图们市\",\n \"222403\": \"敦化市\",\n \"222404\": \"珲春市\",\n \"222405\": \"龙井市\",\n \"222406\": \"和龙市\",\n \"222424\": \"汪清县\",\n \"222426\": \"安图县\",\n \"222427\": \"其它区\",\n \"230000\": \"黑龙江省\",\n \"230100\": \"哈尔滨市\",\n \"230102\": \"道里区\",\n \"230103\": \"南岗区\",\n \"230104\": \"道外区\",\n \"230106\": \"香坊区\",\n \"230108\": \"平房区\",\n \"230109\": \"松北区\",\n \"230111\": \"呼兰区\",\n \"230123\": \"依兰县\",\n \"230124\": \"方正县\",\n \"230125\": \"宾县\",\n \"230126\": \"巴彦县\",\n \"230127\": \"木兰县\",\n \"230128\": \"通河县\",\n \"230129\": \"延寿县\",\n \"230181\": \"阿城区\",\n \"230182\": \"双城市\",\n \"230183\": \"尚志市\",\n \"230184\": \"五常市\",\n \"230186\": \"其它区\",\n \"230200\": \"齐齐哈尔市\",\n \"230202\": \"龙沙区\",\n \"230203\": \"建华区\",\n \"230204\": \"铁锋区\",\n \"230205\": \"昂昂溪区\",\n \"230206\": \"富拉尔基区\",\n \"230207\": \"碾子山区\",\n \"230208\": \"梅里斯达斡尔族区\",\n \"230221\": \"龙江县\",\n \"230223\": \"依安县\",\n \"230224\": \"泰来县\",\n \"230225\": \"甘南县\",\n \"230227\": \"富裕县\",\n \"230229\": \"克山县\",\n \"230230\": \"克东县\",\n \"230231\": \"拜泉县\",\n \"230281\": \"讷河市\",\n \"230282\": \"其它区\",\n \"230300\": \"鸡西市\",\n \"230302\": \"鸡冠区\",\n \"230303\": \"恒山区\",\n \"230304\": \"滴道区\",\n \"230305\": \"梨树区\",\n \"230306\": \"城子河区\",\n \"230307\": \"麻山区\",\n \"230321\": \"鸡东县\",\n \"230381\": \"虎林市\",\n \"230382\": \"密山市\",\n \"230383\": \"其它区\",\n \"230400\": \"鹤岗市\",\n \"230402\": \"向阳区\",\n \"230403\": \"工农区\",\n \"230404\": \"南山区\",\n \"230405\": \"兴安区\",\n \"230406\": \"东山区\",\n \"230407\": \"兴山区\",\n \"230421\": \"萝北县\",\n \"230422\": \"绥滨县\",\n \"230423\": \"其它区\",\n \"230500\": \"双鸭山市\",\n \"230502\": \"尖山区\",\n \"230503\": \"岭东区\",\n \"230505\": \"四方台区\",\n \"230506\": \"宝山区\",\n \"230521\": \"集贤县\",\n \"230522\": \"友谊县\",\n \"230523\": \"宝清县\",\n \"230524\": \"饶河县\",\n \"230525\": \"其它区\",\n \"230600\": \"大庆市\",\n \"230602\": \"萨尔图区\",\n \"230603\": \"龙凤区\",\n \"230604\": \"让胡路区\",\n \"230605\": \"红岗区\",\n \"230606\": \"大同区\",\n \"230621\": \"肇州县\",\n \"230622\": \"肇源县\",\n \"230623\": \"林甸县\",\n \"230624\": \"杜尔伯特蒙古族自治县\",\n \"230625\": \"其它区\",\n \"230700\": \"伊春市\",\n \"230702\": \"伊春区\",\n \"230703\": \"南岔区\",\n \"230704\": \"友好区\",\n \"230705\": \"西林区\",\n \"230706\": \"翠峦区\",\n \"230707\": \"新青区\",\n \"230708\": \"美溪区\",\n \"230709\": \"金山屯区\",\n \"230710\": \"五营区\",\n \"230711\": \"乌马河区\",\n \"230712\": \"汤旺河区\",\n \"230713\": \"带岭区\",\n \"230714\": \"乌伊岭区\",\n \"230715\": \"红星区\",\n \"230716\": \"上甘岭区\",\n \"230722\": \"嘉荫县\",\n \"230781\": \"铁力市\",\n \"230782\": \"其它区\",\n \"230800\": \"佳木斯市\",\n \"230803\": \"向阳区\",\n \"230804\": \"前进区\",\n \"230805\": \"东风区\",\n \"230811\": \"郊区\",\n \"230822\": \"桦南县\",\n \"230826\": \"桦川县\",\n \"230828\": \"汤原县\",\n \"230833\": \"抚远县\",\n \"230881\": \"同江市\",\n \"230882\": \"富锦市\",\n \"230883\": \"其它区\",\n \"230900\": \"七台河市\",\n \"230902\": \"新兴区\",\n \"230903\": \"桃山区\",\n \"230904\": \"茄子河区\",\n \"230921\": \"勃利县\",\n \"230922\": \"其它区\",\n \"231000\": \"牡丹江市\",\n \"231002\": \"东安区\",\n \"231003\": \"阳明区\",\n \"231004\": \"爱民区\",\n \"231005\": \"西安区\",\n \"231024\": \"东宁县\",\n \"231025\": \"林口县\",\n \"231081\": \"绥芬河市\",\n \"231083\": \"海林市\",\n \"231084\": \"宁安市\",\n \"231085\": \"穆棱市\",\n \"231086\": \"其它区\",\n \"231100\": \"黑河市\",\n \"231102\": \"爱辉区\",\n \"231121\": \"嫩江县\",\n \"231123\": \"逊克县\",\n \"231124\": \"孙吴县\",\n \"231181\": \"北安市\",\n \"231182\": \"五大连池市\",\n \"231183\": \"其它区\",\n \"231200\": \"绥化市\",\n \"231202\": \"北林区\",\n \"231221\": \"望奎县\",\n \"231222\": \"兰西县\",\n \"231223\": \"青冈县\",\n \"231224\": \"庆安县\",\n \"231225\": \"明水县\",\n \"231226\": \"绥棱县\",\n \"231281\": \"安达市\",\n \"231282\": \"肇东市\",\n \"231283\": \"海伦市\",\n \"231284\": \"其它区\",\n \"232700\": \"大兴安岭地区\",\n \"232702\": \"松岭区\",\n \"232703\": \"新林区\",\n \"232704\": \"呼中区\",\n \"232721\": \"呼玛县\",\n \"232722\": \"塔河县\",\n \"232723\": \"漠河县\",\n \"232724\": \"加格达奇区\",\n \"232725\": \"其它区\",\n \"310000\": \"上海\",\n \"310100\": \"上海市\",\n \"310101\": \"黄浦区\",\n \"310104\": \"徐汇区\",\n \"310105\": \"长宁区\",\n \"310106\": \"静安区\",\n \"310107\": \"普陀区\",\n \"310108\": \"闸北区\",\n \"310109\": \"虹口区\",\n \"310110\": \"杨浦区\",\n \"310112\": \"闵行区\",\n \"310113\": \"宝山区\",\n \"310114\": \"嘉定区\",\n \"310115\": \"浦东新区\",\n \"310116\": \"金山区\",\n \"310117\": \"松江区\",\n \"310118\": \"青浦区\",\n \"310120\": \"奉贤区\",\n \"310230\": \"崇明县\",\n \"310231\": \"其它区\",\n \"320000\": \"江苏省\",\n \"320100\": \"南京市\",\n \"320102\": \"玄武区\",\n \"320104\": \"秦淮区\",\n \"320105\": \"建邺区\",\n \"320106\": \"鼓楼区\",\n \"320111\": \"浦口区\",\n \"320113\": \"栖霞区\",\n \"320114\": \"雨花台区\",\n \"320115\": \"江宁区\",\n \"320116\": \"六合区\",\n \"320124\": \"溧水区\",\n \"320125\": \"高淳区\",\n \"320126\": \"其它区\",\n \"320200\": \"无锡市\",\n \"320202\": \"崇安区\",\n \"320203\": \"南长区\",\n \"320204\": \"北塘区\",\n \"320205\": \"锡山区\",\n \"320206\": \"惠山区\",\n \"320211\": \"滨湖区\",\n \"320281\": \"江阴市\",\n \"320282\": \"宜兴市\",\n \"320297\": \"其它区\",\n \"320300\": \"徐州市\",\n \"320302\": \"鼓楼区\",\n \"320303\": \"云龙区\",\n \"320305\": \"贾汪区\",\n \"320311\": \"泉山区\",\n \"320321\": \"丰县\",\n \"320322\": \"沛县\",\n \"320323\": \"铜山区\",\n \"320324\": \"睢宁县\",\n \"320381\": \"新沂市\",\n \"320382\": \"邳州市\",\n \"320383\": \"其它区\",\n \"320400\": \"常州市\",\n \"320402\": \"天宁区\",\n \"320404\": \"钟楼区\",\n \"320405\": \"戚墅堰区\",\n \"320411\": \"新北区\",\n \"320412\": \"武进区\",\n \"320481\": \"溧阳市\",\n \"320482\": \"金坛市\",\n \"320483\": \"其它区\",\n \"320500\": \"苏州市\",\n \"320505\": \"虎丘区\",\n \"320506\": \"吴中区\",\n \"320507\": \"相城区\",\n \"320508\": \"姑苏区\",\n \"320581\": \"常熟市\",\n \"320582\": \"张家港市\",\n \"320583\": \"昆山市\",\n \"320584\": \"吴江区\",\n \"320585\": \"太仓市\",\n \"320596\": \"其它区\",\n \"320600\": \"南通市\",\n \"320602\": \"崇川区\",\n \"320611\": \"港闸区\",\n \"320612\": \"通州区\",\n \"320621\": \"海安县\",\n \"320623\": \"如东县\",\n \"320681\": \"启东市\",\n \"320682\": \"如皋市\",\n \"320684\": \"海门市\",\n \"320694\": \"其它区\",\n \"320700\": \"连云港市\",\n \"320703\": \"连云区\",\n \"320705\": \"新浦区\",\n \"320706\": \"海州区\",\n \"320721\": \"赣榆县\",\n \"320722\": \"东海县\",\n \"320723\": \"灌云县\",\n \"320724\": \"灌南县\",\n \"320725\": \"其它区\",\n \"320800\": \"淮安市\",\n \"320802\": \"清河区\",\n \"320803\": \"淮安区\",\n \"320804\": \"淮阴区\",\n \"320811\": \"清浦区\",\n \"320826\": \"涟水县\",\n \"320829\": \"洪泽县\",\n \"320830\": \"盱眙县\",\n \"320831\": \"金湖县\",\n \"320832\": \"其它区\",\n \"320900\": \"盐城市\",\n \"320902\": \"亭湖区\",\n \"320903\": \"盐都区\",\n \"320921\": \"响水县\",\n \"320922\": \"滨海县\",\n \"320923\": \"阜宁县\",\n \"320924\": \"射阳县\",\n \"320925\": \"建湖县\",\n \"320981\": \"东台市\",\n \"320982\": \"大丰市\",\n \"320983\": \"其它区\",\n \"321000\": \"扬州市\",\n \"321002\": \"广陵区\",\n \"321003\": \"邗江区\",\n \"321023\": \"宝应县\",\n \"321081\": \"仪征市\",\n \"321084\": \"高邮市\",\n \"321088\": \"江都区\",\n \"321093\": \"其它区\",\n \"321100\": \"镇江市\",\n \"321102\": \"京口区\",\n \"321111\": \"润州区\",\n \"321112\": \"丹徒区\",\n \"321181\": \"丹阳市\",\n \"321182\": \"扬中市\",\n \"321183\": \"句容市\",\n \"321184\": \"其它区\",\n \"321200\": \"泰州市\",\n \"321202\": \"海陵区\",\n \"321203\": \"高港区\",\n \"321281\": \"兴化市\",\n \"321282\": \"靖江市\",\n \"321283\": \"泰兴市\",\n \"321284\": \"姜堰区\",\n \"321285\": \"其它区\",\n \"321300\": \"宿迁市\",\n \"321302\": \"宿城区\",\n \"321311\": \"宿豫区\",\n \"321322\": \"沭阳县\",\n \"321323\": \"泗阳县\",\n \"321324\": \"泗洪县\",\n \"321325\": \"其它区\",\n \"330000\": \"浙江省\",\n \"330100\": \"杭州市\",\n \"330102\": \"上城区\",\n \"330103\": \"下城区\",\n \"330104\": \"江干区\",\n \"330105\": \"拱墅区\",\n \"330106\": \"西湖区\",\n \"330108\": \"滨江区\",\n \"330109\": \"萧山区\",\n \"330110\": \"余杭区\",\n \"330122\": \"桐庐县\",\n \"330127\": \"淳安县\",\n \"330182\": \"建德市\",\n \"330183\": \"富阳市\",\n \"330185\": \"临安市\",\n \"330186\": \"其它区\",\n \"330200\": \"宁波市\",\n \"330203\": \"海曙区\",\n \"330204\": \"江东区\",\n \"330205\": \"江北区\",\n \"330206\": \"北仑区\",\n \"330211\": \"镇海区\",\n \"330212\": \"鄞州区\",\n \"330225\": \"象山县\",\n \"330226\": \"宁海县\",\n \"330281\": \"余姚市\",\n \"330282\": \"慈溪市\",\n \"330283\": \"奉化市\",\n \"330284\": \"其它区\",\n \"330300\": \"温州市\",\n \"330302\": \"鹿城区\",\n \"330303\": \"龙湾区\",\n \"330304\": \"瓯海区\",\n \"330322\": \"洞头县\",\n \"330324\": \"永嘉县\",\n \"330326\": \"平阳县\",\n \"330327\": \"苍南县\",\n \"330328\": \"文成县\",\n \"330329\": \"泰顺县\",\n \"330381\": \"瑞安市\",\n \"330382\": \"乐清市\",\n \"330383\": \"其它区\",\n \"330400\": \"嘉兴市\",\n \"330402\": \"南湖区\",\n \"330411\": \"秀洲区\",\n \"330421\": \"嘉善县\",\n \"330424\": \"海盐县\",\n \"330481\": \"海宁市\",\n \"330482\": \"平湖市\",\n \"330483\": \"桐乡市\",\n \"330484\": \"其它区\",\n \"330500\": \"湖州市\",\n \"330502\": \"吴兴区\",\n \"330503\": \"南浔区\",\n \"330521\": \"德清县\",\n \"330522\": \"长兴县\",\n \"330523\": \"安吉县\",\n \"330524\": \"其它区\",\n \"330600\": \"绍兴市\",\n \"330602\": \"越城区\",\n \"330621\": \"绍兴县\",\n \"330624\": \"新昌县\",\n \"330681\": \"诸暨市\",\n \"330682\": \"上虞市\",\n \"330683\": \"嵊州市\",\n \"330684\": \"其它区\",\n \"330700\": \"金华市\",\n \"330702\": \"婺城区\",\n \"330703\": \"金东区\",\n \"330723\": \"武义县\",\n \"330726\": \"浦江县\",\n \"330727\": \"磐安县\",\n \"330781\": \"兰溪市\",\n \"330782\": \"义乌市\",\n \"330783\": \"东阳市\",\n \"330784\": \"永康市\",\n \"330785\": \"其它区\",\n \"330800\": \"衢州市\",\n \"330802\": \"柯城区\",\n \"330803\": \"衢江区\",\n \"330822\": \"常山县\",\n \"330824\": \"开化县\",\n \"330825\": \"龙游县\",\n \"330881\": \"江山市\",\n \"330882\": \"其它区\",\n \"330900\": \"舟山市\",\n \"330902\": \"定海区\",\n \"330903\": \"普陀区\",\n \"330921\": \"岱山县\",\n \"330922\": \"嵊泗县\",\n \"330923\": \"其它区\",\n \"331000\": \"台州市\",\n \"331002\": \"椒江区\",\n \"331003\": \"黄岩区\",\n \"331004\": \"路桥区\",\n \"331021\": \"玉环县\",\n \"331022\": \"三门县\",\n \"331023\": \"天台县\",\n \"331024\": \"仙居县\",\n \"331081\": \"温岭市\",\n \"331082\": \"临海市\",\n \"331083\": \"其它区\",\n \"331100\": \"丽水市\",\n \"331102\": \"莲都区\",\n \"331121\": \"青田县\",\n \"331122\": \"缙云县\",\n \"331123\": \"遂昌县\",\n \"331124\": \"松阳县\",\n \"331125\": \"云和县\",\n \"331126\": \"庆元县\",\n \"331127\": \"景宁畲族自治县\",\n \"331181\": \"龙泉市\",\n \"331182\": \"其它区\",\n \"340000\": \"安徽省\",\n \"340100\": \"合肥市\",\n \"340102\": \"瑶海区\",\n \"340103\": \"庐阳区\",\n \"340104\": \"蜀山区\",\n \"340111\": \"包河区\",\n \"340121\": \"长丰县\",\n \"340122\": \"肥东县\",\n \"340123\": \"肥西县\",\n \"340192\": \"其它区\",\n \"340200\": \"芜湖市\",\n \"340202\": \"镜湖区\",\n \"340203\": \"弋江区\",\n \"340207\": \"鸠江区\",\n \"340208\": \"三山区\",\n \"340221\": \"芜湖县\",\n \"340222\": \"繁昌县\",\n \"340223\": \"南陵县\",\n \"340224\": \"其它区\",\n \"340300\": \"蚌埠市\",\n \"340302\": \"龙子湖区\",\n \"340303\": \"蚌山区\",\n \"340304\": \"禹会区\",\n \"340311\": \"淮上区\",\n \"340321\": \"怀远县\",\n \"340322\": \"五河县\",\n \"340323\": \"固镇县\",\n \"340324\": \"其它区\",\n \"340400\": \"淮南市\",\n \"340402\": \"大通区\",\n \"340403\": \"田家庵区\",\n \"340404\": \"谢家集区\",\n \"340405\": \"八公山区\",\n \"340406\": \"潘集区\",\n \"340421\": \"凤台县\",\n \"340422\": \"其它区\",\n \"340500\": \"马鞍山市\",\n \"340503\": \"花山区\",\n \"340504\": \"雨山区\",\n \"340506\": \"博望区\",\n \"340521\": \"当涂县\",\n \"340522\": \"其它区\",\n \"340600\": \"淮北市\",\n \"340602\": \"杜集区\",\n \"340603\": \"相山区\",\n \"340604\": \"烈山区\",\n \"340621\": \"濉溪县\",\n \"340622\": \"其它区\",\n \"340700\": \"铜陵市\",\n \"340702\": \"铜官山区\",\n \"340703\": \"狮子山区\",\n \"340711\": \"郊区\",\n \"340721\": \"铜陵县\",\n \"340722\": \"其它区\",\n \"340800\": \"安庆市\",\n \"340802\": \"迎江区\",\n \"340803\": \"大观区\",\n \"340811\": \"宜秀区\",\n \"340822\": \"怀宁县\",\n \"340823\": \"枞阳县\",\n \"340824\": \"潜山县\",\n \"340825\": \"太湖县\",\n \"340826\": \"宿松县\",\n \"340827\": \"望江县\",\n \"340828\": \"岳西县\",\n \"340881\": \"桐城市\",\n \"340882\": \"其它区\",\n \"341000\": \"黄山市\",\n \"341002\": \"屯溪区\",\n \"341003\": \"黄山区\",\n \"341004\": \"徽州区\",\n \"341021\": \"歙县\",\n \"341022\": \"休宁县\",\n \"341023\": \"黟县\",\n \"341024\": \"祁门县\",\n \"341025\": \"其它区\",\n \"341100\": \"滁州市\",\n \"341102\": \"琅琊区\",\n \"341103\": \"南谯区\",\n \"341122\": \"来安县\",\n \"341124\": \"全椒县\",\n \"341125\": \"定远县\",\n \"341126\": \"凤阳县\",\n \"341181\": \"天长市\",\n \"341182\": \"明光市\",\n \"341183\": \"其它区\",\n \"341200\": \"阜阳市\",\n \"341202\": \"颍州区\",\n \"341203\": \"颍东区\",\n \"341204\": \"颍泉区\",\n \"341221\": \"临泉县\",\n \"341222\": \"太和县\",\n \"341225\": \"阜南县\",\n \"341226\": \"颍上县\",\n \"341282\": \"界首市\",\n \"341283\": \"其它区\",\n \"341300\": \"宿州市\",\n \"341302\": \"埇桥区\",\n \"341321\": \"砀山县\",\n \"341322\": \"萧县\",\n \"341323\": \"灵璧县\",\n \"341324\": \"泗县\",\n \"341325\": \"其它区\",\n \"341400\": \"巢湖市\",\n \"341421\": \"庐江县\",\n \"341422\": \"无为县\",\n \"341423\": \"含山县\",\n \"341424\": \"和县\",\n \"341500\": \"六安市\",\n \"341502\": \"金安区\",\n \"341503\": \"裕安区\",\n \"341521\": \"寿县\",\n \"341522\": \"霍邱县\",\n \"341523\": \"舒城县\",\n \"341524\": \"金寨县\",\n \"341525\": \"霍山县\",\n \"341526\": \"其它区\",\n \"341600\": \"亳州市\",\n \"341602\": \"谯城区\",\n \"341621\": \"涡阳县\",\n \"341622\": \"蒙城县\",\n \"341623\": \"利辛县\",\n \"341624\": \"其它区\",\n \"341700\": \"池州市\",\n \"341702\": \"贵池区\",\n \"341721\": \"东至县\",\n \"341722\": \"石台县\",\n \"341723\": \"青阳县\",\n \"341724\": \"其它区\",\n \"341800\": \"宣城市\",\n \"341802\": \"宣州区\",\n \"341821\": \"郎溪县\",\n \"341822\": \"广德县\",\n \"341823\": \"泾县\",\n \"341824\": \"绩溪县\",\n \"341825\": \"旌德县\",\n \"341881\": \"宁国市\",\n \"341882\": \"其它区\",\n \"350000\": \"福建省\",\n \"350100\": \"福州市\",\n \"350102\": \"鼓楼区\",\n \"350103\": \"台江区\",\n \"350104\": \"仓山区\",\n \"350105\": \"马尾区\",\n \"350111\": \"晋安区\",\n \"350121\": \"闽侯县\",\n \"350122\": \"连江县\",\n \"350123\": \"罗源县\",\n \"350124\": \"闽清县\",\n \"350125\": \"永泰县\",\n \"350128\": \"平潭县\",\n \"350181\": \"福清市\",\n \"350182\": \"长乐市\",\n \"350183\": \"其它区\",\n \"350200\": \"厦门市\",\n \"350203\": \"思明区\",\n \"350205\": \"海沧区\",\n \"350206\": \"湖里区\",\n \"350211\": \"集美区\",\n \"350212\": \"同安区\",\n \"350213\": \"翔安区\",\n \"350214\": \"其它区\",\n \"350300\": \"莆田市\",\n \"350302\": \"城厢区\",\n \"350303\": \"涵江区\",\n \"350304\": \"荔城区\",\n \"350305\": \"秀屿区\",\n \"350322\": \"仙游县\",\n \"350323\": \"其它区\",\n \"350400\": \"三明市\",\n \"350402\": \"梅列区\",\n \"350403\": \"三元区\",\n \"350421\": \"明溪县\",\n \"350423\": \"清流县\",\n \"350424\": \"宁化县\",\n \"350425\": \"大田县\",\n \"350426\": \"尤溪县\",\n \"350427\": \"沙县\",\n \"350428\": \"将乐县\",\n \"350429\": \"泰宁县\",\n \"350430\": \"建宁县\",\n \"350481\": \"永安市\",\n \"350482\": \"其它区\",\n \"350500\": \"泉州市\",\n \"350502\": \"鲤城区\",\n \"350503\": \"丰泽区\",\n \"350504\": \"洛江区\",\n \"350505\": \"泉港区\",\n \"350521\": \"惠安县\",\n \"350524\": \"安溪县\",\n \"350525\": \"永春县\",\n \"350526\": \"德化县\",\n \"350527\": \"金门县\",\n \"350581\": \"石狮市\",\n \"350582\": \"晋江市\",\n \"350583\": \"南安市\",\n \"350584\": \"其它区\",\n \"350600\": \"漳州市\",\n \"350602\": \"芗城区\",\n \"350603\": \"龙文区\",\n \"350622\": \"云霄县\",\n \"350623\": \"漳浦县\",\n \"350624\": \"诏安县\",\n \"350625\": \"长泰县\",\n \"350626\": \"东山县\",\n \"350627\": \"南靖县\",\n \"350628\": \"平和县\",\n \"350629\": \"华安县\",\n \"350681\": \"龙海市\",\n \"350682\": \"其它区\",\n \"350700\": \"南平市\",\n \"350702\": \"延平区\",\n \"350721\": \"顺昌县\",\n \"350722\": \"浦城县\",\n \"350723\": \"光泽县\",\n \"350724\": \"松溪县\",\n \"350725\": \"政和县\",\n \"350781\": \"邵武市\",\n \"350782\": \"武夷山市\",\n \"350783\": \"建瓯市\",\n \"350784\": \"建阳市\",\n \"350785\": \"其它区\",\n \"350800\": \"龙岩市\",\n \"350802\": \"新罗区\",\n \"350821\": \"长汀县\",\n \"350822\": \"永定县\",\n \"350823\": \"上杭县\",\n \"350824\": \"武平县\",\n \"350825\": \"连城县\",\n \"350881\": \"漳平市\",\n \"350882\": \"其它区\",\n \"350900\": \"宁德市\",\n \"350902\": \"蕉城区\",\n \"350921\": \"霞浦县\",\n \"350922\": \"古田县\",\n \"350923\": \"屏南县\",\n \"350924\": \"寿宁县\",\n \"350925\": \"周宁县\",\n \"350926\": \"柘荣县\",\n \"350981\": \"福安市\",\n \"350982\": \"福鼎市\",\n \"350983\": \"其它区\",\n \"360000\": \"江西省\",\n \"360100\": \"南昌市\",\n \"360102\": \"东湖区\",\n \"360103\": \"西湖区\",\n \"360104\": \"青云谱区\",\n \"360105\": \"湾里区\",\n \"360111\": \"青山湖区\",\n \"360121\": \"南昌县\",\n \"360122\": \"新建县\",\n \"360123\": \"安义县\",\n \"360124\": \"进贤县\",\n \"360128\": \"其它区\",\n \"360200\": \"景德镇市\",\n \"360202\": \"昌江区\",\n \"360203\": \"珠山区\",\n \"360222\": \"浮梁县\",\n \"360281\": \"乐平市\",\n \"360282\": \"其它区\",\n \"360300\": \"萍乡市\",\n \"360302\": \"安源区\",\n \"360313\": \"湘东区\",\n \"360321\": \"莲花县\",\n \"360322\": \"上栗县\",\n \"360323\": \"芦溪县\",\n \"360324\": \"其它区\",\n \"360400\": \"九江市\",\n \"360402\": \"庐山区\",\n \"360403\": \"浔阳区\",\n \"360421\": \"九江县\",\n \"360423\": \"武宁县\",\n \"360424\": \"修水县\",\n \"360425\": \"永修县\",\n \"360426\": \"德安县\",\n \"360427\": \"星子县\",\n \"360428\": \"都昌县\",\n \"360429\": \"湖口县\",\n \"360430\": \"彭泽县\",\n \"360481\": \"瑞昌市\",\n \"360482\": \"其它区\",\n \"360483\": \"共青城市\",\n \"360500\": \"新余市\",\n \"360502\": \"渝水区\",\n \"360521\": \"分宜县\",\n \"360522\": \"其它区\",\n \"360600\": \"鹰潭市\",\n \"360602\": \"月湖区\",\n \"360622\": \"余江县\",\n \"360681\": \"贵溪市\",\n \"360682\": \"其它区\",\n \"360700\": \"赣州市\",\n \"360702\": \"章贡区\",\n \"360721\": \"赣县\",\n \"360722\": \"信丰县\",\n \"360723\": \"大余县\",\n \"360724\": \"上犹县\",\n \"360725\": \"崇义县\",\n \"360726\": \"安远县\",\n \"360727\": \"龙南县\",\n \"360728\": \"定南县\",\n \"360729\": \"全南县\",\n \"360730\": \"宁都县\",\n \"360731\": \"于都县\",\n \"360732\": \"兴国县\",\n \"360733\": \"会昌县\",\n \"360734\": \"寻乌县\",\n \"360735\": \"石城县\",\n \"360781\": \"瑞金市\",\n \"360782\": \"南康市\",\n \"360783\": \"其它区\",\n \"360800\": \"吉安市\",\n \"360802\": \"吉州区\",\n \"360803\": \"青原区\",\n \"360821\": \"吉安县\",\n \"360822\": \"吉水县\",\n \"360823\": \"峡江县\",\n \"360824\": \"新干县\",\n \"360825\": \"永丰县\",\n \"360826\": \"泰和县\",\n \"360827\": \"遂川县\",\n \"360828\": \"万安县\",\n \"360829\": \"安福县\",\n \"360830\": \"永新县\",\n \"360881\": \"井冈山市\",\n \"360882\": \"其它区\",\n \"360900\": \"宜春市\",\n \"360902\": \"袁州区\",\n \"360921\": \"奉新县\",\n \"360922\": \"万载县\",\n \"360923\": \"上高县\",\n \"360924\": \"宜丰县\",\n \"360925\": \"靖安县\",\n \"360926\": \"铜鼓县\",\n \"360981\": \"丰城市\",\n \"360982\": \"樟树市\",\n \"360983\": \"高安市\",\n \"360984\": \"其它区\",\n \"361000\": \"抚州市\",\n \"361002\": \"临川区\",\n \"361021\": \"南城县\",\n \"361022\": \"黎川县\",\n \"361023\": \"南丰县\",\n \"361024\": \"崇仁县\",\n \"361025\": \"乐安县\",\n \"361026\": \"宜黄县\",\n \"361027\": \"金溪县\",\n \"361028\": \"资溪县\",\n \"361029\": \"东乡县\",\n \"361030\": \"广昌县\",\n \"361031\": \"其它区\",\n \"361100\": \"上饶市\",\n \"361102\": \"信州区\",\n \"361121\": \"上饶县\",\n \"361122\": \"广丰县\",\n \"361123\": \"玉山县\",\n \"361124\": \"铅山县\",\n \"361125\": \"横峰县\",\n \"361126\": \"弋阳县\",\n \"361127\": \"余干县\",\n \"361128\": \"鄱阳县\",\n \"361129\": \"万年县\",\n \"361130\": \"婺源县\",\n \"361181\": \"德兴市\",\n \"361182\": \"其它区\",\n \"370000\": \"山东省\",\n \"370100\": \"济南市\",\n \"370102\": \"历下区\",\n \"370103\": \"市中区\",\n \"370104\": \"槐荫区\",\n \"370105\": \"天桥区\",\n \"370112\": \"历城区\",\n \"370113\": \"长清区\",\n \"370124\": \"平阴县\",\n \"370125\": \"济阳县\",\n \"370126\": \"商河县\",\n \"370181\": \"章丘市\",\n \"370182\": \"其它区\",\n \"370200\": \"青岛市\",\n \"370202\": \"市南区\",\n \"370203\": \"市北区\",\n \"370211\": \"黄岛区\",\n \"370212\": \"崂山区\",\n \"370213\": \"李沧区\",\n \"370214\": \"城阳区\",\n \"370281\": \"胶州市\",\n \"370282\": \"即墨市\",\n \"370283\": \"平度市\",\n \"370285\": \"莱西市\",\n \"370286\": \"其它区\",\n \"370300\": \"淄博市\",\n \"370302\": \"淄川区\",\n \"370303\": \"张店区\",\n \"370304\": \"博山区\",\n \"370305\": \"临淄区\",\n \"370306\": \"周村区\",\n \"370321\": \"桓台县\",\n \"370322\": \"高青县\",\n \"370323\": \"沂源县\",\n \"370324\": \"其它区\",\n \"370400\": \"枣庄市\",\n \"370402\": \"市中区\",\n \"370403\": \"薛城区\",\n \"370404\": \"峄城区\",\n \"370405\": \"台儿庄区\",\n \"370406\": \"山亭区\",\n \"370481\": \"滕州市\",\n \"370482\": \"其它区\",\n \"370500\": \"东营市\",\n \"370502\": \"东营区\",\n \"370503\": \"河口区\",\n \"370521\": \"垦利县\",\n \"370522\": \"利津县\",\n \"370523\": \"广饶县\",\n \"370591\": \"其它区\",\n \"370600\": \"烟台市\",\n \"370602\": \"芝罘区\",\n \"370611\": \"福山区\",\n \"370612\": \"牟平区\",\n \"370613\": \"莱山区\",\n \"370634\": \"长岛县\",\n \"370681\": \"龙口市\",\n \"370682\": \"莱阳市\",\n \"370683\": \"莱州市\",\n \"370684\": \"蓬莱市\",\n \"370685\": \"招远市\",\n \"370686\": \"栖霞市\",\n \"370687\": \"海阳市\",\n \"370688\": \"其它区\",\n \"370700\": \"潍坊市\",\n \"370702\": \"潍城区\",\n \"370703\": \"寒亭区\",\n \"370704\": \"坊子区\",\n \"370705\": \"奎文区\",\n \"370724\": \"临朐县\",\n \"370725\": \"昌乐县\",\n \"370781\": \"青州市\",\n \"370782\": \"诸城市\",\n \"370783\": \"寿光市\",\n \"370784\": \"安丘市\",\n \"370785\": \"高密市\",\n \"370786\": \"昌邑市\",\n \"370787\": \"其它区\",\n \"370800\": \"济宁市\",\n \"370802\": \"市中区\",\n \"370811\": \"任城区\",\n \"370826\": \"微山县\",\n \"370827\": \"鱼台县\",\n \"370828\": \"金乡县\",\n \"370829\": \"嘉祥县\",\n \"370830\": \"汶上县\",\n \"370831\": \"泗水县\",\n \"370832\": \"梁山县\",\n \"370881\": \"曲阜市\",\n \"370882\": \"兖州市\",\n \"370883\": \"邹城市\",\n \"370884\": \"其它区\",\n \"370900\": \"泰安市\",\n \"370902\": \"泰山区\",\n \"370903\": \"岱岳区\",\n \"370921\": \"宁阳县\",\n \"370923\": \"东平县\",\n \"370982\": \"新泰市\",\n \"370983\": \"肥城市\",\n \"370984\": \"其它区\",\n \"371000\": \"威海市\",\n \"371002\": \"环翠区\",\n \"371081\": \"文登市\",\n \"371082\": \"荣成市\",\n \"371083\": \"乳山市\",\n \"371084\": \"其它区\",\n \"371100\": \"日照市\",\n \"371102\": \"东港区\",\n \"371103\": \"岚山区\",\n \"371121\": \"五莲县\",\n \"371122\": \"莒县\",\n \"371123\": \"其它区\",\n \"371200\": \"莱芜市\",\n \"371202\": \"莱城区\",\n \"371203\": \"钢城区\",\n \"371204\": \"其它区\",\n \"371300\": \"临沂市\",\n \"371302\": \"兰山区\",\n \"371311\": \"罗庄区\",\n \"371312\": \"河东区\",\n \"371321\": \"沂南县\",\n \"371322\": \"郯城县\",\n \"371323\": \"沂水县\",\n \"371324\": \"苍山县\",\n \"371325\": \"费县\",\n \"371326\": \"平邑县\",\n \"371327\": \"莒南县\",\n \"371328\": \"蒙阴县\",\n \"371329\": \"临沭县\",\n \"371330\": \"其它区\",\n \"371400\": \"德州市\",\n \"371402\": \"德城区\",\n \"371421\": \"陵县\",\n \"371422\": \"宁津县\",\n \"371423\": \"庆云县\",\n \"371424\": \"临邑县\",\n \"371425\": \"齐河县\",\n \"371426\": \"平原县\",\n \"371427\": \"夏津县\",\n \"371428\": \"武城县\",\n \"371481\": \"乐陵市\",\n \"371482\": \"禹城市\",\n \"371483\": \"其它区\",\n \"371500\": \"聊城市\",\n \"371502\": \"东昌府区\",\n \"371521\": \"阳谷县\",\n \"371522\": \"莘县\",\n \"371523\": \"茌平县\",\n \"371524\": \"东阿县\",\n \"371525\": \"冠县\",\n \"371526\": \"高唐县\",\n \"371581\": \"临清市\",\n \"371582\": \"其它区\",\n \"371600\": \"滨州市\",\n \"371602\": \"滨城区\",\n \"371621\": \"惠民县\",\n \"371622\": \"阳信县\",\n \"371623\": \"无棣县\",\n \"371624\": \"沾化县\",\n \"371625\": \"博兴县\",\n \"371626\": \"邹平县\",\n \"371627\": \"其它区\",\n \"371700\": \"菏泽市\",\n \"371702\": \"牡丹区\",\n \"371721\": \"曹县\",\n \"371722\": \"单县\",\n \"371723\": \"成武县\",\n \"371724\": \"巨野县\",\n \"371725\": \"郓城县\",\n \"371726\": \"鄄城县\",\n \"371727\": \"定陶县\",\n \"371728\": \"东明县\",\n \"371729\": \"其它区\",\n \"410000\": \"河南省\",\n \"410100\": \"郑州市\",\n \"410102\": \"中原区\",\n \"410103\": \"二七区\",\n \"410104\": \"管城回族区\",\n \"410105\": \"金水区\",\n \"410106\": \"上街区\",\n \"410108\": \"惠济区\",\n \"410122\": \"中牟县\",\n \"410181\": \"巩义市\",\n \"410182\": \"荥阳市\",\n \"410183\": \"新密市\",\n \"410184\": \"新郑市\",\n \"410185\": \"登封市\",\n \"410188\": \"其它区\",\n \"410200\": \"开封市\",\n \"410202\": \"龙亭区\",\n \"410203\": \"顺河回族区\",\n \"410204\": \"鼓楼区\",\n \"410205\": \"禹王台区\",\n \"410211\": \"金明区\",\n \"410221\": \"杞县\",\n \"410222\": \"通许县\",\n \"410223\": \"尉氏县\",\n \"410224\": \"开封县\",\n \"410225\": \"兰考县\",\n \"410226\": \"其它区\",\n \"410300\": \"洛阳市\",\n \"410302\": \"老城区\",\n \"410303\": \"西工区\",\n \"410304\": \"瀍河回族区\",\n \"410305\": \"涧西区\",\n \"410306\": \"吉利区\",\n \"410307\": \"洛龙区\",\n \"410322\": \"孟津县\",\n \"410323\": \"新安县\",\n \"410324\": \"栾川县\",\n \"410325\": \"嵩县\",\n \"410326\": \"汝阳县\",\n \"410327\": \"宜阳县\",\n \"410328\": \"洛宁县\",\n \"410329\": \"伊川县\",\n \"410381\": \"偃师市\",\n \"410400\": \"平顶山市\",\n \"410402\": \"新华区\",\n \"410403\": \"卫东区\",\n \"410404\": \"石龙区\",\n \"410411\": \"湛河区\",\n \"410421\": \"宝丰县\",\n \"410422\": \"叶县\",\n \"410423\": \"鲁山县\",\n \"410425\": \"郏县\",\n \"410481\": \"舞钢市\",\n \"410482\": \"汝州市\",\n \"410483\": \"其它区\",\n \"410500\": \"安阳市\",\n \"410502\": \"文峰区\",\n \"410503\": \"北关区\",\n \"410505\": \"殷都区\",\n \"410506\": \"龙安区\",\n \"410522\": \"安阳县\",\n \"410523\": \"汤阴县\",\n \"410526\": \"滑县\",\n \"410527\": \"内黄县\",\n \"410581\": \"林州市\",\n \"410582\": \"其它区\",\n \"410600\": \"鹤壁市\",\n \"410602\": \"鹤山区\",\n \"410603\": \"山城区\",\n \"410611\": \"淇滨区\",\n \"410621\": \"浚县\",\n \"410622\": \"淇县\",\n \"410623\": \"其它区\",\n \"410700\": \"新乡市\",\n \"410702\": \"红旗区\",\n \"410703\": \"卫滨区\",\n \"410704\": \"凤泉区\",\n \"410711\": \"牧野区\",\n \"410721\": \"新乡县\",\n \"410724\": \"获嘉县\",\n \"410725\": \"原阳县\",\n \"410726\": \"延津县\",\n \"410727\": \"封丘县\",\n \"410728\": \"长垣县\",\n \"410781\": \"卫辉市\",\n \"410782\": \"辉县市\",\n \"410783\": \"其它区\",\n \"410800\": \"焦作市\",\n \"410802\": \"解放区\",\n \"410803\": \"中站区\",\n \"410804\": \"马村区\",\n \"410811\": \"山阳区\",\n \"410821\": \"修武县\",\n \"410822\": \"博爱县\",\n \"410823\": \"武陟县\",\n \"410825\": \"温县\",\n \"410881\": \"济源市\",\n \"410882\": \"沁阳市\",\n \"410883\": \"孟州市\",\n \"410884\": \"其它区\",\n \"410900\": \"濮阳市\",\n \"410902\": \"华龙区\",\n \"410922\": \"清丰县\",\n \"410923\": \"南乐县\",\n \"410926\": \"范县\",\n \"410927\": \"台前县\",\n \"410928\": \"濮阳县\",\n \"410929\": \"其它区\",\n \"411000\": \"许昌市\",\n \"411002\": \"魏都区\",\n \"411023\": \"许昌县\",\n \"411024\": \"鄢陵县\",\n \"411025\": \"襄城县\",\n \"411081\": \"禹州市\",\n \"411082\": \"长葛市\",\n \"411083\": \"其它区\",\n \"411100\": \"漯河市\",\n \"411102\": \"源汇区\",\n \"411103\": \"郾城区\",\n \"411104\": \"召陵区\",\n \"411121\": \"舞阳县\",\n \"411122\": \"临颍县\",\n \"411123\": \"其它区\",\n \"411200\": \"三门峡市\",\n \"411202\": \"湖滨区\",\n \"411221\": \"渑池县\",\n \"411222\": \"陕县\",\n \"411224\": \"卢氏县\",\n \"411281\": \"义马市\",\n \"411282\": \"灵宝市\",\n \"411283\": \"其它区\",\n \"411300\": \"南阳市\",\n \"411302\": \"宛城区\",\n \"411303\": \"卧龙区\",\n \"411321\": \"南召县\",\n \"411322\": \"方城县\",\n \"411323\": \"西峡县\",\n \"411324\": \"镇平县\",\n \"411325\": \"内乡县\",\n \"411326\": \"淅川县\",\n \"411327\": \"社旗县\",\n \"411328\": \"唐河县\",\n \"411329\": \"新野县\",\n \"411330\": \"桐柏县\",\n \"411381\": \"邓州市\",\n \"411382\": \"其它区\",\n \"411400\": \"商丘市\",\n \"411402\": \"梁园区\",\n \"411403\": \"睢阳区\",\n \"411421\": \"民权县\",\n \"411422\": \"睢县\",\n \"411423\": \"宁陵县\",\n \"411424\": \"柘城县\",\n \"411425\": \"虞城县\",\n \"411426\": \"夏邑县\",\n \"411481\": \"永城市\",\n \"411482\": \"其它区\",\n \"411500\": \"信阳市\",\n \"411502\": \"浉河区\",\n \"411503\": \"平桥区\",\n \"411521\": \"罗山县\",\n \"411522\": \"光山县\",\n \"411523\": \"新县\",\n \"411524\": \"商城县\",\n \"411525\": \"固始县\",\n \"411526\": \"潢川县\",\n \"411527\": \"淮滨县\",\n \"411528\": \"息县\",\n \"411529\": \"其它区\",\n \"411600\": \"周口市\",\n \"411602\": \"川汇区\",\n \"411621\": \"扶沟县\",\n \"411622\": \"西华县\",\n \"411623\": \"商水县\",\n \"411624\": \"沈丘县\",\n \"411625\": \"郸城县\",\n \"411626\": \"淮阳县\",\n \"411627\": \"太康县\",\n \"411628\": \"鹿邑县\",\n \"411681\": \"项城市\",\n \"411682\": \"其它区\",\n \"411700\": \"驻马店市\",\n \"411702\": \"驿城区\",\n \"411721\": \"西平县\",\n \"411722\": \"上蔡县\",\n \"411723\": \"平舆县\",\n \"411724\": \"正阳县\",\n \"411725\": \"确山县\",\n \"411726\": \"泌阳县\",\n \"411727\": \"汝南县\",\n \"411728\": \"遂平县\",\n \"411729\": \"新蔡县\",\n \"411730\": \"其它区\",\n \"420000\": \"湖北省\",\n \"420100\": \"武汉市\",\n \"420102\": \"江岸区\",\n \"420103\": \"江汉区\",\n \"420104\": \"硚口区\",\n \"420105\": \"汉阳区\",\n \"420106\": \"武昌区\",\n \"420107\": \"青山区\",\n \"420111\": \"洪山区\",\n \"420112\": \"东西湖区\",\n \"420113\": \"汉南区\",\n \"420114\": \"蔡甸区\",\n \"420115\": \"江夏区\",\n \"420116\": \"黄陂区\",\n \"420117\": \"新洲区\",\n \"420118\": \"其它区\",\n \"420200\": \"黄石市\",\n \"420202\": \"黄石港区\",\n \"420203\": \"西塞山区\",\n \"420204\": \"下陆区\",\n \"420205\": \"铁山区\",\n \"420222\": \"阳新县\",\n \"420281\": \"大冶市\",\n \"420282\": \"其它区\",\n \"420300\": \"十堰市\",\n \"420302\": \"茅箭区\",\n \"420303\": \"张湾区\",\n \"420321\": \"郧县\",\n \"420322\": \"郧西县\",\n \"420323\": \"竹山县\",\n \"420324\": \"竹溪县\",\n \"420325\": \"房县\",\n \"420381\": \"丹江口市\",\n \"420383\": \"其它区\",\n \"420500\": \"宜昌市\",\n \"420502\": \"西陵区\",\n \"420503\": \"伍家岗区\",\n \"420504\": \"点军区\",\n \"420505\": \"猇亭区\",\n \"420506\": \"夷陵区\",\n \"420525\": \"远安县\",\n \"420526\": \"兴山县\",\n \"420527\": \"秭归县\",\n \"420528\": \"长阳土家族自治县\",\n \"420529\": \"五峰土家族自治县\",\n \"420581\": \"宜都市\",\n \"420582\": \"当阳市\",\n \"420583\": \"枝江市\",\n \"420584\": \"其它区\",\n \"420600\": \"襄阳市\",\n \"420602\": \"襄城区\",\n \"420606\": \"樊城区\",\n \"420607\": \"襄州区\",\n \"420624\": \"南漳县\",\n \"420625\": \"谷城县\",\n \"420626\": \"保康县\",\n \"420682\": \"老河口市\",\n \"420683\": \"枣阳市\",\n \"420684\": \"宜城市\",\n \"420685\": \"其它区\",\n \"420700\": \"鄂州市\",\n \"420702\": \"梁子湖区\",\n \"420703\": \"华容区\",\n \"420704\": \"鄂城区\",\n \"420705\": \"其它区\",\n \"420800\": \"荆门市\",\n \"420802\": \"东宝区\",\n \"420804\": \"掇刀区\",\n \"420821\": \"京山县\",\n \"420822\": \"沙洋县\",\n \"420881\": \"钟祥市\",\n \"420882\": \"其它区\",\n \"420900\": \"孝感市\",\n \"420902\": \"孝南区\",\n \"420921\": \"孝昌县\",\n \"420922\": \"大悟县\",\n \"420923\": \"云梦县\",\n \"420981\": \"应城市\",\n \"420982\": \"安陆市\",\n \"420984\": \"汉川市\",\n \"420985\": \"其它区\",\n \"421000\": \"荆州市\",\n \"421002\": \"沙市区\",\n \"421003\": \"荆州区\",\n \"421022\": \"公安县\",\n \"421023\": \"监利县\",\n \"421024\": \"江陵县\",\n \"421081\": \"石首市\",\n \"421083\": \"洪湖市\",\n \"421087\": \"松滋市\",\n \"421088\": \"其它区\",\n \"421100\": \"黄冈市\",\n \"421102\": \"黄州区\",\n \"421121\": \"团风县\",\n \"421122\": \"红安县\",\n \"421123\": \"罗田县\",\n \"421124\": \"英山县\",\n \"421125\": \"浠水县\",\n \"421126\": \"蕲春县\",\n \"421127\": \"黄梅县\",\n \"421181\": \"麻城市\",\n \"421182\": \"武穴市\",\n \"421183\": \"其它区\",\n \"421200\": \"咸宁市\",\n \"421202\": \"咸安区\",\n \"421221\": \"嘉鱼县\",\n \"421222\": \"通城县\",\n \"421223\": \"崇阳县\",\n \"421224\": \"通山县\",\n \"421281\": \"赤壁市\",\n \"421283\": \"其它区\",\n \"421300\": \"随州市\",\n \"421302\": \"曾都区\",\n \"421321\": \"随县\",\n \"421381\": \"广水市\",\n \"421382\": \"其它区\",\n \"422800\": \"恩施土家族苗族自治州\",\n \"422801\": \"恩施市\",\n \"422802\": \"利川市\",\n \"422822\": \"建始县\",\n \"422823\": \"巴东县\",\n \"422825\": \"宣恩县\",\n \"422826\": \"咸丰县\",\n \"422827\": \"来凤县\",\n \"422828\": \"鹤峰县\",\n \"422829\": \"其它区\",\n \"429004\": \"仙桃市\",\n \"429005\": \"潜江市\",\n \"429006\": \"天门市\",\n \"429021\": \"神农架林区\",\n \"430000\": \"湖南省\",\n \"430100\": \"长沙市\",\n \"430102\": \"芙蓉区\",\n \"430103\": \"天心区\",\n \"430104\": \"岳麓区\",\n \"430105\": \"开福区\",\n \"430111\": \"雨花区\",\n \"430121\": \"长沙县\",\n \"430122\": \"望城区\",\n \"430124\": \"宁乡县\",\n \"430181\": \"浏阳市\",\n \"430182\": \"其它区\",\n \"430200\": \"株洲市\",\n \"430202\": \"荷塘区\",\n \"430203\": \"芦淞区\",\n \"430204\": \"石峰区\",\n \"430211\": \"天元区\",\n \"430221\": \"株洲县\",\n \"430223\": \"攸县\",\n \"430224\": \"茶陵县\",\n \"430225\": \"炎陵县\",\n \"430281\": \"醴陵市\",\n \"430282\": \"其它区\",\n \"430300\": \"湘潭市\",\n \"430302\": \"雨湖区\",\n \"430304\": \"岳塘区\",\n \"430321\": \"湘潭县\",\n \"430381\": \"湘乡市\",\n \"430382\": \"韶山市\",\n \"430383\": \"其它区\",\n \"430400\": \"衡阳市\",\n \"430405\": \"珠晖区\",\n \"430406\": \"雁峰区\",\n \"430407\": \"石鼓区\",\n \"430408\": \"蒸湘区\",\n \"430412\": \"南岳区\",\n \"430421\": \"衡阳县\",\n \"430422\": \"衡南县\",\n \"430423\": \"衡山县\",\n \"430424\": \"衡东县\",\n \"430426\": \"祁东县\",\n \"430481\": \"耒阳市\",\n \"430482\": \"常宁市\",\n \"430483\": \"其它区\",\n \"430500\": \"邵阳市\",\n \"430502\": \"双清区\",\n \"430503\": \"大祥区\",\n \"430511\": \"北塔区\",\n \"430521\": \"邵东县\",\n \"430522\": \"新邵县\",\n \"430523\": \"邵阳县\",\n \"430524\": \"隆回县\",\n \"430525\": \"洞口县\",\n \"430527\": \"绥宁县\",\n \"430528\": \"新宁县\",\n \"430529\": \"城步苗族自治县\",\n \"430581\": \"武冈市\",\n \"430582\": \"其它区\",\n \"430600\": \"岳阳市\",\n \"430602\": \"岳阳楼区\",\n \"430603\": \"云溪区\",\n \"430611\": \"君山区\",\n \"430621\": \"岳阳县\",\n \"430623\": \"华容县\",\n \"430624\": \"湘阴县\",\n \"430626\": \"平江县\",\n \"430681\": \"汨罗市\",\n \"430682\": \"临湘市\",\n \"430683\": \"其它区\",\n \"430700\": \"常德市\",\n \"430702\": \"武陵区\",\n \"430703\": \"鼎城区\",\n \"430721\": \"安乡县\",\n \"430722\": \"汉寿县\",\n \"430723\": \"澧县\",\n \"430724\": \"临澧县\",\n \"430725\": \"桃源县\",\n \"430726\": \"石门县\",\n \"430781\": \"津市市\",\n \"430782\": \"其它区\",\n \"430800\": \"张家界市\",\n \"430802\": \"永定区\",\n \"430811\": \"武陵源区\",\n \"430821\": \"慈利县\",\n \"430822\": \"桑植县\",\n \"430823\": \"其它区\",\n \"430900\": \"益阳市\",\n \"430902\": \"资阳区\",\n \"430903\": \"赫山区\",\n \"430921\": \"南县\",\n \"430922\": \"桃江县\",\n \"430923\": \"安化县\",\n \"430981\": \"沅江市\",\n \"430982\": \"其它区\",\n \"431000\": \"郴州市\",\n \"431002\": \"北湖区\",\n \"431003\": \"苏仙区\",\n \"431021\": \"桂阳县\",\n \"431022\": \"宜章县\",\n \"431023\": \"永兴县\",\n \"431024\": \"嘉禾县\",\n \"431025\": \"临武县\",\n \"431026\": \"汝城县\",\n \"431027\": \"桂东县\",\n \"431028\": \"安仁县\",\n \"431081\": \"资兴市\",\n \"431082\": \"其它区\",\n \"431100\": \"永州市\",\n \"431102\": \"零陵区\",\n \"431103\": \"冷水滩区\",\n \"431121\": \"祁阳县\",\n \"431122\": \"东安县\",\n \"431123\": \"双牌县\",\n \"431124\": \"道县\",\n \"431125\": \"江永县\",\n \"431126\": \"宁远县\",\n \"431127\": \"蓝山县\",\n \"431128\": \"新田县\",\n \"431129\": \"江华瑶族自治县\",\n \"431130\": \"其它区\",\n \"431200\": \"怀化市\",\n \"431202\": \"鹤城区\",\n \"431221\": \"中方县\",\n \"431222\": \"沅陵县\",\n \"431223\": \"辰溪县\",\n \"431224\": \"溆浦县\",\n \"431225\": \"会同县\",\n \"431226\": \"麻阳苗族自治县\",\n \"431227\": \"新晃侗族自治县\",\n \"431228\": \"芷江侗族自治县\",\n \"431229\": \"靖州苗族侗族自治县\",\n \"431230\": \"通道侗族自治县\",\n \"431281\": \"洪江市\",\n \"431282\": \"其它区\",\n \"431300\": \"娄底市\",\n \"431302\": \"娄星区\",\n \"431321\": \"双峰县\",\n \"431322\": \"新化县\",\n \"431381\": \"冷水江市\",\n \"431382\": \"涟源市\",\n \"431383\": \"其它区\",\n \"433100\": \"湘西土家族苗族自治州\",\n \"433101\": \"吉首市\",\n \"433122\": \"泸溪县\",\n \"433123\": \"凤凰县\",\n \"433124\": \"花垣县\",\n \"433125\": \"保靖县\",\n \"433126\": \"古丈县\",\n \"433127\": \"永顺县\",\n \"433130\": \"龙山县\",\n \"433131\": \"其它区\",\n \"440000\": \"广东省\",\n \"440100\": \"广州市\",\n \"440103\": \"荔湾区\",\n \"440104\": \"越秀区\",\n \"440105\": \"海珠区\",\n \"440106\": \"天河区\",\n \"440111\": \"白云区\",\n \"440112\": \"黄埔区\",\n \"440113\": \"番禺区\",\n \"440114\": \"花都区\",\n \"440115\": \"南沙区\",\n \"440116\": \"萝岗区\",\n \"440183\": \"增城市\",\n \"440184\": \"从化市\",\n \"440189\": \"其它区\",\n \"440200\": \"韶关市\",\n \"440203\": \"武江区\",\n \"440204\": \"浈江区\",\n \"440205\": \"曲江区\",\n \"440222\": \"始兴县\",\n \"440224\": \"仁化县\",\n \"440229\": \"翁源县\",\n \"440232\": \"乳源瑶族自治县\",\n \"440233\": \"新丰县\",\n \"440281\": \"乐昌市\",\n \"440282\": \"南雄市\",\n \"440283\": \"其它区\",\n \"440300\": \"深圳市\",\n \"440303\": \"罗湖区\",\n \"440304\": \"福田区\",\n \"440305\": \"南山区\",\n \"440306\": \"宝安区\",\n \"440307\": \"龙岗区\",\n \"440308\": \"盐田区\",\n \"440309\": \"其它区\",\n \"440320\": \"光明新区\",\n \"440321\": \"坪山新区\",\n \"440322\": \"大鹏新区\",\n \"440323\": \"龙华新区\",\n \"440400\": \"珠海市\",\n \"440402\": \"香洲区\",\n \"440403\": \"斗门区\",\n \"440404\": \"金湾区\",\n \"440488\": \"其它区\",\n \"440500\": \"汕头市\",\n \"440507\": \"龙湖区\",\n \"440511\": \"金平区\",\n \"440512\": \"濠江区\",\n \"440513\": \"潮阳区\",\n \"440514\": \"潮南区\",\n \"440515\": \"澄海区\",\n \"440523\": \"南澳县\",\n \"440524\": \"其它区\",\n \"440600\": \"佛山市\",\n \"440604\": \"禅城区\",\n \"440605\": \"南海区\",\n \"440606\": \"顺德区\",\n \"440607\": \"三水区\",\n \"440608\": \"高明区\",\n \"440609\": \"其它区\",\n \"440700\": \"江门市\",\n \"440703\": \"蓬江区\",\n \"440704\": \"江海区\",\n \"440705\": \"新会区\",\n \"440781\": \"台山市\",\n \"440783\": \"开平市\",\n \"440784\": \"鹤山市\",\n \"440785\": \"恩平市\",\n \"440786\": \"其它区\",\n \"440800\": \"湛江市\",\n \"440802\": \"赤坎区\",\n \"440803\": \"霞山区\",\n \"440804\": \"坡头区\",\n \"440811\": \"麻章区\",\n \"440823\": \"遂溪县\",\n \"440825\": \"徐闻县\",\n \"440881\": \"廉江市\",\n \"440882\": \"雷州市\",\n \"440883\": \"吴川市\",\n \"440884\": \"其它区\",\n \"440900\": \"茂名市\",\n \"440902\": \"茂南区\",\n \"440903\": \"茂港区\",\n \"440923\": \"电白县\",\n \"440981\": \"高州市\",\n \"440982\": \"化州市\",\n \"440983\": \"信宜市\",\n \"440984\": \"其它区\",\n \"441200\": \"肇庆市\",\n \"441202\": \"端州区\",\n \"441203\": \"鼎湖区\",\n \"441223\": \"广宁县\",\n \"441224\": \"怀集县\",\n \"441225\": \"封开县\",\n \"441226\": \"德庆县\",\n \"441283\": \"高要市\",\n \"441284\": \"四会市\",\n \"441285\": \"其它区\",\n \"441300\": \"惠州市\",\n \"441302\": \"惠城区\",\n \"441303\": \"惠阳区\",\n \"441322\": \"博罗县\",\n \"441323\": \"惠东县\",\n \"441324\": \"龙门县\",\n \"441325\": \"其它区\",\n \"441400\": \"梅州市\",\n \"441402\": \"梅江区\",\n \"441421\": \"梅县\",\n \"441422\": \"大埔县\",\n \"441423\": \"丰顺县\",\n \"441424\": \"五华县\",\n \"441426\": \"平远县\",\n \"441427\": \"蕉岭县\",\n \"441481\": \"兴宁市\",\n \"441482\": \"其它区\",\n \"441500\": \"汕尾市\",\n \"441502\": \"城区\",\n \"441521\": \"海丰县\",\n \"441523\": \"陆河县\",\n \"441581\": \"陆丰市\",\n \"441582\": \"其它区\",\n \"441600\": \"河源市\",\n \"441602\": \"源城区\",\n \"441621\": \"紫金县\",\n \"441622\": \"龙川县\",\n \"441623\": \"连平县\",\n \"441624\": \"和平县\",\n \"441625\": \"东源县\",\n \"441626\": \"其它区\",\n \"441700\": \"阳江市\",\n \"441702\": \"江城区\",\n \"441721\": \"阳西县\",\n \"441723\": \"阳东县\",\n \"441781\": \"阳春市\",\n \"441782\": \"其它区\",\n \"441800\": \"清远市\",\n \"441802\": \"清城区\",\n \"441821\": \"佛冈县\",\n \"441823\": \"阳山县\",\n \"441825\": \"连山壮族瑶族自治县\",\n \"441826\": \"连南瑶族自治县\",\n \"441827\": \"清新区\",\n \"441881\": \"英德市\",\n \"441882\": \"连州市\",\n \"441883\": \"其它区\",\n \"441900\": \"东莞市\",\n \"442000\": \"中山市\",\n \"442101\": \"东沙群岛\",\n \"445100\": \"潮州市\",\n \"445102\": \"湘桥区\",\n \"445121\": \"潮安区\",\n \"445122\": \"饶平县\",\n \"445186\": \"其它区\",\n \"445200\": \"揭阳市\",\n \"445202\": \"榕城区\",\n \"445221\": \"揭东区\",\n \"445222\": \"揭西县\",\n \"445224\": \"惠来县\",\n \"445281\": \"普宁市\",\n \"445285\": \"其它区\",\n \"445300\": \"云浮市\",\n \"445302\": \"云城区\",\n \"445321\": \"新兴县\",\n \"445322\": \"郁南县\",\n \"445323\": \"云安县\",\n \"445381\": \"罗定市\",\n \"445382\": \"其它区\",\n \"450000\": \"广西壮族自治区\",\n \"450100\": \"南宁市\",\n \"450102\": \"兴宁区\",\n \"450103\": \"青秀区\",\n \"450105\": \"江南区\",\n \"450107\": \"西乡塘区\",\n \"450108\": \"良庆区\",\n \"450109\": \"邕宁区\",\n \"450122\": \"武鸣县\",\n \"450123\": \"隆安县\",\n \"450124\": \"马山县\",\n \"450125\": \"上林县\",\n \"450126\": \"宾阳县\",\n \"450127\": \"横县\",\n \"450128\": \"其它区\",\n \"450200\": \"柳州市\",\n \"450202\": \"城中区\",\n \"450203\": \"鱼峰区\",\n \"450204\": \"柳南区\",\n \"450205\": \"柳北区\",\n \"450221\": \"柳江县\",\n \"450222\": \"柳城县\",\n \"450223\": \"鹿寨县\",\n \"450224\": \"融安县\",\n \"450225\": \"融水苗族自治县\",\n \"450226\": \"三江侗族自治县\",\n \"450227\": \"其它区\",\n \"450300\": \"桂林市\",\n \"450302\": \"秀峰区\",\n \"450303\": \"叠彩区\",\n \"450304\": \"象山区\",\n \"450305\": \"七星区\",\n \"450311\": \"雁山区\",\n \"450321\": \"阳朔县\",\n \"450322\": \"临桂区\",\n \"450323\": \"灵川县\",\n \"450324\": \"全州县\",\n \"450325\": \"兴安县\",\n \"450326\": \"永福县\",\n \"450327\": \"灌阳县\",\n \"450328\": \"龙胜各族自治县\",\n \"450329\": \"资源县\",\n \"450330\": \"平乐县\",\n \"450331\": \"荔浦县\",\n \"450332\": \"恭城瑶族自治县\",\n \"450333\": \"其它区\",\n \"450400\": \"梧州市\",\n \"450403\": \"万秀区\",\n \"450405\": \"长洲区\",\n \"450406\": \"龙圩区\",\n \"450421\": \"苍梧县\",\n \"450422\": \"藤县\",\n \"450423\": \"蒙山县\",\n \"450481\": \"岑溪市\",\n \"450482\": \"其它区\",\n \"450500\": \"北海市\",\n \"450502\": \"海城区\",\n \"450503\": \"银海区\",\n \"450512\": \"铁山港区\",\n \"450521\": \"合浦县\",\n \"450522\": \"其它区\",\n \"450600\": \"防城港市\",\n \"450602\": \"港口区\",\n \"450603\": \"防城区\",\n \"450621\": \"上思县\",\n \"450681\": \"东兴市\",\n \"450682\": \"其它区\",\n \"450700\": \"钦州市\",\n \"450702\": \"钦南区\",\n \"450703\": \"钦北区\",\n \"450721\": \"灵山县\",\n \"450722\": \"浦北县\",\n \"450723\": \"其它区\",\n \"450800\": \"贵港市\",\n \"450802\": \"港北区\",\n \"450803\": \"港南区\",\n \"450804\": \"覃塘区\",\n \"450821\": \"平南县\",\n \"450881\": \"桂平市\",\n \"450882\": \"其它区\",\n \"450900\": \"玉林市\",\n \"450902\": \"玉州区\",\n \"450903\": \"福绵区\",\n \"450921\": \"容县\",\n \"450922\": \"陆川县\",\n \"450923\": \"博白县\",\n \"450924\": \"兴业县\",\n \"450981\": \"北流市\",\n \"450982\": \"其它区\",\n \"451000\": \"百色市\",\n \"451002\": \"右江区\",\n \"451021\": \"田阳县\",\n \"451022\": \"田东县\",\n \"451023\": \"平果县\",\n \"451024\": \"德保县\",\n \"451025\": \"靖西县\",\n \"451026\": \"那坡县\",\n \"451027\": \"凌云县\",\n \"451028\": \"乐业县\",\n \"451029\": \"田林县\",\n \"451030\": \"西林县\",\n \"451031\": \"隆林各族自治县\",\n \"451032\": \"其它区\",\n \"451100\": \"贺州市\",\n \"451102\": \"八步区\",\n \"451119\": \"平桂管理区\",\n \"451121\": \"昭平县\",\n \"451122\": \"钟山县\",\n \"451123\": \"富川瑶族自治县\",\n \"451124\": \"其它区\",\n \"451200\": \"河池市\",\n \"451202\": \"金城江区\",\n \"451221\": \"南丹县\",\n \"451222\": \"天峨县\",\n \"451223\": \"凤山县\",\n \"451224\": \"东兰县\",\n \"451225\": \"罗城仫佬族自治县\",\n \"451226\": \"环江毛南族自治县\",\n \"451227\": \"巴马瑶族自治县\",\n \"451228\": \"都安瑶族自治县\",\n \"451229\": \"大化瑶族自治县\",\n \"451281\": \"宜州市\",\n \"451282\": \"其它区\",\n \"451300\": \"来宾市\",\n \"451302\": \"兴宾区\",\n \"451321\": \"忻城县\",\n \"451322\": \"象州县\",\n \"451323\": \"武宣县\",\n \"451324\": \"金秀瑶族自治县\",\n \"451381\": \"合山市\",\n \"451382\": \"其它区\",\n \"451400\": \"崇左市\",\n \"451402\": \"江州区\",\n \"451421\": \"扶绥县\",\n \"451422\": \"宁明县\",\n \"451423\": \"龙州县\",\n \"451424\": \"大新县\",\n \"451425\": \"天等县\",\n \"451481\": \"凭祥市\",\n \"451482\": \"其它区\",\n \"460000\": \"海南省\",\n \"460100\": \"海口市\",\n \"460105\": \"秀英区\",\n \"460106\": \"龙华区\",\n \"460107\": \"琼山区\",\n \"460108\": \"美兰区\",\n \"460109\": \"其它区\",\n \"460200\": \"三亚市\",\n \"460300\": \"三沙市\",\n \"460321\": \"西沙群岛\",\n \"460322\": \"南沙群岛\",\n \"460323\": \"中沙群岛的岛礁及其海域\",\n \"469001\": \"五指山市\",\n \"469002\": \"琼海市\",\n \"469003\": \"儋州市\",\n \"469005\": \"文昌市\",\n \"469006\": \"万宁市\",\n \"469007\": \"东方市\",\n \"469025\": \"定安县\",\n \"469026\": \"屯昌县\",\n \"469027\": \"澄迈县\",\n \"469028\": \"临高县\",\n \"469030\": \"白沙黎族自治县\",\n \"469031\": \"昌江黎族自治县\",\n \"469033\": \"乐东黎族自治县\",\n \"469034\": \"陵水黎族自治县\",\n \"469035\": \"保亭黎族苗族自治县\",\n \"469036\": \"琼中黎族苗族自治县\",\n \"471005\": \"其它区\",\n \"500000\": \"重庆\",\n \"500100\": \"重庆市\",\n \"500101\": \"万州区\",\n \"500102\": \"涪陵区\",\n \"500103\": \"渝中区\",\n \"500104\": \"大渡口区\",\n \"500105\": \"江北区\",\n \"500106\": \"沙坪坝区\",\n \"500107\": \"九龙坡区\",\n \"500108\": \"南岸区\",\n \"500109\": \"北碚区\",\n \"500110\": \"万盛区\",\n \"500111\": \"双桥区\",\n \"500112\": \"渝北区\",\n \"500113\": \"巴南区\",\n \"500114\": \"黔江区\",\n \"500115\": \"长寿区\",\n \"500222\": \"綦江区\",\n \"500223\": \"潼南县\",\n \"500224\": \"铜梁县\",\n \"500225\": \"大足区\",\n \"500226\": \"荣昌县\",\n \"500227\": \"璧山县\",\n \"500228\": \"梁平县\",\n \"500229\": \"城口县\",\n \"500230\": \"丰都县\",\n \"500231\": \"垫江县\",\n \"500232\": \"武隆县\",\n \"500233\": \"忠县\",\n \"500234\": \"开县\",\n \"500235\": \"云阳县\",\n \"500236\": \"奉节县\",\n \"500237\": \"巫山县\",\n \"500238\": \"巫溪县\",\n \"500240\": \"石柱土家族自治县\",\n \"500241\": \"秀山土家族苗族自治县\",\n \"500242\": \"酉阳土家族苗族自治县\",\n \"500243\": \"彭水苗族土家族自治县\",\n \"500381\": \"江津区\",\n \"500382\": \"合川区\",\n \"500383\": \"永川区\",\n \"500384\": \"南川区\",\n \"500385\": \"其它区\",\n \"510000\": \"四川省\",\n \"510100\": \"成都市\",\n \"510104\": \"锦江区\",\n \"510105\": \"青羊区\",\n \"510106\": \"金牛区\",\n \"510107\": \"武侯区\",\n \"510108\": \"成华区\",\n \"510112\": \"龙泉驿区\",\n \"510113\": \"青白江区\",\n \"510114\": \"新都区\",\n \"510115\": \"温江区\",\n \"510121\": \"金堂县\",\n \"510122\": \"双流县\",\n \"510124\": \"郫县\",\n \"510129\": \"大邑县\",\n \"510131\": \"蒲江县\",\n \"510132\": \"新津县\",\n \"510181\": \"都江堰市\",\n \"510182\": \"彭州市\",\n \"510183\": \"邛崃市\",\n \"510184\": \"崇州市\",\n \"510185\": \"其它区\",\n \"510300\": \"自贡市\",\n \"510302\": \"自流井区\",\n \"510303\": \"贡井区\",\n \"510304\": \"大安区\",\n \"510311\": \"沿滩区\",\n \"510321\": \"荣县\",\n \"510322\": \"富顺县\",\n \"510323\": \"其它区\",\n \"510400\": \"攀枝花市\",\n \"510402\": \"东区\",\n \"510403\": \"西区\",\n \"510411\": \"仁和区\",\n \"510421\": \"米易县\",\n \"510422\": \"盐边县\",\n \"510423\": \"其它区\",\n \"510500\": \"泸州市\",\n \"510502\": \"江阳区\",\n \"510503\": \"纳溪区\",\n \"510504\": \"龙马潭区\",\n \"510521\": \"泸县\",\n \"510522\": \"合江县\",\n \"510524\": \"叙永县\",\n \"510525\": \"古蔺县\",\n \"510526\": \"其它区\",\n \"510600\": \"德阳市\",\n \"510603\": \"旌阳区\",\n \"510623\": \"中江县\",\n \"510626\": \"罗江县\",\n \"510681\": \"广汉市\",\n \"510682\": \"什邡市\",\n \"510683\": \"绵竹市\",\n \"510684\": \"其它区\",\n \"510700\": \"绵阳市\",\n \"510703\": \"涪城区\",\n \"510704\": \"游仙区\",\n \"510722\": \"三台县\",\n \"510723\": \"盐亭县\",\n \"510724\": \"安县\",\n \"510725\": \"梓潼县\",\n \"510726\": \"北川羌族自治县\",\n \"510727\": \"平武县\",\n \"510781\": \"江油市\",\n \"510782\": \"其它区\",\n \"510800\": \"广元市\",\n \"510802\": \"利州区\",\n \"510811\": \"昭化区\",\n \"510812\": \"朝天区\",\n \"510821\": \"旺苍县\",\n \"510822\": \"青川县\",\n \"510823\": \"剑阁县\",\n \"510824\": \"苍溪县\",\n \"510825\": \"其它区\",\n \"510900\": \"遂宁市\",\n \"510903\": \"船山区\",\n \"510904\": \"安居区\",\n \"510921\": \"蓬溪县\",\n \"510922\": \"射洪县\",\n \"510923\": \"大英县\",\n \"510924\": \"其它区\",\n \"511000\": \"内江市\",\n \"511002\": \"市中区\",\n \"511011\": \"东兴区\",\n \"511024\": \"威远县\",\n \"511025\": \"资中县\",\n \"511028\": \"隆昌县\",\n \"511029\": \"其它区\",\n \"511100\": \"乐山市\",\n \"511102\": \"市中区\",\n \"511111\": \"沙湾区\",\n \"511112\": \"五通桥区\",\n \"511113\": \"金口河区\",\n \"511123\": \"犍为县\",\n \"511124\": \"井研县\",\n \"511126\": \"夹江县\",\n \"511129\": \"沐川县\",\n \"511132\": \"峨边彝族自治县\",\n \"511133\": \"马边彝族自治县\",\n \"511181\": \"峨眉山市\",\n \"511182\": \"其它区\",\n \"511300\": \"南充市\",\n \"511302\": \"顺庆区\",\n \"511303\": \"高坪区\",\n \"511304\": \"嘉陵区\",\n \"511321\": \"南部县\",\n \"511322\": \"营山县\",\n \"511323\": \"蓬安县\",\n \"511324\": \"仪陇县\",\n \"511325\": \"西充县\",\n \"511381\": \"阆中市\",\n \"511382\": \"其它区\",\n \"511400\": \"眉山市\",\n \"511402\": \"东坡区\",\n \"511421\": \"仁寿县\",\n \"511422\": \"彭山县\",\n \"511423\": \"洪雅县\",\n \"511424\": \"丹棱县\",\n \"511425\": \"青神县\",\n \"511426\": \"其它区\",\n \"511500\": \"宜宾市\",\n \"511502\": \"翠屏区\",\n \"511521\": \"宜宾县\",\n \"511522\": \"南溪区\",\n \"511523\": \"江安县\",\n \"511524\": \"长宁县\",\n \"511525\": \"高县\",\n \"511526\": \"珙县\",\n \"511527\": \"筠连县\",\n \"511528\": \"兴文县\",\n \"511529\": \"屏山县\",\n \"511530\": \"其它区\",\n \"511600\": \"广安市\",\n \"511602\": \"广安区\",\n \"511603\": \"前锋区\",\n \"511621\": \"岳池县\",\n \"511622\": \"武胜县\",\n \"511623\": \"邻水县\",\n \"511681\": \"华蓥市\",\n \"511683\": \"其它区\",\n \"511700\": \"达州市\",\n \"511702\": \"通川区\",\n \"511721\": \"达川区\",\n \"511722\": \"宣汉县\",\n \"511723\": \"开江县\",\n \"511724\": \"大竹县\",\n \"511725\": \"渠县\",\n \"511781\": \"万源市\",\n \"511782\": \"其它区\",\n \"511800\": \"雅安市\",\n \"511802\": \"雨城区\",\n \"511821\": \"名山区\",\n \"511822\": \"荥经县\",\n \"511823\": \"汉源县\",\n \"511824\": \"石棉县\",\n \"511825\": \"天全县\",\n \"511826\": \"芦山县\",\n \"511827\": \"宝兴县\",\n \"511828\": \"其它区\",\n \"511900\": \"巴中市\",\n \"511902\": \"巴州区\",\n \"511903\": \"恩阳区\",\n \"511921\": \"通江县\",\n \"511922\": \"南江县\",\n \"511923\": \"平昌县\",\n \"511924\": \"其它区\",\n \"512000\": \"资阳市\",\n \"512002\": \"雁江区\",\n \"512021\": \"安岳县\",\n \"512022\": \"乐至县\",\n \"512081\": \"简阳市\",\n \"512082\": \"其它区\",\n \"513200\": \"阿坝藏族羌族自治州\",\n \"513221\": \"汶川县\",\n \"513222\": \"理县\",\n \"513223\": \"茂县\",\n \"513224\": \"松潘县\",\n \"513225\": \"九寨沟县\",\n \"513226\": \"金川县\",\n \"513227\": \"小金县\",\n \"513228\": \"黑水县\",\n \"513229\": \"马尔康县\",\n \"513230\": \"壤塘县\",\n \"513231\": \"阿坝县\",\n \"513232\": \"若尔盖县\",\n \"513233\": \"红原县\",\n \"513234\": \"其它区\",\n \"513300\": \"甘孜藏族自治州\",\n \"513321\": \"康定县\",\n \"513322\": \"泸定县\",\n \"513323\": \"丹巴县\",\n \"513324\": \"九龙县\",\n \"513325\": \"雅江县\",\n \"513326\": \"道孚县\",\n \"513327\": \"炉霍县\",\n \"513328\": \"甘孜县\",\n \"513329\": \"新龙县\",\n \"513330\": \"德格县\",\n \"513331\": \"白玉县\",\n \"513332\": \"石渠县\",\n \"513333\": \"色达县\",\n \"513334\": \"理塘县\",\n \"513335\": \"巴塘县\",\n \"513336\": \"乡城县\",\n \"513337\": \"稻城县\",\n \"513338\": \"得荣县\",\n \"513339\": \"其它区\",\n \"513400\": \"凉山彝族自治州\",\n \"513401\": \"西昌市\",\n \"513422\": \"木里藏族自治县\",\n \"513423\": \"盐源县\",\n \"513424\": \"德昌县\",\n \"513425\": \"会理县\",\n \"513426\": \"会东县\",\n \"513427\": \"宁南县\",\n \"513428\": \"普格县\",\n \"513429\": \"布拖县\",\n \"513430\": \"金阳县\",\n \"513431\": \"昭觉县\",\n \"513432\": \"喜德县\",\n \"513433\": \"冕宁县\",\n \"513434\": \"越西县\",\n \"513435\": \"甘洛县\",\n \"513436\": \"美姑县\",\n \"513437\": \"雷波县\",\n \"513438\": \"其它区\",\n \"520000\": \"贵州省\",\n \"520100\": \"贵阳市\",\n \"520102\": \"南明区\",\n \"520103\": \"云岩区\",\n \"520111\": \"花溪区\",\n \"520112\": \"乌当区\",\n \"520113\": \"白云区\",\n \"520121\": \"开阳县\",\n \"520122\": \"息烽县\",\n \"520123\": \"修文县\",\n \"520151\": \"观山湖区\",\n \"520181\": \"清镇市\",\n \"520182\": \"其它区\",\n \"520200\": \"六盘水市\",\n \"520201\": \"钟山区\",\n \"520203\": \"六枝特区\",\n \"520221\": \"水城县\",\n \"520222\": \"盘县\",\n \"520223\": \"其它区\",\n \"520300\": \"遵义市\",\n \"520302\": \"红花岗区\",\n \"520303\": \"汇川区\",\n \"520321\": \"遵义县\",\n \"520322\": \"桐梓县\",\n \"520323\": \"绥阳县\",\n \"520324\": \"正安县\",\n \"520325\": \"道真仡佬族苗族自治县\",\n \"520326\": \"务川仡佬族苗族自治县\",\n \"520327\": \"凤冈县\",\n \"520328\": \"湄潭县\",\n \"520329\": \"余庆县\",\n \"520330\": \"习水县\",\n \"520381\": \"赤水市\",\n \"520382\": \"仁怀市\",\n \"520383\": \"其它区\",\n \"520400\": \"安顺市\",\n \"520402\": \"西秀区\",\n \"520421\": \"平坝县\",\n \"520422\": \"普定县\",\n \"520423\": \"镇宁布依族苗族自治县\",\n \"520424\": \"关岭布依族苗族自治县\",\n \"520425\": \"紫云苗族布依族自治县\",\n \"520426\": \"其它区\",\n \"522200\": \"铜仁市\",\n \"522201\": \"碧江区\",\n \"522222\": \"江口县\",\n \"522223\": \"玉屏侗族自治县\",\n \"522224\": \"石阡县\",\n \"522225\": \"思南县\",\n \"522226\": \"印江土家族苗族自治县\",\n \"522227\": \"德江县\",\n \"522228\": \"沿河土家族自治县\",\n \"522229\": \"松桃苗族自治县\",\n \"522230\": \"万山区\",\n \"522231\": \"其它区\",\n \"522300\": \"黔西南布依族苗族自治州\",\n \"522301\": \"兴义市\",\n \"522322\": \"兴仁县\",\n \"522323\": \"普安县\",\n \"522324\": \"晴隆县\",\n \"522325\": \"贞丰县\",\n \"522326\": \"望谟县\",\n \"522327\": \"册亨县\",\n \"522328\": \"安龙县\",\n \"522329\": \"其它区\",\n \"522400\": \"毕节市\",\n \"522401\": \"七星关区\",\n \"522422\": \"大方县\",\n \"522423\": \"黔西县\",\n \"522424\": \"金沙县\",\n \"522425\": \"织金县\",\n \"522426\": \"纳雍县\",\n \"522427\": \"威宁彝族回族苗族自治县\",\n \"522428\": \"赫章县\",\n \"522429\": \"其它区\",\n \"522600\": \"黔东南苗族侗族自治州\",\n \"522601\": \"凯里市\",\n \"522622\": \"黄平县\",\n \"522623\": \"施秉县\",\n \"522624\": \"三穗县\",\n \"522625\": \"镇远县\",\n \"522626\": \"岑巩县\",\n \"522627\": \"天柱县\",\n \"522628\": \"锦屏县\",\n \"522629\": \"剑河县\",\n \"522630\": \"台江县\",\n \"522631\": \"黎平县\",\n \"522632\": \"榕江县\",\n \"522633\": \"从江县\",\n \"522634\": \"雷山县\",\n \"522635\": \"麻江县\",\n \"522636\": \"丹寨县\",\n \"522637\": \"其它区\",\n \"522700\": \"黔南布依族苗族自治州\",\n \"522701\": \"都匀市\",\n \"522702\": \"福泉市\",\n \"522722\": \"荔波县\",\n \"522723\": \"贵定县\",\n \"522725\": \"瓮安县\",\n \"522726\": \"独山县\",\n \"522727\": \"平塘县\",\n \"522728\": \"罗甸县\",\n \"522729\": \"长顺县\",\n \"522730\": \"龙里县\",\n \"522731\": \"惠水县\",\n \"522732\": \"三都水族自治县\",\n \"522733\": \"其它区\",\n \"530000\": \"云南省\",\n \"530100\": \"昆明市\",\n \"530102\": \"五华区\",\n \"530103\": \"盘龙区\",\n \"530111\": \"官渡区\",\n \"530112\": \"西山区\",\n \"530113\": \"东川区\",\n \"530121\": \"呈贡区\",\n \"530122\": \"晋宁县\",\n \"530124\": \"富民县\",\n \"530125\": \"宜良县\",\n \"530126\": \"石林彝族自治县\",\n \"530127\": \"嵩明县\",\n \"530128\": \"禄劝彝族苗族自治县\",\n \"530129\": \"寻甸回族彝族自治县\",\n \"530181\": \"安宁市\",\n \"530182\": \"其它区\",\n \"530300\": \"曲靖市\",\n \"530302\": \"麒麟区\",\n \"530321\": \"马龙县\",\n \"530322\": \"陆良县\",\n \"530323\": \"师宗县\",\n \"530324\": \"罗平县\",\n \"530325\": \"富源县\",\n \"530326\": \"会泽县\",\n \"530328\": \"沾益县\",\n \"530381\": \"宣威市\",\n \"530382\": \"其它区\",\n \"530400\": \"玉溪市\",\n \"530402\": \"红塔区\",\n \"530421\": \"江川县\",\n \"530422\": \"澄江县\",\n \"530423\": \"通海县\",\n \"530424\": \"华宁县\",\n \"530425\": \"易门县\",\n \"530426\": \"峨山彝族自治县\",\n \"530427\": \"新平彝族傣族自治县\",\n \"530428\": \"元江哈尼族彝族傣族自治县\",\n \"530429\": \"其它区\",\n \"530500\": \"保山市\",\n \"530502\": \"隆阳区\",\n \"530521\": \"施甸县\",\n \"530522\": \"腾冲县\",\n \"530523\": \"龙陵县\",\n \"530524\": \"昌宁县\",\n \"530525\": \"其它区\",\n \"530600\": \"昭通市\",\n \"530602\": \"昭阳区\",\n \"530621\": \"鲁甸县\",\n \"530622\": \"巧家县\",\n \"530623\": \"盐津县\",\n \"530624\": \"大关县\",\n \"530625\": \"永善县\",\n \"530626\": \"绥江县\",\n \"530627\": \"镇雄县\",\n \"530628\": \"彝良县\",\n \"530629\": \"威信县\",\n \"530630\": \"水富县\",\n \"530631\": \"其它区\",\n \"530700\": \"丽江市\",\n \"530702\": \"古城区\",\n \"530721\": \"玉龙纳西族自治县\",\n \"530722\": \"永胜县\",\n \"530723\": \"华坪县\",\n \"530724\": \"宁蒗彝族自治县\",\n \"530725\": \"其它区\",\n \"530800\": \"普洱市\",\n \"530802\": \"思茅区\",\n \"530821\": \"宁洱哈尼族彝族自治县\",\n \"530822\": \"墨江哈尼族自治县\",\n \"530823\": \"景东彝族自治县\",\n \"530824\": \"景谷傣族彝族自治县\",\n \"530825\": \"镇沅彝族哈尼族拉祜族自治县\",\n \"530826\": \"江城哈尼族彝族自治县\",\n \"530827\": \"孟连傣族拉祜族佤族自治县\",\n \"530828\": \"澜沧拉祜族自治县\",\n \"530829\": \"西盟佤族自治县\",\n \"530830\": \"其它区\",\n \"530900\": \"临沧市\",\n \"530902\": \"临翔区\",\n \"530921\": \"凤庆县\",\n \"530922\": \"云县\",\n \"530923\": \"永德县\",\n \"530924\": \"镇康县\",\n \"530925\": \"双江拉祜族佤族布朗族傣族自治县\",\n \"530926\": \"耿马傣族佤族自治县\",\n \"530927\": \"沧源佤族自治县\",\n \"530928\": \"其它区\",\n \"532300\": \"楚雄彝族自治州\",\n \"532301\": \"楚雄市\",\n \"532322\": \"双柏县\",\n \"532323\": \"牟定县\",\n \"532324\": \"南华县\",\n \"532325\": \"姚安县\",\n \"532326\": \"大姚县\",\n \"532327\": \"永仁县\",\n \"532328\": \"元谋县\",\n \"532329\": \"武定县\",\n \"532331\": \"禄丰县\",\n \"532332\": \"其它区\",\n \"532500\": \"红河哈尼族彝族自治州\",\n \"532501\": \"个旧市\",\n \"532502\": \"开远市\",\n \"532522\": \"蒙自市\",\n \"532523\": \"屏边苗族自治县\",\n \"532524\": \"建水县\",\n \"532525\": \"石屏县\",\n \"532526\": \"弥勒市\",\n \"532527\": \"泸西县\",\n \"532528\": \"元阳县\",\n \"532529\": \"红河县\",\n \"532530\": \"金平苗族瑶族傣族自治县\",\n \"532531\": \"绿春县\",\n \"532532\": \"河口瑶族自治县\",\n \"532533\": \"其它区\",\n \"532600\": \"文山壮族苗族自治州\",\n \"532621\": \"文山市\",\n \"532622\": \"砚山县\",\n \"532623\": \"西畴县\",\n \"532624\": \"麻栗坡县\",\n \"532625\": \"马关县\",\n \"532626\": \"丘北县\",\n \"532627\": \"广南县\",\n \"532628\": \"富宁县\",\n \"532629\": \"其它区\",\n \"532800\": \"西双版纳傣族自治州\",\n \"532801\": \"景洪市\",\n \"532822\": \"勐海县\",\n \"532823\": \"勐腊县\",\n \"532824\": \"其它区\",\n \"532900\": \"大理白族自治州\",\n \"532901\": \"大理市\",\n \"532922\": \"漾濞彝族自治县\",\n \"532923\": \"祥云县\",\n \"532924\": \"宾川县\",\n \"532925\": \"弥渡县\",\n \"532926\": \"南涧彝族自治县\",\n \"532927\": \"巍山彝族回族自治县\",\n \"532928\": \"永平县\",\n \"532929\": \"云龙县\",\n \"532930\": \"洱源县\",\n \"532931\": \"剑川县\",\n \"532932\": \"鹤庆县\",\n \"532933\": \"其它区\",\n \"533100\": \"德宏傣族景颇族自治州\",\n \"533102\": \"瑞丽市\",\n \"533103\": \"芒市\",\n \"533122\": \"梁河县\",\n \"533123\": \"盈江县\",\n \"533124\": \"陇川县\",\n \"533125\": \"其它区\",\n \"533300\": \"怒江傈僳族自治州\",\n \"533321\": \"泸水县\",\n \"533323\": \"福贡县\",\n \"533324\": \"贡山独龙族怒族自治县\",\n \"533325\": \"兰坪白族普米族自治县\",\n \"533326\": \"其它区\",\n \"533400\": \"迪庆藏族自治州\",\n \"533421\": \"香格里拉县\",\n \"533422\": \"德钦县\",\n \"533423\": \"维西傈僳族自治县\",\n \"533424\": \"其它区\",\n \"540000\": \"西藏自治区\",\n \"540100\": \"拉萨市\",\n \"540102\": \"城关区\",\n \"540121\": \"林周县\",\n \"540122\": \"当雄县\",\n \"540123\": \"尼木县\",\n \"540124\": \"曲水县\",\n \"540125\": \"堆龙德庆县\",\n \"540126\": \"达孜县\",\n \"540127\": \"墨竹工卡县\",\n \"540128\": \"其它区\",\n \"542100\": \"昌都地区\",\n \"542121\": \"昌都县\",\n \"542122\": \"江达县\",\n \"542123\": \"贡觉县\",\n \"542124\": \"类乌齐县\",\n \"542125\": \"丁青县\",\n \"542126\": \"察雅县\",\n \"542127\": \"八宿县\",\n \"542128\": \"左贡县\",\n \"542129\": \"芒康县\",\n \"542132\": \"洛隆县\",\n \"542133\": \"边坝县\",\n \"542134\": \"其它区\",\n \"542200\": \"山南地区\",\n \"542221\": \"乃东县\",\n \"542222\": \"扎囊县\",\n \"542223\": \"贡嘎县\",\n \"542224\": \"桑日县\",\n \"542225\": \"琼结县\",\n \"542226\": \"曲松县\",\n \"542227\": \"措美县\",\n \"542228\": \"洛扎县\",\n \"542229\": \"加查县\",\n \"542231\": \"隆子县\",\n \"542232\": \"错那县\",\n \"542233\": \"浪卡子县\",\n \"542234\": \"其它区\",\n \"542300\": \"日喀则地区\",\n \"542301\": \"日喀则市\",\n \"542322\": \"南木林县\",\n \"542323\": \"江孜县\",\n \"542324\": \"定日县\",\n \"542325\": \"萨迦县\",\n \"542326\": \"拉孜县\",\n \"542327\": \"昂仁县\",\n \"542328\": \"谢通门县\",\n \"542329\": \"白朗县\",\n \"542330\": \"仁布县\",\n \"542331\": \"康马县\",\n \"542332\": \"定结县\",\n \"542333\": \"仲巴县\",\n \"542334\": \"亚东县\",\n \"542335\": \"吉隆县\",\n \"542336\": \"聂拉木县\",\n \"542337\": \"萨嘎县\",\n \"542338\": \"岗巴县\",\n \"542339\": \"其它区\",\n \"542400\": \"那曲地区\",\n \"542421\": \"那曲县\",\n \"542422\": \"嘉黎县\",\n \"542423\": \"比如县\",\n \"542424\": \"聂荣县\",\n \"542425\": \"安多县\",\n \"542426\": \"申扎县\",\n \"542427\": \"索县\",\n \"542428\": \"班戈县\",\n \"542429\": \"巴青县\",\n \"542430\": \"尼玛县\",\n \"542431\": \"其它区\",\n \"542432\": \"双湖县\",\n \"542500\": \"阿里地区\",\n \"542521\": \"普兰县\",\n \"542522\": \"札达县\",\n \"542523\": \"噶尔县\",\n \"542524\": \"日土县\",\n \"542525\": \"革吉县\",\n \"542526\": \"改则县\",\n \"542527\": \"措勤县\",\n \"542528\": \"其它区\",\n \"542600\": \"林芝地区\",\n \"542621\": \"林芝县\",\n \"542622\": \"工布江达县\",\n \"542623\": \"米林县\",\n \"542624\": \"墨脱县\",\n \"542625\": \"波密县\",\n \"542626\": \"察隅县\",\n \"542627\": \"朗县\",\n \"542628\": \"其它区\",\n \"610000\": \"陕西省\",\n \"610100\": \"西安市\",\n \"610102\": \"新城区\",\n \"610103\": \"碑林区\",\n \"610104\": \"莲湖区\",\n \"610111\": \"灞桥区\",\n \"610112\": \"未央区\",\n \"610113\": \"雁塔区\",\n \"610114\": \"阎良区\",\n \"610115\": \"临潼区\",\n \"610116\": \"长安区\",\n \"610122\": \"蓝田县\",\n \"610124\": \"周至县\",\n \"610125\": \"户县\",\n \"610126\": \"高陵县\",\n \"610127\": \"其它区\",\n \"610200\": \"铜川市\",\n \"610202\": \"王益区\",\n \"610203\": \"印台区\",\n \"610204\": \"耀州区\",\n \"610222\": \"宜君县\",\n \"610223\": \"其它区\",\n \"610300\": \"宝鸡市\",\n \"610302\": \"渭滨区\",\n \"610303\": \"金台区\",\n \"610304\": \"陈仓区\",\n \"610322\": \"凤翔县\",\n \"610323\": \"岐山县\",\n \"610324\": \"扶风县\",\n \"610326\": \"眉县\",\n \"610327\": \"陇县\",\n \"610328\": \"千阳县\",\n \"610329\": \"麟游县\",\n \"610330\": \"凤县\",\n \"610331\": \"太白县\",\n \"610332\": \"其它区\",\n \"610400\": \"咸阳市\",\n \"610402\": \"秦都区\",\n \"610403\": \"杨陵区\",\n \"610404\": \"渭城区\",\n \"610422\": \"三原县\",\n \"610423\": \"泾阳县\",\n \"610424\": \"乾县\",\n \"610425\": \"礼泉县\",\n \"610426\": \"永寿县\",\n \"610427\": \"彬县\",\n \"610428\": \"长武县\",\n \"610429\": \"旬邑县\",\n \"610430\": \"淳化县\",\n \"610431\": \"武功县\",\n \"610481\": \"兴平市\",\n \"610482\": \"其它区\",\n \"610500\": \"渭南市\",\n \"610502\": \"临渭区\",\n \"610521\": \"华县\",\n \"610522\": \"潼关县\",\n \"610523\": \"大荔县\",\n \"610524\": \"合阳县\",\n \"610525\": \"澄城县\",\n \"610526\": \"蒲城县\",\n \"610527\": \"白水县\",\n \"610528\": \"富平县\",\n \"610581\": \"韩城市\",\n \"610582\": \"华阴市\",\n \"610583\": \"其它区\",\n \"610600\": \"延安市\",\n \"610602\": \"宝塔区\",\n \"610621\": \"延长县\",\n \"610622\": \"延川县\",\n \"610623\": \"子长县\",\n \"610624\": \"安塞县\",\n \"610625\": \"志丹县\",\n \"610626\": \"吴起县\",\n \"610627\": \"甘泉县\",\n \"610628\": \"富县\",\n \"610629\": \"洛川县\",\n \"610630\": \"宜川县\",\n \"610631\": \"黄龙县\",\n \"610632\": \"黄陵县\",\n \"610633\": \"其它区\",\n \"610700\": \"汉中市\",\n \"610702\": \"汉台区\",\n \"610721\": \"南郑县\",\n \"610722\": \"城固县\",\n \"610723\": \"洋县\",\n \"610724\": \"西乡县\",\n \"610725\": \"勉县\",\n \"610726\": \"宁强县\",\n \"610727\": \"略阳县\",\n \"610728\": \"镇巴县\",\n \"610729\": \"留坝县\",\n \"610730\": \"佛坪县\",\n \"610731\": \"其它区\",\n \"610800\": \"榆林市\",\n \"610802\": \"榆阳区\",\n \"610821\": \"神木县\",\n \"610822\": \"府谷县\",\n \"610823\": \"横山县\",\n \"610824\": \"靖边县\",\n \"610825\": \"定边县\",\n \"610826\": \"绥德县\",\n \"610827\": \"米脂县\",\n \"610828\": \"佳县\",\n \"610829\": \"吴堡县\",\n \"610830\": \"清涧县\",\n \"610831\": \"子洲县\",\n \"610832\": \"其它区\",\n \"610900\": \"安康市\",\n \"610902\": \"汉滨区\",\n \"610921\": \"汉阴县\",\n \"610922\": \"石泉县\",\n \"610923\": \"宁陕县\",\n \"610924\": \"紫阳县\",\n \"610925\": \"岚皋县\",\n \"610926\": \"平利县\",\n \"610927\": \"镇坪县\",\n \"610928\": \"旬阳县\",\n \"610929\": \"白河县\",\n \"610930\": \"其它区\",\n \"611000\": \"商洛市\",\n \"611002\": \"商州区\",\n \"611021\": \"洛南县\",\n \"611022\": \"丹凤县\",\n \"611023\": \"商南县\",\n \"611024\": \"山阳县\",\n \"611025\": \"镇安县\",\n \"611026\": \"柞水县\",\n \"611027\": \"其它区\",\n \"620000\": \"甘肃省\",\n \"620100\": \"兰州市\",\n \"620102\": \"城关区\",\n \"620103\": \"七里河区\",\n \"620104\": \"西固区\",\n \"620105\": \"安宁区\",\n \"620111\": \"红古区\",\n \"620121\": \"永登县\",\n \"620122\": \"皋兰县\",\n \"620123\": \"榆中县\",\n \"620124\": \"其它区\",\n \"620200\": \"嘉峪关市\",\n \"620300\": \"金昌市\",\n \"620302\": \"金川区\",\n \"620321\": \"永昌县\",\n \"620322\": \"其它区\",\n \"620400\": \"白银市\",\n \"620402\": \"白银区\",\n \"620403\": \"平川区\",\n \"620421\": \"靖远县\",\n \"620422\": \"会宁县\",\n \"620423\": \"景泰县\",\n \"620424\": \"其它区\",\n \"620500\": \"天水市\",\n \"620502\": \"秦州区\",\n \"620503\": \"麦积区\",\n \"620521\": \"清水县\",\n \"620522\": \"秦安县\",\n \"620523\": \"甘谷县\",\n \"620524\": \"武山县\",\n \"620525\": \"张家川回族自治县\",\n \"620526\": \"其它区\",\n \"620600\": \"武威市\",\n \"620602\": \"凉州区\",\n \"620621\": \"民勤县\",\n \"620622\": \"古浪县\",\n \"620623\": \"天祝藏族自治县\",\n \"620624\": \"其它区\",\n \"620700\": \"张掖市\",\n \"620702\": \"甘州区\",\n \"620721\": \"肃南裕固族自治县\",\n \"620722\": \"民乐县\",\n \"620723\": \"临泽县\",\n \"620724\": \"高台县\",\n \"620725\": \"山丹县\",\n \"620726\": \"其它区\",\n \"620800\": \"平凉市\",\n \"620802\": \"崆峒区\",\n \"620821\": \"泾川县\",\n \"620822\": \"灵台县\",\n \"620823\": \"崇信县\",\n \"620824\": \"华亭县\",\n \"620825\": \"庄浪县\",\n \"620826\": \"静宁县\",\n \"620827\": \"其它区\",\n \"620900\": \"酒泉市\",\n \"620902\": \"肃州区\",\n \"620921\": \"金塔县\",\n \"620922\": \"瓜州县\",\n \"620923\": \"肃北蒙古族自治县\",\n \"620924\": \"阿克塞哈萨克族自治县\",\n \"620981\": \"玉门市\",\n \"620982\": \"敦煌市\",\n \"620983\": \"其它区\",\n \"621000\": \"庆阳市\",\n \"621002\": \"西峰区\",\n \"621021\": \"庆城县\",\n \"621022\": \"环县\",\n \"621023\": \"华池县\",\n \"621024\": \"合水县\",\n \"621025\": \"正宁县\",\n \"621026\": \"宁县\",\n \"621027\": \"镇原县\",\n \"621028\": \"其它区\",\n \"621100\": \"定西市\",\n \"621102\": \"安定区\",\n \"621121\": \"通渭县\",\n \"621122\": \"陇西县\",\n \"621123\": \"渭源县\",\n \"621124\": \"临洮县\",\n \"621125\": \"漳县\",\n \"621126\": \"岷县\",\n \"621127\": \"其它区\",\n \"621200\": \"陇南市\",\n \"621202\": \"武都区\",\n \"621221\": \"成县\",\n \"621222\": \"文县\",\n \"621223\": \"宕昌县\",\n \"621224\": \"康县\",\n \"621225\": \"西和县\",\n \"621226\": \"礼县\",\n \"621227\": \"徽县\",\n \"621228\": \"两当县\",\n \"621229\": \"其它区\",\n \"622900\": \"临夏回族自治州\",\n \"622901\": \"临夏市\",\n \"622921\": \"临夏县\",\n \"622922\": \"康乐县\",\n \"622923\": \"永靖县\",\n \"622924\": \"广河县\",\n \"622925\": \"和政县\",\n \"622926\": \"东乡族自治县\",\n \"622927\": \"积石山保安族东乡族撒拉族自治县\",\n \"622928\": \"其它区\",\n \"623000\": \"甘南藏族自治州\",\n \"623001\": \"合作市\",\n \"623021\": \"临潭县\",\n \"623022\": \"卓尼县\",\n \"623023\": \"舟曲县\",\n \"623024\": \"迭部县\",\n \"623025\": \"玛曲县\",\n \"623026\": \"碌曲县\",\n \"623027\": \"夏河县\",\n \"623028\": \"其它区\",\n \"630000\": \"青海省\",\n \"630100\": \"西宁市\",\n \"630102\": \"城东区\",\n \"630103\": \"城中区\",\n \"630104\": \"城西区\",\n \"630105\": \"城北区\",\n \"630121\": \"大通回族土族自治县\",\n \"630122\": \"湟中县\",\n \"630123\": \"湟源县\",\n \"630124\": \"其它区\",\n \"632100\": \"海东市\",\n \"632121\": \"平安县\",\n \"632122\": \"民和回族土族自治县\",\n \"632123\": \"乐都区\",\n \"632126\": \"互助土族自治县\",\n \"632127\": \"化隆回族自治县\",\n \"632128\": \"循化撒拉族自治县\",\n \"632129\": \"其它区\",\n \"632200\": \"海北藏族自治州\",\n \"632221\": \"门源回族自治县\",\n \"632222\": \"祁连县\",\n \"632223\": \"海晏县\",\n \"632224\": \"刚察县\",\n \"632225\": \"其它区\",\n \"632300\": \"黄南藏族自治州\",\n \"632321\": \"同仁县\",\n \"632322\": \"尖扎县\",\n \"632323\": \"泽库县\",\n \"632324\": \"河南蒙古族自治县\",\n \"632325\": \"其它区\",\n \"632500\": \"海南藏族自治州\",\n \"632521\": \"共和县\",\n \"632522\": \"同德县\",\n \"632523\": \"贵德县\",\n \"632524\": \"兴海县\",\n \"632525\": \"贵南县\",\n \"632526\": \"其它区\",\n \"632600\": \"果洛藏族自治州\",\n \"632621\": \"玛沁县\",\n \"632622\": \"班玛县\",\n \"632623\": \"甘德县\",\n \"632624\": \"达日县\",\n \"632625\": \"久治县\",\n \"632626\": \"玛多县\",\n \"632627\": \"其它区\",\n \"632700\": \"玉树藏族自治州\",\n \"632721\": \"玉树市\",\n \"632722\": \"杂多县\",\n \"632723\": \"称多县\",\n \"632724\": \"治多县\",\n \"632725\": \"囊谦县\",\n \"632726\": \"曲麻莱县\",\n \"632727\": \"其它区\",\n \"632800\": \"海西蒙古族藏族自治州\",\n \"632801\": \"格尔木市\",\n \"632802\": \"德令哈市\",\n \"632821\": \"乌兰县\",\n \"632822\": \"都兰县\",\n \"632823\": \"天峻县\",\n \"632824\": \"其它区\",\n \"640000\": \"宁夏回族自治区\",\n \"640100\": \"银川市\",\n \"640104\": \"兴庆区\",\n \"640105\": \"西夏区\",\n \"640106\": \"金凤区\",\n \"640121\": \"永宁县\",\n \"640122\": \"贺兰县\",\n \"640181\": \"灵武市\",\n \"640182\": \"其它区\",\n \"640200\": \"石嘴山市\",\n \"640202\": \"大武口区\",\n \"640205\": \"惠农区\",\n \"640221\": \"平罗县\",\n \"640222\": \"其它区\",\n \"640300\": \"吴忠市\",\n \"640302\": \"利通区\",\n \"640303\": \"红寺堡区\",\n \"640323\": \"盐池县\",\n \"640324\": \"同心县\",\n \"640381\": \"青铜峡市\",\n \"640382\": \"其它区\",\n \"640400\": \"固原市\",\n \"640402\": \"原州区\",\n \"640422\": \"西吉县\",\n \"640423\": \"隆德县\",\n \"640424\": \"泾源县\",\n \"640425\": \"彭阳县\",\n \"640426\": \"其它区\",\n \"640500\": \"中卫市\",\n \"640502\": \"沙坡头区\",\n \"640521\": \"中宁县\",\n \"640522\": \"海原县\",\n \"640523\": \"其它区\",\n \"650000\": \"新疆维吾尔自治区\",\n \"650100\": \"乌鲁木齐市\",\n \"650102\": \"天山区\",\n \"650103\": \"沙依巴克区\",\n \"650104\": \"新市区\",\n \"650105\": \"水磨沟区\",\n \"650106\": \"头屯河区\",\n \"650107\": \"达坂城区\",\n \"650109\": \"米东区\",\n \"650121\": \"乌鲁木齐县\",\n \"650122\": \"其它区\",\n \"650200\": \"克拉玛依市\",\n \"650202\": \"独山子区\",\n \"650203\": \"克拉玛依区\",\n \"650204\": \"白碱滩区\",\n \"650205\": \"乌尔禾区\",\n \"650206\": \"其它区\",\n \"652100\": \"吐鲁番地区\",\n \"652101\": \"吐鲁番市\",\n \"652122\": \"鄯善县\",\n \"652123\": \"托克逊县\",\n \"652124\": \"其它区\",\n \"652200\": \"哈密地区\",\n \"652201\": \"哈密市\",\n \"652222\": \"巴里坤哈萨克自治县\",\n \"652223\": \"伊吾县\",\n \"652224\": \"其它区\",\n \"652300\": \"昌吉回族自治州\",\n \"652301\": \"昌吉市\",\n \"652302\": \"阜康市\",\n \"652323\": \"呼图壁县\",\n \"652324\": \"玛纳斯县\",\n \"652325\": \"奇台县\",\n \"652327\": \"吉木萨尔县\",\n \"652328\": \"木垒哈萨克自治县\",\n \"652329\": \"其它区\",\n \"652700\": \"博尔塔拉蒙古自治州\",\n \"652701\": \"博乐市\",\n \"652702\": \"阿拉山口市\",\n \"652722\": \"精河县\",\n \"652723\": \"温泉县\",\n \"652724\": \"其它区\",\n \"652800\": \"巴音郭楞蒙古自治州\",\n \"652801\": \"库尔勒市\",\n \"652822\": \"轮台县\",\n \"652823\": \"尉犁县\",\n \"652824\": \"若羌县\",\n \"652825\": \"且末县\",\n \"652826\": \"焉耆回族自治县\",\n \"652827\": \"和静县\",\n \"652828\": \"和硕县\",\n \"652829\": \"博湖县\",\n \"652830\": \"其它区\",\n \"652900\": \"阿克苏地区\",\n \"652901\": \"阿克苏市\",\n \"652922\": \"温宿县\",\n \"652923\": \"库车县\",\n \"652924\": \"沙雅县\",\n \"652925\": \"新和县\",\n \"652926\": \"拜城县\",\n \"652927\": \"乌什县\",\n \"652928\": \"阿瓦提县\",\n \"652929\": \"柯坪县\",\n \"652930\": \"其它区\",\n \"653000\": \"克孜勒苏柯尔克孜自治州\",\n \"653001\": \"阿图什市\",\n \"653022\": \"阿克陶县\",\n \"653023\": \"阿合奇县\",\n \"653024\": \"乌恰县\",\n \"653025\": \"其它区\",\n \"653100\": \"喀什地区\",\n \"653101\": \"喀什市\",\n \"653121\": \"疏附县\",\n \"653122\": \"疏勒县\",\n \"653123\": \"英吉沙县\",\n \"653124\": \"泽普县\",\n \"653125\": \"莎车县\",\n \"653126\": \"叶城县\",\n \"653127\": \"麦盖提县\",\n \"653128\": \"岳普湖县\",\n \"653129\": \"伽师县\",\n \"653130\": \"巴楚县\",\n \"653131\": \"塔什库尔干塔吉克自治县\",\n \"653132\": \"其它区\",\n \"653200\": \"和田地区\",\n \"653201\": \"和田市\",\n \"653221\": \"和田县\",\n \"653222\": \"墨玉县\",\n \"653223\": \"皮山县\",\n \"653224\": \"洛浦县\",\n \"653225\": \"策勒县\",\n \"653226\": \"于田县\",\n \"653227\": \"民丰县\",\n \"653228\": \"其它区\",\n \"654000\": \"伊犁哈萨克自治州\",\n \"654002\": \"伊宁市\",\n \"654003\": \"奎屯市\",\n \"654021\": \"伊宁县\",\n \"654022\": \"察布查尔锡伯自治县\",\n \"654023\": \"霍城县\",\n \"654024\": \"巩留县\",\n \"654025\": \"新源县\",\n \"654026\": \"昭苏县\",\n \"654027\": \"特克斯县\",\n \"654028\": \"尼勒克县\",\n \"654029\": \"其它区\",\n \"654200\": \"塔城地区\",\n \"654201\": \"塔城市\",\n \"654202\": \"乌苏市\",\n \"654221\": \"额敏县\",\n \"654223\": \"沙湾县\",\n \"654224\": \"托里县\",\n \"654225\": \"裕民县\",\n \"654226\": \"和布克赛尔蒙古自治县\",\n \"654227\": \"其它区\",\n \"654300\": \"阿勒泰地区\",\n \"654301\": \"阿勒泰市\",\n \"654321\": \"布尔津县\",\n \"654322\": \"富蕴县\",\n \"654323\": \"福海县\",\n \"654324\": \"哈巴河县\",\n \"654325\": \"青河县\",\n \"654326\": \"吉木乃县\",\n \"654327\": \"其它区\",\n \"659001\": \"石河子市\",\n \"659002\": \"阿拉尔市\",\n \"659003\": \"图木舒克市\",\n \"659004\": \"五家渠市\",\n \"710000\": \"台湾\",\n \"710100\": \"台北市\",\n \"710101\": \"中正区\",\n \"710102\": \"大同区\",\n \"710103\": \"中山区\",\n \"710104\": \"松山区\",\n \"710105\": \"大安区\",\n \"710106\": \"万华区\",\n \"710107\": \"信义区\",\n \"710108\": \"士林区\",\n \"710109\": \"北投区\",\n \"710110\": \"内湖区\",\n \"710111\": \"南港区\",\n \"710112\": \"文山区\",\n \"710113\": \"其它区\",\n \"710200\": \"高雄市\",\n \"710201\": \"新兴区\",\n \"710202\": \"前金区\",\n \"710203\": \"芩雅区\",\n \"710204\": \"盐埕区\",\n \"710205\": \"鼓山区\",\n \"710206\": \"旗津区\",\n \"710207\": \"前镇区\",\n \"710208\": \"三民区\",\n \"710209\": \"左营区\",\n \"710210\": \"楠梓区\",\n \"710211\": \"小港区\",\n \"710212\": \"其它区\",\n \"710241\": \"苓雅区\",\n \"710242\": \"仁武区\",\n \"710243\": \"大社区\",\n \"710244\": \"冈山区\",\n \"710245\": \"路竹区\",\n \"710246\": \"阿莲区\",\n \"710247\": \"田寮区\",\n \"710248\": \"燕巢区\",\n \"710249\": \"桥头区\",\n \"710250\": \"梓官区\",\n \"710251\": \"弥陀区\",\n \"710252\": \"永安区\",\n \"710253\": \"湖内区\",\n \"710254\": \"凤山区\",\n \"710255\": \"大寮区\",\n \"710256\": \"林园区\",\n \"710257\": \"鸟松区\",\n \"710258\": \"大树区\",\n \"710259\": \"旗山区\",\n \"710260\": \"美浓区\",\n \"710261\": \"六龟区\",\n \"710262\": \"内门区\",\n \"710263\": \"杉林区\",\n \"710264\": \"甲仙区\",\n \"710265\": \"桃源区\",\n \"710266\": \"那玛夏区\",\n \"710267\": \"茂林区\",\n \"710268\": \"茄萣区\",\n \"710300\": \"台南市\",\n \"710301\": \"中西区\",\n \"710302\": \"东区\",\n \"710303\": \"南区\",\n \"710304\": \"北区\",\n \"710305\": \"安平区\",\n \"710306\": \"安南区\",\n \"710307\": \"其它区\",\n \"710339\": \"永康区\",\n \"710340\": \"归仁区\",\n \"710341\": \"新化区\",\n \"710342\": \"左镇区\",\n \"710343\": \"玉井区\",\n \"710344\": \"楠西区\",\n \"710345\": \"南化区\",\n \"710346\": \"仁德区\",\n \"710347\": \"关庙区\",\n \"710348\": \"龙崎区\",\n \"710349\": \"官田区\",\n \"710350\": \"麻豆区\",\n \"710351\": \"佳里区\",\n \"710352\": \"西港区\",\n \"710353\": \"七股区\",\n \"710354\": \"将军区\",\n \"710355\": \"学甲区\",\n \"710356\": \"北门区\",\n \"710357\": \"新营区\",\n \"710358\": \"后壁区\",\n \"710359\": \"白河区\",\n \"710360\": \"东山区\",\n \"710361\": \"六甲区\",\n \"710362\": \"下营区\",\n \"710363\": \"柳营区\",\n \"710364\": \"盐水区\",\n \"710365\": \"善化区\",\n \"710366\": \"大内区\",\n \"710367\": \"山上区\",\n \"710368\": \"新市区\",\n \"710369\": \"安定区\",\n \"710400\": \"台中市\",\n \"710401\": \"中区\",\n \"710402\": \"东区\",\n \"710403\": \"南区\",\n \"710404\": \"西区\",\n \"710405\": \"北区\",\n \"710406\": \"北屯区\",\n \"710407\": \"西屯区\",\n \"710408\": \"南屯区\",\n \"710409\": \"其它区\",\n \"710431\": \"太平区\",\n \"710432\": \"大里区\",\n \"710433\": \"雾峰区\",\n \"710434\": \"乌日区\",\n \"710435\": \"丰原区\",\n \"710436\": \"后里区\",\n \"710437\": \"石冈区\",\n \"710438\": \"东势区\",\n \"710439\": \"和平区\",\n \"710440\": \"新社区\",\n \"710441\": \"潭子区\",\n \"710442\": \"大雅区\",\n \"710443\": \"神冈区\",\n \"710444\": \"大肚区\",\n \"710445\": \"沙鹿区\",\n \"710446\": \"龙井区\",\n \"710447\": \"梧栖区\",\n \"710448\": \"清水区\",\n \"710449\": \"大甲区\",\n \"710450\": \"外埔区\",\n \"710451\": \"大安区\",\n \"710500\": \"金门县\",\n \"710507\": \"金沙镇\",\n \"710508\": \"金湖镇\",\n \"710509\": \"金宁乡\",\n \"710510\": \"金城镇\",\n \"710511\": \"烈屿乡\",\n \"710512\": \"乌坵乡\",\n \"710600\": \"南投县\",\n \"710614\": \"南投市\",\n \"710615\": \"中寮乡\",\n \"710616\": \"草屯镇\",\n \"710617\": \"国姓乡\",\n \"710618\": \"埔里镇\",\n \"710619\": \"仁爱乡\",\n \"710620\": \"名间乡\",\n \"710621\": \"集集镇\",\n \"710622\": \"水里乡\",\n \"710623\": \"鱼池乡\",\n \"710624\": \"信义乡\",\n \"710625\": \"竹山镇\",\n \"710626\": \"鹿谷乡\",\n \"710700\": \"基隆市\",\n \"710701\": \"仁爱区\",\n \"710702\": \"信义区\",\n \"710703\": \"中正区\",\n \"710704\": \"中山区\",\n \"710705\": \"安乐区\",\n \"710706\": \"暖暖区\",\n \"710707\": \"七堵区\",\n \"710708\": \"其它区\",\n \"710800\": \"新竹市\",\n \"710801\": \"东区\",\n \"710802\": \"北区\",\n \"710803\": \"香山区\",\n \"710804\": \"其它区\",\n \"710900\": \"嘉义市\",\n \"710901\": \"东区\",\n \"710902\": \"西区\",\n \"710903\": \"其它区\",\n \"711100\": \"新北市\",\n \"711130\": \"万里区\",\n \"711131\": \"金山区\",\n \"711132\": \"板桥区\",\n \"711133\": \"汐止区\",\n \"711134\": \"深坑区\",\n \"711135\": \"石碇区\",\n \"711136\": \"瑞芳区\",\n \"711137\": \"平溪区\",\n \"711138\": \"双溪区\",\n \"711139\": \"贡寮区\",\n \"711140\": \"新店区\",\n \"711141\": \"坪林区\",\n \"711142\": \"乌来区\",\n \"711143\": \"永和区\",\n \"711144\": \"中和区\",\n \"711145\": \"土城区\",\n \"711146\": \"三峡区\",\n \"711147\": \"树林区\",\n \"711148\": \"莺歌区\",\n \"711149\": \"三重区\",\n \"711150\": \"新庄区\",\n \"711151\": \"泰山区\",\n \"711152\": \"林口区\",\n \"711153\": \"芦洲区\",\n \"711154\": \"五股区\",\n \"711155\": \"八里区\",\n \"711156\": \"淡水区\",\n \"711157\": \"三芝区\",\n \"711158\": \"石门区\",\n \"711200\": \"宜兰县\",\n \"711214\": \"宜兰市\",\n \"711215\": \"头城镇\",\n \"711216\": \"礁溪乡\",\n \"711217\": \"壮围乡\",\n \"711218\": \"员山乡\",\n \"711219\": \"罗东镇\",\n \"711220\": \"三星乡\",\n \"711221\": \"大同乡\",\n \"711222\": \"五结乡\",\n \"711223\": \"冬山乡\",\n \"711224\": \"苏澳镇\",\n \"711225\": \"南澳乡\",\n \"711226\": \"钓鱼台\",\n \"711300\": \"新竹县\",\n \"711314\": \"竹北市\",\n \"711315\": \"湖口乡\",\n \"711316\": \"新丰乡\",\n \"711317\": \"新埔镇\",\n \"711318\": \"关西镇\",\n \"711319\": \"芎林乡\",\n \"711320\": \"宝山乡\",\n \"711321\": \"竹东镇\",\n \"711322\": \"五峰乡\",\n \"711323\": \"横山乡\",\n \"711324\": \"尖石乡\",\n \"711325\": \"北埔乡\",\n \"711326\": \"峨眉乡\",\n \"711400\": \"桃园县\",\n \"711414\": \"中坜市\",\n \"711415\": \"平镇市\",\n \"711416\": \"龙潭乡\",\n \"711417\": \"杨梅市\",\n \"711418\": \"新屋乡\",\n \"711419\": \"观音乡\",\n \"711420\": \"桃园市\",\n \"711421\": \"龟山乡\",\n \"711422\": \"八德市\",\n \"711423\": \"大溪镇\",\n \"711424\": \"复兴乡\",\n \"711425\": \"大园乡\",\n \"711426\": \"芦竹乡\",\n \"711500\": \"苗栗县\",\n \"711519\": \"竹南镇\",\n \"711520\": \"头份镇\",\n \"711521\": \"三湾乡\",\n \"711522\": \"南庄乡\",\n \"711523\": \"狮潭乡\",\n \"711524\": \"后龙镇\",\n \"711525\": \"通霄镇\",\n \"711526\": \"苑里镇\",\n \"711527\": \"苗栗市\",\n \"711528\": \"造桥乡\",\n \"711529\": \"头屋乡\",\n \"711530\": \"公馆乡\",\n \"711531\": \"大湖乡\",\n \"711532\": \"泰安乡\",\n \"711533\": \"铜锣乡\",\n \"711534\": \"三义乡\",\n \"711535\": \"西湖乡\",\n \"711536\": \"卓兰镇\",\n \"711700\": \"彰化县\",\n \"711727\": \"彰化市\",\n \"711728\": \"芬园乡\",\n \"711729\": \"花坛乡\",\n \"711730\": \"秀水乡\",\n \"711731\": \"鹿港镇\",\n \"711732\": \"福兴乡\",\n \"711733\": \"线西乡\",\n \"711734\": \"和美镇\",\n \"711735\": \"伸港乡\",\n \"711736\": \"员林镇\",\n \"711737\": \"社头乡\",\n \"711738\": \"永靖乡\",\n \"711739\": \"埔心乡\",\n \"711740\": \"溪湖镇\",\n \"711741\": \"大村乡\",\n \"711742\": \"埔盐乡\",\n \"711743\": \"田中镇\",\n \"711744\": \"北斗镇\",\n \"711745\": \"田尾乡\",\n \"711746\": \"埤头乡\",\n \"711747\": \"溪州乡\",\n \"711748\": \"竹塘乡\",\n \"711749\": \"二林镇\",\n \"711750\": \"大城乡\",\n \"711751\": \"芳苑乡\",\n \"711752\": \"二水乡\",\n \"711900\": \"嘉义县\",\n \"711919\": \"番路乡\",\n \"711920\": \"梅山乡\",\n \"711921\": \"竹崎乡\",\n \"711922\": \"阿里山乡\",\n \"711923\": \"中埔乡\",\n \"711924\": \"大埔乡\",\n \"711925\": \"水上乡\",\n \"711926\": \"鹿草乡\",\n \"711927\": \"太保市\",\n \"711928\": \"朴子市\",\n \"711929\": \"东石乡\",\n \"711930\": \"六脚乡\",\n \"711931\": \"新港乡\",\n \"711932\": \"民雄乡\",\n \"711933\": \"大林镇\",\n \"711934\": \"溪口乡\",\n \"711935\": \"义竹乡\",\n \"711936\": \"布袋镇\",\n \"712100\": \"云林县\",\n \"712121\": \"斗南镇\",\n \"712122\": \"大埤乡\",\n \"712123\": \"虎尾镇\",\n \"712124\": \"土库镇\",\n \"712125\": \"褒忠乡\",\n \"712126\": \"东势乡\",\n \"712127\": \"台西乡\",\n \"712128\": \"仑背乡\",\n \"712129\": \"麦寮乡\",\n \"712130\": \"斗六市\",\n \"712131\": \"林内乡\",\n \"712132\": \"古坑乡\",\n \"712133\": \"莿桐乡\",\n \"712134\": \"西螺镇\",\n \"712135\": \"二仑乡\",\n \"712136\": \"北港镇\",\n \"712137\": \"水林乡\",\n \"712138\": \"口湖乡\",\n \"712139\": \"四湖乡\",\n \"712140\": \"元长乡\",\n \"712400\": \"屏东县\",\n \"712434\": \"屏东市\",\n \"712435\": \"三地门乡\",\n \"712436\": \"雾台乡\",\n \"712437\": \"玛家乡\",\n \"712438\": \"九如乡\",\n \"712439\": \"里港乡\",\n \"712440\": \"高树乡\",\n \"712441\": \"盐埔乡\",\n \"712442\": \"长治乡\",\n \"712443\": \"麟洛乡\",\n \"712444\": \"竹田乡\",\n \"712445\": \"内埔乡\",\n \"712446\": \"万丹乡\",\n \"712447\": \"潮州镇\",\n \"712448\": \"泰武乡\",\n \"712449\": \"来义乡\",\n \"712450\": \"万峦乡\",\n \"712451\": \"崁顶乡\",\n \"712452\": \"新埤乡\",\n \"712453\": \"南州乡\",\n \"712454\": \"林边乡\",\n \"712455\": \"东港镇\",\n \"712456\": \"琉球乡\",\n \"712457\": \"佳冬乡\",\n \"712458\": \"新园乡\",\n \"712459\": \"枋寮乡\",\n \"712460\": \"枋山乡\",\n \"712461\": \"春日乡\",\n \"712462\": \"狮子乡\",\n \"712463\": \"车城乡\",\n \"712464\": \"牡丹乡\",\n \"712465\": \"恒春镇\",\n \"712466\": \"满州乡\",\n \"712500\": \"台东县\",\n \"712517\": \"台东市\",\n \"712518\": \"绿岛乡\",\n \"712519\": \"兰屿乡\",\n \"712520\": \"延平乡\",\n \"712521\": \"卑南乡\",\n \"712522\": \"鹿野乡\",\n \"712523\": \"关山镇\",\n \"712524\": \"海端乡\",\n \"712525\": \"池上乡\",\n \"712526\": \"东河乡\",\n \"712527\": \"成功镇\",\n \"712528\": \"长滨乡\",\n \"712529\": \"金峰乡\",\n \"712530\": \"大武乡\",\n \"712531\": \"达仁乡\",\n \"712532\": \"太麻里乡\",\n \"712600\": \"花莲县\",\n \"712615\": \"花莲市\",\n \"712616\": \"新城乡\",\n \"712617\": \"太鲁阁\",\n \"712618\": \"秀林乡\",\n \"712619\": \"吉安乡\",\n \"712620\": \"寿丰乡\",\n \"712621\": \"凤林镇\",\n \"712622\": \"光复乡\",\n \"712623\": \"丰滨乡\",\n \"712624\": \"瑞穗乡\",\n \"712625\": \"万荣乡\",\n \"712626\": \"玉里镇\",\n \"712627\": \"卓溪乡\",\n \"712628\": \"富里乡\",\n \"712700\": \"澎湖县\",\n \"712707\": \"马公市\",\n \"712708\": \"西屿乡\",\n \"712709\": \"望安乡\",\n \"712710\": \"七美乡\",\n \"712711\": \"白沙乡\",\n \"712712\": \"湖西乡\",\n \"712800\": \"连江县\",\n \"712805\": \"南竿乡\",\n \"712806\": \"北竿乡\",\n \"712807\": \"莒光乡\",\n \"712808\": \"东引乡\",\n \"810000\": \"香港特别行政区\",\n \"810100\": \"香港岛\",\n \"810101\": \"中西区\",\n \"810102\": \"湾仔\",\n \"810103\": \"东区\",\n \"810104\": \"南区\",\n \"810200\": \"九龙\",\n \"810201\": \"九龙城区\",\n \"810202\": \"油尖旺区\",\n \"810203\": \"深水埗区\",\n \"810204\": \"黄大仙区\",\n \"810205\": \"观塘区\",\n \"810300\": \"新界\",\n \"810301\": \"北区\",\n \"810302\": \"大埔区\",\n \"810303\": \"沙田区\",\n \"810304\": \"西贡区\",\n \"810305\": \"元朗区\",\n \"810306\": \"屯门区\",\n \"810307\": \"荃湾区\",\n \"810308\": \"葵青区\",\n \"810309\": \"离岛区\",\n \"820000\": \"澳门特别行政区\",\n \"820100\": \"澳门半岛\",\n \"820200\": \"离岛\",\n \"990000\": \"海外\",\n \"990100\": \"海外\"\n}\n\n// id pid/parentId name children\nfunction tree(list) {\n var mapped = {}\n for (var i = 0, item; i < list.length; i++) {\n item = list[i]\n if (!item || !item.id) continue\n mapped[item.id] = item\n }\n\n var result = []\n for (var ii = 0; ii < list.length; ii++) {\n item = list[ii]\n\n if (!item) continue\n /* jshint -W041 */\n if (item.pid == undefined && item.parentId == undefined) {\n result.push(item)\n continue\n }\n var parent = mapped[item.pid] || mapped[item.parentId]\n if (!parent) continue\n if (!parent.children) parent.children = []\n parent.children.push(item)\n }\n return result\n}\n\nvar DICT_FIXED = function() {\n var fixed = []\n for (var id in DICT) {\n var pid = id.slice(2, 6) === '0000' ? undefined :\n id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') :\n id.slice(0, 4) + '00'\n fixed.push({\n id: id,\n pid: pid,\n name: DICT[id]\n })\n }\n return tree(fixed)\n}()\n\nmodule.exports = DICT_FIXED\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/address_dict.js\n// module id = 18\n// module chunks = 0","/*\n ## Miscellaneous\n*/\nvar DICT = require('./address_dict')\nmodule.exports = {\n\t// Dice\n\td4: function() {\n\t\treturn this.natural(1, 4)\n\t},\n\td6: function() {\n\t\treturn this.natural(1, 6)\n\t},\n\td8: function() {\n\t\treturn this.natural(1, 8)\n\t},\n\td12: function() {\n\t\treturn this.natural(1, 12)\n\t},\n\td20: function() {\n\t\treturn this.natural(1, 20)\n\t},\n\td100: function() {\n\t\treturn this.natural(1, 100)\n\t},\n\t/*\n\t 随机生成一个 GUID。\n\n\t http://www.broofa.com/2008/09/javascript-uuid-function/\n\t [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt)\n\t UUIDs (Universally Unique IDentifier)\n\t GUIDs (Globally Unique IDentifier)\n\t The formal definition of the UUID string representation is provided by the following ABNF [7]:\n\t UUID = time-low \"-\" time-mid \"-\"\n\t time-high-and-version \"-\"\n\t clock-seq-and-reserved\n\t clock-seq-low \"-\" node\n\t time-low = 4hexOctet\n\t time-mid = 2hexOctet\n\t time-high-and-version = 2hexOctet\n\t clock-seq-and-reserved = hexOctet\n\t clock-seq-low = hexOctet\n\t node = 6hexOctet\n\t hexOctet = hexDigit hexDigit\n\t hexDigit =\n\t \"0\" / \"1\" / \"2\" / \"3\" / \"4\" / \"5\" / \"6\" / \"7\" / \"8\" / \"9\" /\n\t \"a\" / \"b\" / \"c\" / \"d\" / \"e\" / \"f\" /\n\t \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\"\n\t \n\t https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349\n\t*/\n\tguid: function() {\n\t\tvar pool = \"abcdefABCDEF1234567890\",\n\t\t\tguid = this.string(pool, 8) + '-' +\n\t\t\tthis.string(pool, 4) + '-' +\n\t\t\tthis.string(pool, 4) + '-' +\n\t\t\tthis.string(pool, 4) + '-' +\n\t\t\tthis.string(pool, 12);\n\t\treturn guid\n\t},\n\tuuid: function() {\n\t\treturn this.guid()\n\t},\n\t/*\n\t 随机生成一个 18 位身份证。\n\n\t [身份证](http://baike.baidu.com/view/1697.htm#4)\n\t 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1\n\t [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html)\n\t*/\n\tid: function() {\n\t\tvar id,\n\t\t\tsum = 0,\n\t\t\trank = [\n\t\t\t\t\"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\", \"1\", \"6\", \"3\", \"7\", \"9\", \"10\", \"5\", \"8\", \"4\", \"2\"\n\t\t\t],\n\t\t\tlast = [\n\t\t\t\t\"1\", \"0\", \"X\", \"9\", \"8\", \"7\", \"6\", \"5\", \"4\", \"3\", \"2\"\n\t\t\t]\n\n\t\tid = this.pick(DICT).id +\n\t\t\tthis.date('yyyyMMdd') +\n\t\t\tthis.string('number', 3)\n\n\t\tfor (var i = 0; i < id.length; i++) {\n\t\t\tsum += id[i] * rank[i];\n\t\t}\n\t\tid += last[sum % 11];\n\n\t\treturn id\n\t},\n\n\t/*\n\t 生成一个全局的自增整数。\n\t 类似自增主键(auto increment primary key)。\n\t*/\n\tincrement: function() {\n\t\tvar key = 0\n\t\treturn function(step) {\n\t\t\treturn key += (+step || 1) // step?\n\t\t}\n\t}(),\n\tinc: function(step) {\n\t\treturn this.increment(step)\n\t}\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/random/misc.js\n// module id = 19\n// module chunks = 0","var Parser = require('./parser')\nvar Handler = require('./handler')\nmodule.exports = {\n\tParser: Parser,\n\tHandler: Handler\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/regexp/index.js\n// module id = 20\n// module chunks = 0","// https://github.com/nuysoft/regexp\n// forked from https://github.com/ForbesLindesay/regexp\n\nfunction parse(n) {\n if (\"string\" != typeof n) {\n var l = new TypeError(\"The regexp to parse must be represented as a string.\");\n throw l;\n }\n return index = 1, cgs = {}, parser.parse(n);\n}\n\nfunction Token(n) {\n this.type = n, this.offset = Token.offset(), this.text = Token.text();\n}\n\nfunction Alternate(n, l) {\n Token.call(this, \"alternate\"), this.left = n, this.right = l;\n}\n\nfunction Match(n) {\n Token.call(this, \"match\"), this.body = n.filter(Boolean);\n}\n\nfunction Group(n, l) {\n Token.call(this, n), this.body = l;\n}\n\nfunction CaptureGroup(n) {\n Group.call(this, \"capture-group\"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), \n this.body = n;\n}\n\nfunction Quantified(n, l) {\n Token.call(this, \"quantified\"), this.body = n, this.quantifier = l;\n}\n\nfunction Quantifier(n, l) {\n Token.call(this, \"quantifier\"), this.min = n, this.max = l, this.greedy = !0;\n}\n\nfunction CharSet(n, l) {\n Token.call(this, \"charset\"), this.invert = n, this.body = l;\n}\n\nfunction CharacterRange(n, l) {\n Token.call(this, \"range\"), this.start = n, this.end = l;\n}\n\nfunction Literal(n) {\n Token.call(this, \"literal\"), this.body = n, this.escaped = this.body != this.text;\n}\n\nfunction Unicode(n) {\n Token.call(this, \"unicode\"), this.code = n.toUpperCase();\n}\n\nfunction Hex(n) {\n Token.call(this, \"hex\"), this.code = n.toUpperCase();\n}\n\nfunction Octal(n) {\n Token.call(this, \"octal\"), this.code = n.toUpperCase();\n}\n\nfunction BackReference(n) {\n Token.call(this, \"back-reference\"), this.code = n.toUpperCase();\n}\n\nfunction ControlCharacter(n) {\n Token.call(this, \"control-character\"), this.code = n.toUpperCase();\n}\n\nvar parser = function() {\n function n(n, l) {\n function u() {\n this.constructor = n;\n }\n u.prototype = l.prototype, n.prototype = new u();\n }\n function l(n, l, u, t, r) {\n function e(n, l) {\n function u(n) {\n function l(n) {\n return n.charCodeAt(0).toString(16).toUpperCase();\n }\n return n.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\x08/g, \"\\\\b\").replace(/\\t/g, \"\\\\t\").replace(/\\n/g, \"\\\\n\").replace(/\\f/g, \"\\\\f\").replace(/\\r/g, \"\\\\r\").replace(/[\\x00-\\x07\\x0B\\x0E\\x0F]/g, function(n) {\n return \"\\\\x0\" + l(n);\n }).replace(/[\\x10-\\x1F\\x80-\\xFF]/g, function(n) {\n return \"\\\\x\" + l(n);\n }).replace(/[\\u0180-\\u0FFF]/g, function(n) {\n return \"\\\\u0\" + l(n);\n }).replace(/[\\u1080-\\uFFFF]/g, function(n) {\n return \"\\\\u\" + l(n);\n });\n }\n var t, r;\n switch (n.length) {\n case 0:\n t = \"end of input\";\n break;\n\n case 1:\n t = n[0];\n break;\n\n default:\n t = n.slice(0, -1).join(\", \") + \" or \" + n[n.length - 1];\n }\n return r = l ? '\"' + u(l) + '\"' : \"end of input\", \"Expected \" + t + \" but \" + r + \" found.\";\n }\n this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, \n this.name = \"SyntaxError\", this.message = e(n, l);\n }\n function u(n) {\n function u() {\n return n.substring(Lt, qt);\n }\n function t() {\n return Lt;\n }\n function r(l) {\n function u(l, u, t) {\n var r, e;\n for (r = u; t > r; r++) e = n.charAt(r), \"\\n\" === e ? (l.seenCR || l.line++, l.column = 1, \n l.seenCR = !1) : \"\\r\" === e || \"\\u2028\" === e || \"\\u2029\" === e ? (l.line++, l.column = 1, \n l.seenCR = !0) : (l.column++, l.seenCR = !1);\n }\n return Mt !== l && (Mt > l && (Mt = 0, Dt = {\n line: 1,\n column: 1,\n seenCR: !1\n }), u(Dt, Mt, l), Mt = l), Dt;\n }\n function e(n) {\n Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n));\n }\n function o(n) {\n var l = 0;\n for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++;\n }\n function c() {\n var l, u, t, r, o;\n return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, \n qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], \n t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, \n u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, \n l = il), l;\n }\n function i() {\n var n, l, u, t, r;\n if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), \n Wt--, null === t ? u = al : (qt = u, u = il), null !== u) {\n for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), \n null === r && (r = a());\n null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), \n null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il);\n } else qt = n, n = il; else qt = n, n = il;\n return n;\n }\n function a() {\n var n;\n return n = x(), null === n && (n = Q(), null === n && (n = B())), n;\n }\n function f() {\n var l, u;\n return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), \n null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function s() {\n var l, u;\n return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), \n null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function h() {\n var n, l, u;\n return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), \n null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n;\n }\n function d() {\n var n, l, u;\n return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, \n l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, \n n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n;\n }\n function p() {\n var n;\n return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), \n null === n && (n = g(), null === n && (n = b()))))), n;\n }\n function v() {\n var l, u, t, r, o, c;\n return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, \n 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, \n qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, \n l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n function w() {\n var l, u, t, r;\n return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, \n 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n }\n function A() {\n var l, u, t, r;\n return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), \n null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, \n 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n }\n function C() {\n var l, u;\n return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), \n null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function g() {\n var l, u;\n return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), \n null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function b() {\n var l, u;\n return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), \n null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function k() {\n var l;\n return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), \n l;\n }\n function T() {\n var l, u, t;\n if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, \n 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), \n qt++) : (t = null, 0 === Wt && e(Il)); else u = il;\n return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, \n l;\n }\n function x() {\n var l, u, t, r;\n return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), \n null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), \n null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), \n null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il)) : (qt = l, l = il), l;\n }\n function y() {\n var n, l;\n return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, \n n = l) : n = l, n;\n }\n function m() {\n var l, u, t;\n return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), \n null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n function R() {\n var l, u, t;\n return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), \n null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n function F() {\n var l, u, t;\n return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), \n null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n function Q() {\n var l, u, t, r, o;\n if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), \n null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), \n null === t && (t = al), null !== t) {\n for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), \n null === o && (o = U());\n null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), \n null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il);\n } else qt = l, l = il; else qt = l, l = il;\n return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l;\n }\n function S() {\n var l, u, t, r;\n return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, \n 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, \n l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, \n null === l && (u = null, 0 === Wt && e(du)), l;\n }\n function U() {\n var n, l;\n return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), \n n;\n }\n function E() {\n var l, u;\n return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), \n null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l;\n }\n function G() {\n var n;\n return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), \n null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), \n null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), \n null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), \n null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n;\n }\n function B() {\n var n;\n return n = j(), null === n && (n = q(), null === n && (n = $())), n;\n }\n function j() {\n var l, u;\n return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), \n null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function $() {\n var l, u;\n return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, \n 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, \n Wt--, null === l && (u = null, 0 === Wt && e(yu)), l;\n }\n function q() {\n var n;\n return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), \n null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), \n null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), \n null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), \n null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), \n n;\n }\n function L() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function M() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), \n null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function D() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), \n null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function H() {\n var l, u;\n return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), \n null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function O() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), \n null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function W() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), \n null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function z() {\n var l, u;\n return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), \n null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function I() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), \n null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function J() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), \n null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function K() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), \n null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function N() {\n var l, u;\n return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), \n null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function P() {\n var l, u;\n return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), \n null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function V() {\n var l, u;\n return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), \n null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function X() {\n var l, u;\n return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), \n null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function Y() {\n var l, u, t;\n return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), \n null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n function Z() {\n var l, u, t;\n return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), \n null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n function _() {\n var l, u, t, r;\n if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n null !== u) {\n if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), \n null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), \n qt++) : (r = null, 0 === Wt && e(mt)); else t = il;\n null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il);\n } else qt = l, l = il;\n return l;\n }\n function nl() {\n var l, u, t, r;\n if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), \n null !== u) {\n if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il);\n } else qt = l, l = il;\n return l;\n }\n function ll() {\n var l, u, t, r;\n if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), \n null !== u) {\n if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), \n null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), \n qt++) : (r = null, 0 === Wt && e(Ut)); else t = il;\n null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il);\n } else qt = l, l = il;\n return l;\n }\n function ul() {\n var l, u;\n return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), \n null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l;\n }\n function tl() {\n var l, u, t;\n return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), \n null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), \n null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, \n l = il)) : (qt = l, l = il), l;\n }\n var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = {\n regexp: c\n }, cl = c, il = null, al = \"\", fl = \"|\", sl = '\"|\"', hl = function(n, l) {\n return l ? new Alternate(n, l[1]) : n;\n }, dl = function(n, l, u) {\n return new Match([ n ].concat(l).concat([ u ]));\n }, pl = \"^\", vl = '\"^\"', wl = function() {\n return new Token(\"start\");\n }, Al = \"$\", Cl = '\"$\"', gl = function() {\n return new Token(\"end\");\n }, bl = function(n, l) {\n return new Quantified(n, l);\n }, kl = \"Quantifier\", Tl = function(n, l) {\n return l && (n.greedy = !1), n;\n }, xl = \"{\", yl = '\"{\"', ml = \",\", Rl = '\",\"', Fl = \"}\", Ql = '\"}\"', Sl = function(n, l) {\n return new Quantifier(n, l);\n }, Ul = \",}\", El = '\",}\"', Gl = function(n) {\n return new Quantifier(n, 1/0);\n }, Bl = function(n) {\n return new Quantifier(n, n);\n }, jl = \"+\", $l = '\"+\"', ql = function() {\n return new Quantifier(1, 1/0);\n }, Ll = \"*\", Ml = '\"*\"', Dl = function() {\n return new Quantifier(0, 1/0);\n }, Hl = \"?\", Ol = '\"?\"', Wl = function() {\n return new Quantifier(0, 1);\n }, zl = /^[0-9]/, Il = \"[0-9]\", Jl = function(n) {\n return +n.join(\"\");\n }, Kl = \"(\", Nl = '\"(\"', Pl = \")\", Vl = '\")\"', Xl = function(n) {\n return n;\n }, Yl = function(n) {\n return new CaptureGroup(n);\n }, Zl = \"?:\", _l = '\"?:\"', nu = function(n) {\n return new Group(\"non-capture-group\", n);\n }, lu = \"?=\", uu = '\"?=\"', tu = function(n) {\n return new Group(\"positive-lookahead\", n);\n }, ru = \"?!\", eu = '\"?!\"', ou = function(n) {\n return new Group(\"negative-lookahead\", n);\n }, cu = \"CharacterSet\", iu = \"[\", au = '\"[\"', fu = \"]\", su = '\"]\"', hu = function(n, l) {\n return new CharSet(!!n, l);\n }, du = \"CharacterRange\", pu = \"-\", vu = '\"-\"', wu = function(n, l) {\n return new CharacterRange(n, l);\n }, Au = \"Character\", Cu = /^[^\\\\\\]]/, gu = \"[^\\\\\\\\\\\\]]\", bu = function(n) {\n return new Literal(n);\n }, ku = \".\", Tu = '\".\"', xu = function() {\n return new Token(\"any-character\");\n }, yu = \"Literal\", mu = /^[^|\\\\\\/.[()?+*$\\^]/, Ru = \"[^|\\\\\\\\\\\\/.[()?+*$\\\\^]\", Fu = \"\\\\b\", Qu = '\"\\\\\\\\b\"', Su = function() {\n return new Token(\"backspace\");\n }, Uu = function() {\n return new Token(\"word-boundary\");\n }, Eu = \"\\\\B\", Gu = '\"\\\\\\\\B\"', Bu = function() {\n return new Token(\"non-word-boundary\");\n }, ju = \"\\\\d\", $u = '\"\\\\\\\\d\"', qu = function() {\n return new Token(\"digit\");\n }, Lu = \"\\\\D\", Mu = '\"\\\\\\\\D\"', Du = function() {\n return new Token(\"non-digit\");\n }, Hu = \"\\\\f\", Ou = '\"\\\\\\\\f\"', Wu = function() {\n return new Token(\"form-feed\");\n }, zu = \"\\\\n\", Iu = '\"\\\\\\\\n\"', Ju = function() {\n return new Token(\"line-feed\");\n }, Ku = \"\\\\r\", Nu = '\"\\\\\\\\r\"', Pu = function() {\n return new Token(\"carriage-return\");\n }, Vu = \"\\\\s\", Xu = '\"\\\\\\\\s\"', Yu = function() {\n return new Token(\"white-space\");\n }, Zu = \"\\\\S\", _u = '\"\\\\\\\\S\"', nt = function() {\n return new Token(\"non-white-space\");\n }, lt = \"\\\\t\", ut = '\"\\\\\\\\t\"', tt = function() {\n return new Token(\"tab\");\n }, rt = \"\\\\v\", et = '\"\\\\\\\\v\"', ot = function() {\n return new Token(\"vertical-tab\");\n }, ct = \"\\\\w\", it = '\"\\\\\\\\w\"', at = function() {\n return new Token(\"word\");\n }, ft = \"\\\\W\", st = '\"\\\\\\\\W\"', ht = function() {\n return new Token(\"non-word\");\n }, dt = \"\\\\c\", pt = '\"\\\\\\\\c\"', vt = \"any character\", wt = function(n) {\n return new ControlCharacter(n);\n }, At = \"\\\\\", Ct = '\"\\\\\\\\\"', gt = /^[1-9]/, bt = \"[1-9]\", kt = function(n) {\n return new BackReference(n);\n }, Tt = \"\\\\0\", xt = '\"\\\\\\\\0\"', yt = /^[0-7]/, mt = \"[0-7]\", Rt = function(n) {\n return new Octal(n.join(\"\"));\n }, Ft = \"\\\\x\", Qt = '\"\\\\\\\\x\"', St = /^[0-9a-fA-F]/, Ut = \"[0-9a-fA-F]\", Et = function(n) {\n return new Hex(n.join(\"\"));\n }, Gt = \"\\\\u\", Bt = '\"\\\\\\\\u\"', jt = function(n) {\n return new Unicode(n.join(\"\"));\n }, $t = function() {\n return new Token(\"null-character\");\n }, qt = 0, Lt = 0, Mt = 0, Dt = {\n line: 1,\n column: 1,\n seenCR: !1\n }, Ht = 0, Ot = [], Wt = 0;\n if (\"startRule\" in el) {\n if (!(el.startRule in ol)) throw new Error(\"Can't start parsing from rule \\\"\" + el.startRule + '\".');\n cl = ol[el.startRule];\n }\n if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl;\n throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column);\n }\n return n(l, Error), {\n SyntaxError: l,\n parse: u\n };\n}(), index = 1, cgs = {};\n\nmodule.exports = parser\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/regexp/parser.js\n// module id = 21\n// module chunks = 0","/*\n ## RegExp Handler\n\n https://github.com/ForbesLindesay/regexp\n https://github.com/dmajda/pegjs\n http://www.regexper.com/\n\n 每个节点的结构\n {\n type: '',\n offset: number,\n text: '',\n body: {},\n escaped: true/false\n }\n\n type 可选值\n alternate | 选择\n match 匹配\n capture-group () 捕获组\n non-capture-group (?:...) 非捕获组\n positive-lookahead (?=p) 零宽正向先行断言\n negative-lookahead (?!p) 零宽负向先行断言\n quantified a* 重复节点\n quantifier * 量词\n charset [] 字符集\n range {m, n} 范围\n literal a 直接量字符\n unicode \\uxxxx Unicode\n hex \\x 十六进制\n octal 八进制\n back-reference \\n 反向引用\n control-character \\cX 控制字符\n\n // Token\n start ^ 开头\n end $ 结尾\n any-character . 任意字符\n backspace [\\b] 退格直接量\n word-boundary \\b 单词边界\n non-word-boundary \\B 非单词边界\n digit \\d ASCII 数字,[0-9]\n non-digit \\D 非 ASCII 数字,[^0-9]\n form-feed \\f 换页符\n line-feed \\n 换行符\n carriage-return \\r 回车符\n white-space \\s 空白符\n non-white-space \\S 非空白符\n tab \\t 制表符\n vertical-tab \\v 垂直制表符\n word \\w ASCII 字符,[a-zA-Z0-9]\n non-word \\W 非 ASCII 字符,[^a-zA-Z0-9]\n null-character \\o NUL 字符\n */\n\nvar Util = require('../util')\nvar Random = require('../random/')\n /*\n \n */\nvar Handler = {\n extend: Util.extend\n}\n\n// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart\n/*var ASCII_CONTROL_CODE_CHART = {\n '@': ['\\u0000'],\n A: ['\\u0001'],\n B: ['\\u0002'],\n C: ['\\u0003'],\n D: ['\\u0004'],\n E: ['\\u0005'],\n F: ['\\u0006'],\n G: ['\\u0007', '\\a'],\n H: ['\\u0008', '\\b'],\n I: ['\\u0009', '\\t'],\n J: ['\\u000A', '\\n'],\n K: ['\\u000B', '\\v'],\n L: ['\\u000C', '\\f'],\n M: ['\\u000D', '\\r'],\n N: ['\\u000E'],\n O: ['\\u000F'],\n P: ['\\u0010'],\n Q: ['\\u0011'],\n R: ['\\u0012'],\n S: ['\\u0013'],\n T: ['\\u0014'],\n U: ['\\u0015'],\n V: ['\\u0016'],\n W: ['\\u0017'],\n X: ['\\u0018'],\n Y: ['\\u0019'],\n Z: ['\\u001A'],\n '[': ['\\u001B', '\\e'],\n '\\\\': ['\\u001C'],\n ']': ['\\u001D'],\n '^': ['\\u001E'],\n '_': ['\\u001F']\n}*/\n\n// ASCII printable code chart\n// var LOWER = 'abcdefghijklmnopqrstuvwxyz'\n// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n// var NUMBER = '0123456789'\n// var SYMBOL = ' !\"#$%&\\'()*+,-./' + ':;<=>?@' + '[\\\\]^_`' + '{|}~'\nvar LOWER = ascii(97, 122)\nvar UPPER = ascii(65, 90)\nvar NUMBER = ascii(48, 57)\nvar OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96)\nvar PRINTABLE = ascii(32, 126)\nvar SPACE = ' \\f\\n\\r\\t\\v\\u00A0\\u2028\\u2029'\nvar CHARACTER_CLASSES = {\n '\\\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95)\n '\\\\W': OTHER.replace('_', ''),\n '\\\\s': SPACE,\n '\\\\S': function() {\n var result = PRINTABLE\n for (var i = 0; i < SPACE.length; i++) {\n result = result.replace(SPACE[i], '')\n }\n return result\n }(),\n '\\\\d': NUMBER,\n '\\\\D': LOWER + UPPER + OTHER\n}\n\nfunction ascii(from, to) {\n var result = ''\n for (var i = from; i <= to; i++) {\n result += String.fromCharCode(i)\n }\n return result\n}\n\n// var ast = RegExpParser.parse(regexp.source)\nHandler.gen = function(node, result, cache) {\n cache = cache || {\n guid: 1\n }\n return Handler[node.type] ? Handler[node.type](node, result, cache) :\n Handler.token(node, result, cache)\n}\n\nHandler.extend({\n /* jshint unused:false */\n token: function(node, result, cache) {\n switch (node.type) {\n case 'start':\n case 'end':\n return ''\n case 'any-character':\n return Random.character()\n case 'backspace':\n return ''\n case 'word-boundary': // TODO\n return ''\n case 'non-word-boundary': // TODO\n break\n case 'digit':\n return Random.pick(\n NUMBER.split('')\n )\n case 'non-digit':\n return Random.pick(\n (LOWER + UPPER + OTHER).split('')\n )\n case 'form-feed':\n break\n case 'line-feed':\n return node.body || node.text\n case 'carriage-return':\n break\n case 'white-space':\n return Random.pick(\n SPACE.split('')\n )\n case 'non-white-space':\n return Random.pick(\n (LOWER + UPPER + NUMBER).split('')\n )\n case 'tab':\n break\n case 'vertical-tab':\n break\n case 'word': // \\w [a-zA-Z0-9]\n return Random.pick(\n (LOWER + UPPER + NUMBER).split('')\n )\n case 'non-word': // \\W [^a-zA-Z0-9]\n return Random.pick(\n OTHER.replace('_', '').split('')\n )\n case 'null-character':\n break\n }\n return node.body || node.text\n },\n /*\n {\n type: 'alternate',\n offset: 0,\n text: '',\n left: {\n boyd: []\n },\n right: {\n boyd: []\n }\n }\n */\n alternate: function(node, result, cache) {\n // node.left/right {}\n return this.gen(\n Random.boolean() ? node.left : node.right,\n result,\n cache\n )\n },\n /*\n {\n type: 'match',\n offset: 0,\n text: '',\n body: []\n }\n */\n match: function(node, result, cache) {\n result = ''\n // node.body []\n for (var i = 0; i < node.body.length; i++) {\n result += this.gen(node.body[i], result, cache)\n }\n return result\n },\n // ()\n 'capture-group': function(node, result, cache) {\n // node.body {}\n result = this.gen(node.body, result, cache)\n cache[cache.guid++] = result\n return result\n },\n // (?:...)\n 'non-capture-group': function(node, result, cache) {\n // node.body {}\n return this.gen(node.body, result, cache)\n },\n // (?=p)\n 'positive-lookahead': function(node, result, cache) {\n // node.body\n return this.gen(node.body, result, cache)\n },\n // (?!p)\n 'negative-lookahead': function(node, result, cache) {\n // node.body\n return ''\n },\n /*\n {\n type: 'quantified',\n offset: 3,\n text: 'c*',\n body: {\n type: 'literal',\n offset: 3,\n text: 'c',\n body: 'c',\n escaped: false\n },\n quantifier: {\n type: 'quantifier',\n offset: 4,\n text: '*',\n min: 0,\n max: Infinity,\n greedy: true\n }\n }\n */\n quantified: function(node, result, cache) {\n result = ''\n // node.quantifier {}\n var count = this.quantifier(node.quantifier);\n // node.body {}\n for (var i = 0; i < count; i++) {\n result += this.gen(node.body, result, cache)\n }\n return result\n },\n /*\n quantifier: {\n type: 'quantifier',\n offset: 4,\n text: '*',\n min: 0,\n max: Infinity,\n greedy: true\n }\n */\n quantifier: function(node, result, cache) {\n var min = Math.max(node.min, 0)\n var max = isFinite(node.max) ? node.max :\n min + Random.integer(3, 7)\n return Random.integer(min, max)\n },\n /*\n \n */\n charset: function(node, result, cache) {\n // node.invert\n if (node.invert) return this['invert-charset'](node, result, cache)\n\n // node.body []\n var literal = Random.pick(node.body)\n return this.gen(literal, result, cache)\n },\n 'invert-charset': function(node, result, cache) {\n var pool = PRINTABLE\n for (var i = 0, item; i < node.body.length; i++) {\n item = node.body[i]\n switch (item.type) {\n case 'literal':\n pool = pool.replace(item.body, '')\n break\n case 'range':\n var min = this.gen(item.start, result, cache).charCodeAt()\n var max = this.gen(item.end, result, cache).charCodeAt()\n for (var ii = min; ii <= max; ii++) {\n pool = pool.replace(String.fromCharCode(ii), '')\n }\n /* falls through */\n default:\n var characters = CHARACTER_CLASSES[item.text]\n if (characters) {\n for (var iii = 0; iii <= characters.length; iii++) {\n pool = pool.replace(characters[iii], '')\n }\n }\n }\n }\n return Random.pick(pool.split(''))\n },\n range: function(node, result, cache) {\n // node.start, node.end\n var min = this.gen(node.start, result, cache).charCodeAt()\n var max = this.gen(node.end, result, cache).charCodeAt()\n return String.fromCharCode(\n Random.integer(min, max)\n )\n },\n literal: function(node, result, cache) {\n return node.escaped ? node.body : node.text\n },\n // Unicode \\u\n unicode: function(node, result, cache) {\n return String.fromCharCode(\n parseInt(node.code, 16)\n )\n },\n // 十六进制 \\xFF\n hex: function(node, result, cache) {\n return String.fromCharCode(\n parseInt(node.code, 16)\n )\n },\n // 八进制 \\0\n octal: function(node, result, cache) {\n return String.fromCharCode(\n parseInt(node.code, 8)\n )\n },\n // 反向引用\n 'back-reference': function(node, result, cache) {\n return cache[node.code] || ''\n },\n /*\n http://en.wikipedia.org/wiki/C0_and_C1_control_codes\n */\n CONTROL_CHARACTER_MAP: function() {\n var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\\\ ] ^ _'.split(' ')\n var CONTROL_CHARACTER_UNICODE = '\\u0000 \\u0001 \\u0002 \\u0003 \\u0004 \\u0005 \\u0006 \\u0007 \\u0008 \\u0009 \\u000A \\u000B \\u000C \\u000D \\u000E \\u000F \\u0010 \\u0011 \\u0012 \\u0013 \\u0014 \\u0015 \\u0016 \\u0017 \\u0018 \\u0019 \\u001A \\u001B \\u001C \\u001D \\u001E \\u001F'.split(' ')\n var map = {}\n for (var i = 0; i < CONTROL_CHARACTER.length; i++) {\n map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]\n }\n return map\n }(),\n 'control-character': function(node, result, cache) {\n return this.CONTROL_CHARACTER_MAP[node.code]\n }\n})\n\nmodule.exports = Handler\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/regexp/handler.js\n// module id = 22\n// module chunks = 0","module.exports = require('./schema')\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/schema/index.js\n// module id = 23\n// module chunks = 0","/*\n ## toJSONSchema\n\n 把 Mock.js 风格的数据模板转换成 JSON Schema。\n\n > [JSON Schema](http://json-schema.org/)\n */\nvar Constant = require('../constant')\nvar Util = require('../util')\nvar Parser = require('../parser')\n\nfunction toJSONSchema(template, name, path /* Internal Use Only */ ) {\n // type rule properties items\n path = path || []\n var result = {\n name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name,\n template: template,\n type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] }\n rule: Parser.parse(name)\n }\n result.path = path.slice(0)\n result.path.push(name === undefined ? 'ROOT' : result.name)\n\n switch (result.type) {\n case 'array':\n result.items = []\n Util.each(template, function(value, index) {\n result.items.push(\n toJSONSchema(value, index, result.path)\n )\n })\n break\n case 'object':\n result.properties = []\n Util.each(template, function(value, name) {\n result.properties.push(\n toJSONSchema(value, name, result.path)\n )\n })\n break\n }\n\n return result\n\n}\n\nmodule.exports = toJSONSchema\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/schema/schema.js\n// module id = 24\n// module chunks = 0","module.exports = require('./valid')\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/valid/index.js\n// module id = 25\n// module chunks = 0","/*\n ## valid(template, data)\n\n 校验真实数据 data 是否与数据模板 template 匹配。\n \n 实现思路:\n 1. 解析规则。\n 先把数据模板 template 解析为更方便机器解析的 JSON-Schame\n name 属性名 \n type 属性值类型\n template 属性值模板\n properties 对象属性数组\n items 数组元素数组\n rule 属性值生成规则\n 2. 递归验证规则。\n 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。\n\n 提示信息 \n https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties\n [JSON-Schama validator](http://json-schema-validator.herokuapp.com/)\n [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/)\n*/\nvar Constant = require('../constant')\nvar Util = require('../util')\nvar toJSONSchema = require('../schema')\n\nfunction valid(template, data) {\n var schema = toJSONSchema(template)\n var result = Diff.diff(schema, data)\n for (var i = 0; i < result.length; i++) {\n // console.log(template, data)\n // console.warn(Assert.message(result[i]))\n }\n return result\n}\n\n/*\n ## name\n 有生成规则:比较解析后的 name\n 无生成规则:直接比较\n ## type\n 无类型转换:直接比较\n 有类型转换:先试着解析 template,然后再检查?\n ## value vs. template\n 基本类型\n 无生成规则:直接比较\n 有生成规则:\n number\n min-max.dmin-dmax\n min-max.dcount\n count.dmin-dmax\n count.dcount\n +step\n 整数部分\n 小数部分\n boolean \n string \n min-max\n count\n ## properties\n 对象\n 有生成规则:检测期望的属性个数,继续递归\n 无生成规则:检测全部的属性个数,继续递归\n ## items\n 数组\n 有生成规则:\n `'name|1': [{}, {} ...]` 其中之一,继续递归\n `'name|+1': [{}, {} ...]` 顺序检测,继续递归\n `'name|min-max': [{}, {} ...]` 检测个数,继续递归\n `'name|count': [{}, {} ...]` 检测个数,继续递归\n 无生成规则:检测全部的元素个数,继续递归\n*/\nvar Diff = {\n diff: function diff(schema, data, name /* Internal Use Only */ ) {\n var result = []\n\n // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测\n if (\n this.name(schema, data, name, result) &&\n this.type(schema, data, name, result)\n ) {\n this.value(schema, data, name, result)\n this.properties(schema, data, name, result)\n this.items(schema, data, name, result)\n }\n\n return result\n },\n /* jshint unused:false */\n name: function(schema, data, name, result) {\n var length = result.length\n\n Assert.equal('name', schema.path, name + '', schema.name + '', result)\n\n return result.length === length\n },\n type: function(schema, data, name, result) {\n var length = result.length\n\n switch (schema.type) {\n case 'string':\n // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值\n if (schema.template.match(Constant.RE_PLACEHOLDER)) return true\n break\n case 'array':\n if (schema.rule.parameters) {\n // name|count: array\n if (schema.rule.min !== undefined && schema.rule.max === undefined) {\n // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致\n if (schema.rule.count === 1) return true\n }\n // 跳过 name|+inc: array\n if (schema.rule.parameters[2]) return true\n }\n break\n case 'function':\n // 跳过 `'name': function`,因为函数可以返回任何类型的值。\n return true\n }\n\n Assert.equal('type', schema.path, Util.type(data), schema.type, result)\n\n return result.length === length\n },\n value: function(schema, data, name, result) {\n var length = result.length\n\n var rule = schema.rule\n var templateType = schema.type\n if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true\n\n // 无生成规则\n if (!rule.parameters) {\n switch (templateType) {\n case 'regexp':\n Assert.match('value', schema.path, data, schema.template, result)\n return result.length === length\n case 'string':\n // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致\n if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length\n break\n }\n Assert.equal('value', schema.path, data, schema.template, result)\n return result.length === length\n }\n\n // 有生成规则\n var actualRepeatCount\n switch (templateType) {\n case 'number':\n var parts = (data + '').split('.')\n parts[0] = +parts[0]\n\n // 整数部分\n // |min-max\n if (rule.min !== undefined && rule.max !== undefined) {\n Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result)\n // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})')\n Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result)\n }\n // |count\n if (rule.min !== undefined && rule.max === undefined) {\n Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name)\n }\n\n // 小数部分\n if (rule.decimal) {\n // |dmin-dmax\n if (rule.dmin !== undefined && rule.dmax !== undefined) {\n Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result)\n Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result)\n }\n // |dcount\n if (rule.dmin !== undefined && rule.dmax === undefined) {\n Assert.equal('value', schema.path, parts[1].length, rule.dmin, result)\n }\n }\n\n break\n\n case 'boolean':\n break\n\n case 'string':\n // 'aaa'.match(/a/g)\n actualRepeatCount = data.match(new RegExp(schema.template, 'g'))\n actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\n // |min-max\n if (rule.min !== undefined && rule.max !== undefined) {\n Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n }\n // |count\n if (rule.min !== undefined && rule.max === undefined) {\n Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n }\n\n break\n\n case 'regexp':\n actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\\^|\\$$/g, ''), 'g'))\n actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0\n\n // |min-max\n if (rule.min !== undefined && rule.max !== undefined) {\n Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result)\n Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result)\n }\n // |count\n if (rule.min !== undefined && rule.max === undefined) {\n Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result)\n }\n break\n }\n\n return result.length === length\n },\n properties: function(schema, data, name, result) {\n var length = result.length\n\n var rule = schema.rule\n var keys = Util.keys(data)\n if (!schema.properties) return\n\n // 无生成规则\n if (!schema.rule.parameters) {\n Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result)\n } else {\n // 有生成规则\n // |min-max\n if (rule.min !== undefined && rule.max !== undefined) {\n Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result)\n Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result)\n }\n // |count\n if (rule.min !== undefined && rule.max === undefined) {\n // |1, |>1\n if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result)\n }\n }\n\n if (result.length !== length) return false\n\n for (var i = 0; i < keys.length; i++) {\n result.push.apply(\n result,\n this.diff(\n function() {\n var property\n Util.each(schema.properties, function(item /*, index*/ ) {\n if (item.name === keys[i]) property = item\n })\n return property || schema.properties[i]\n }(),\n data[keys[i]],\n keys[i]\n )\n )\n }\n\n return result.length === length\n },\n items: function(schema, data, name, result) {\n var length = result.length\n\n if (!schema.items) return\n\n var rule = schema.rule\n\n // 无生成规则\n if (!schema.rule.parameters) {\n Assert.equal('items length', schema.path, data.length, schema.items.length, result)\n } else {\n // 有生成规则\n // |min-max\n if (rule.min !== undefined && rule.max !== undefined) {\n Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result,\n '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements')\n Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result,\n '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements')\n }\n // |count\n if (rule.min !== undefined && rule.max === undefined) {\n // |1, |>1\n if (rule.count === 1) return result.length === length\n else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result)\n }\n // |+inc\n if (rule.parameters[2]) return result.length === length\n }\n\n if (result.length !== length) return false\n\n for (var i = 0; i < data.length; i++) {\n result.push.apply(\n result,\n this.diff(\n schema.items[i % schema.items.length],\n data[i],\n i % schema.items.length\n )\n )\n }\n\n return result.length === length\n }\n}\n\n/*\n 完善、友好的提示信息\n \n Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to\n 路径 验证类型 描述 \n\n Expect path.name is less than or equal to expected, but path.name is actual.\n\n Expect path.name is less than or equal to expected, but path.name is actual.\n Expect path.name is greater than or equal to expected, but path.name is actual.\n\n*/\nvar Assert = {\n message: function(item) {\n return (item.message ||\n '[{utype}] Expect {path}\\'{ltype} {action} {expected}, but is {actual}')\n .replace('{utype}', item.type.toUpperCase())\n .replace('{ltype}', item.type.toLowerCase())\n .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path)\n .replace('{action}', item.action)\n .replace('{expected}', item.expected)\n .replace('{actual}', item.actual)\n },\n equal: function(type, path, actual, expected, result, message) {\n if (actual === expected) return true\n switch (type) {\n case 'type':\n // 正则模板 === 字符串最终值\n if (expected === 'regexp' && actual === 'string') return true\n break\n }\n\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'is equal to',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n },\n // actual matches expected\n match: function(type, path, actual, expected, result, message) {\n if (expected.test(actual)) return true\n\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'matches',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n },\n notEqual: function(type, path, actual, expected, result, message) {\n if (actual !== expected) return true\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'is not equal to',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n },\n greaterThan: function(type, path, actual, expected, result, message) {\n if (actual > expected) return true\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'is greater than',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n },\n lessThan: function(type, path, actual, expected, result, message) {\n if (actual < expected) return true\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'is less to',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n },\n greaterThanOrEqualTo: function(type, path, actual, expected, result, message) {\n if (actual >= expected) return true\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'is greater than or equal to',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n },\n lessThanOrEqualTo: function(type, path, actual, expected, result, message) {\n if (actual <= expected) return true\n var item = {\n path: path,\n type: type,\n actual: actual,\n expected: expected,\n action: 'is less than or equal to',\n message: message\n }\n item.message = Assert.message(item)\n result.push(item)\n return false\n }\n}\n\nvalid.Diff = Diff\nvalid.Assert = Assert\n\nmodule.exports = valid\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/valid/valid.js\n// module id = 26\n// module chunks = 0","module.exports = require('./xhr')\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/xhr/index.js\n// module id = 27\n// module chunks = 0","/* global window, document, location, Event, setTimeout */\n/*\n ## MockXMLHttpRequest\n\n 期望的功能:\n 1. 完整地覆盖原生 XHR 的行为\n 2. 完整地模拟原生 XHR 的行为\n 3. 在发起请求时,自动检测是否需要拦截\n 4. 如果不必拦截,则执行原生 XHR 的行为\n 5. 如果需要拦截,则执行虚拟 XHR 的行为\n 6. 兼容 XMLHttpRequest 和 ActiveXObject\n new window.XMLHttpRequest()\n new window.ActiveXObject(\"Microsoft.XMLHTTP\")\n\n 关键方法的逻辑:\n * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。\n * open 此时可以取到 URL,可以决定是否进行拦截。\n * send 此时已经确定了请求方式。\n\n 规范:\n http://xhr.spec.whatwg.org/\n http://www.w3.org/TR/XMLHttpRequest2/\n\n 参考实现:\n https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js\n https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js\n https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js\n https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js\n https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js\n\n **需不需要全面重写 XMLHttpRequest?**\n http://xhr.spec.whatwg.org/#interface-xmlhttprequest\n 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。\n 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。\n\n // Event handlers\n onloadstart loadstart\n onprogress progress\n onabort abort\n onerror error\n onload load\n ontimeout timeout\n onloadend loadend\n onreadystatechange readystatechange\n */\n\nvar Util = require('../util')\n\n// 备份原生 XMLHttpRequest\nwindow._XMLHttpRequest = window.XMLHttpRequest\nwindow._ActiveXObject = window.ActiveXObject\n\n/*\n PhantomJS\n TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event(\"readystatechange\")')\n\n https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18\n https://github.com/ariya/phantomjs/issues/11289\n*/\ntry {\n new window.Event('custom')\n} catch (exception) {\n window.Event = function(type, bubbles, cancelable, detail) {\n var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent'\n event.initCustomEvent(type, bubbles, cancelable, detail)\n return event\n }\n}\n\nvar XHR_STATES = {\n // The object has been constructed.\n UNSENT: 0,\n // The open() method has been successfully invoked.\n OPENED: 1,\n // All redirects (if any) have been followed and all HTTP headers of the response have been received.\n HEADERS_RECEIVED: 2,\n // The response's body is being received.\n LOADING: 3,\n // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects).\n DONE: 4\n}\n\nvar XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ')\nvar XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ')\nvar XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ')\n\n// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32\nvar HTTP_STATUS_CODES = {\n 100: \"Continue\",\n 101: \"Switching Protocols\",\n 200: \"OK\",\n 201: \"Created\",\n 202: \"Accepted\",\n 203: \"Non-Authoritative Information\",\n 204: \"No Content\",\n 205: \"Reset Content\",\n 206: \"Partial Content\",\n 300: \"Multiple Choice\",\n 301: \"Moved Permanently\",\n 302: \"Found\",\n 303: \"See Other\",\n 304: \"Not Modified\",\n 305: \"Use Proxy\",\n 307: \"Temporary Redirect\",\n 400: \"Bad Request\",\n 401: \"Unauthorized\",\n 402: \"Payment Required\",\n 403: \"Forbidden\",\n 404: \"Not Found\",\n 405: \"Method Not Allowed\",\n 406: \"Not Acceptable\",\n 407: \"Proxy Authentication Required\",\n 408: \"Request Timeout\",\n 409: \"Conflict\",\n 410: \"Gone\",\n 411: \"Length Required\",\n 412: \"Precondition Failed\",\n 413: \"Request Entity Too Large\",\n 414: \"Request-URI Too Long\",\n 415: \"Unsupported Media Type\",\n 416: \"Requested Range Not Satisfiable\",\n 417: \"Expectation Failed\",\n 422: \"Unprocessable Entity\",\n 500: \"Internal Server Error\",\n 501: \"Not Implemented\",\n 502: \"Bad Gateway\",\n 503: \"Service Unavailable\",\n 504: \"Gateway Timeout\",\n 505: \"HTTP Version Not Supported\"\n}\n\n/*\n MockXMLHttpRequest\n*/\n\nfunction MockXMLHttpRequest() {\n // 初始化 custom 对象,用于存储自定义属性\n this.custom = {\n events: {},\n requestHeaders: {},\n responseHeaders: {}\n }\n}\n\nMockXMLHttpRequest._settings = {\n timeout: '10-100',\n /*\n timeout: 50,\n timeout: '10-100',\n */\n}\n\nMockXMLHttpRequest.setup = function(settings) {\n Util.extend(MockXMLHttpRequest._settings, settings)\n return MockXMLHttpRequest._settings\n}\n\nUtil.extend(MockXMLHttpRequest, XHR_STATES)\nUtil.extend(MockXMLHttpRequest.prototype, XHR_STATES)\n\n// 标记当前对象为 MockXMLHttpRequest\nMockXMLHttpRequest.prototype.mock = true\n\n// 是否拦截 Ajax 请求\nMockXMLHttpRequest.prototype.match = false\n\n// 初始化 Request 相关的属性和方法\nUtil.extend(MockXMLHttpRequest.prototype, {\n // https://xhr.spec.whatwg.org/#the-open()-method\n // Sets the request method, request URL, and synchronous flag.\n open: function(method, url, async, username, password) {\n var that = this\n\n Util.extend(this.custom, {\n method: method,\n url: url,\n async: typeof async === 'boolean' ? async : true,\n username: username,\n password: password,\n options: {\n url: url,\n type: method\n }\n })\n\n this.custom.timeout = function(timeout) {\n if (typeof timeout === 'number') return timeout\n if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10)\n if (typeof timeout === 'string' && ~timeout.indexOf('-')) {\n var tmp = timeout.split('-')\n var min = parseInt(tmp[0], 10)\n var max = parseInt(tmp[1], 10)\n return Math.round(Math.random() * (max - min)) + min\n }\n }(MockXMLHttpRequest._settings.timeout)\n\n // 查找与请求参数匹配的数据模板\n var item = find(this.custom.options)\n\n function handle(event) {\n // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest\n for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) {\n try {\n that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]\n } catch (e) {}\n }\n // 触发 MockXMLHttpRequest 上的同名事件\n that.dispatchEvent(new Event(event.type /*, false, false, that*/ ))\n }\n\n // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。\n if (!item) {\n // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件\n var xhr = createNativeXMLHttpRequest()\n this.custom.xhr = xhr\n\n // 初始化所有事件,用于监听原生 XHR 对象的事件\n for (var i = 0; i < XHR_EVENTS.length; i++) {\n xhr.addEventListener(XHR_EVENTS[i], handle)\n }\n\n // xhr.open()\n if (username) xhr.open(method, url, async, username, password)\n else xhr.open(method, url, async)\n\n // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest\n for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) {\n try {\n xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]\n } catch (e) {}\n }\n\n return\n }\n\n // 找到了匹配的数据模板,开始拦截 XHR 请求\n this.match = true\n this.custom.template = item\n this.readyState = MockXMLHttpRequest.OPENED\n this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ ))\n },\n // https://xhr.spec.whatwg.org/#the-setrequestheader()-method\n // Combines a header in author request headers.\n setRequestHeader: function(name, value) {\n // 原生 XHR\n if (!this.match) {\n this.custom.xhr.setRequestHeader(name, value)\n return\n }\n\n // 拦截 XHR\n var requestHeaders = this.custom.requestHeaders\n if (requestHeaders[name]) requestHeaders[name] += ',' + value\n else requestHeaders[name] = value\n },\n timeout: 0,\n withCredentials: false,\n upload: {},\n // https://xhr.spec.whatwg.org/#the-send()-method\n // Initiates the request.\n send: function send(data) {\n var that = this\n this.custom.options.body = data\n\n // 原生 XHR\n if (!this.match) {\n this.custom.xhr.send(data)\n return\n }\n\n // 拦截 XHR\n\n // X-Requested-With header\n this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest')\n\n // loadstart The fetch initiates.\n this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ ))\n\n if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步\n else done() // 同步\n\n function done() {\n that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED\n that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n that.readyState = MockXMLHttpRequest.LOADING\n that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n\n that.status = 200\n that.statusText = HTTP_STATUS_CODES[200]\n\n // fix #92 #93 by @qddegtya\n that.response = that.responseText = JSON.stringify(\n convert(that.custom.template, that.custom.options),\n null, 4\n )\n\n that.readyState = MockXMLHttpRequest.DONE\n that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ ))\n that.dispatchEvent(new Event('load' /*, false, false, that*/ ));\n that.dispatchEvent(new Event('loadend' /*, false, false, that*/ ));\n }\n },\n // https://xhr.spec.whatwg.org/#the-abort()-method\n // Cancels any network activity.\n abort: function abort() {\n // 原生 XHR\n if (!this.match) {\n this.custom.xhr.abort()\n return\n }\n\n // 拦截 XHR\n this.readyState = MockXMLHttpRequest.UNSENT\n this.dispatchEvent(new Event('abort', false, false, this))\n this.dispatchEvent(new Event('error', false, false, this))\n }\n})\n\n// 初始化 Response 相关的属性和方法\nUtil.extend(MockXMLHttpRequest.prototype, {\n responseURL: '',\n status: MockXMLHttpRequest.UNSENT,\n statusText: '',\n // https://xhr.spec.whatwg.org/#the-getresponseheader()-method\n getResponseHeader: function(name) {\n // 原生 XHR\n if (!this.match) {\n return this.custom.xhr.getResponseHeader(name)\n }\n\n // 拦截 XHR\n return this.custom.responseHeaders[name.toLowerCase()]\n },\n // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method\n // http://www.utf8-chartable.de/\n getAllResponseHeaders: function() {\n // 原生 XHR\n if (!this.match) {\n return this.custom.xhr.getAllResponseHeaders()\n }\n\n // 拦截 XHR\n var responseHeaders = this.custom.responseHeaders\n var headers = ''\n for (var h in responseHeaders) {\n if (!responseHeaders.hasOwnProperty(h)) continue\n headers += h + ': ' + responseHeaders[h] + '\\r\\n'\n }\n return headers\n },\n overrideMimeType: function( /*mime*/ ) {},\n responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json'\n response: null,\n responseText: '',\n responseXML: null\n})\n\n// EventTarget\nUtil.extend(MockXMLHttpRequest.prototype, {\n addEventListener: function addEventListener(type, handle) {\n var events = this.custom.events\n if (!events[type]) events[type] = []\n events[type].push(handle)\n },\n removeEventListener: function removeEventListener(type, handle) {\n var handles = this.custom.events[type] || []\n for (var i = 0; i < handles.length; i++) {\n if (handles[i] === handle) {\n handles.splice(i--, 1)\n }\n }\n },\n dispatchEvent: function dispatchEvent(event) {\n var handles = this.custom.events[event.type] || []\n for (var i = 0; i < handles.length; i++) {\n handles[i].call(this, event)\n }\n\n var ontype = 'on' + event.type\n if (this[ontype]) this[ontype](event)\n }\n})\n\n// Inspired by jQuery\nfunction createNativeXMLHttpRequest() {\n var isLocal = function() {\n var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/\n var rurl = /^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/\n var ajaxLocation = location.href\n var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []\n return rlocalProtocol.test(ajaxLocParts[1])\n }()\n\n return window.ActiveXObject ?\n (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR()\n\n function createStandardXHR() {\n try {\n return new window._XMLHttpRequest();\n } catch (e) {}\n }\n\n function createActiveXHR() {\n try {\n return new window._ActiveXObject(\"Microsoft.XMLHTTP\");\n } catch (e) {}\n }\n}\n\n\n// 查找与请求参数匹配的数据模板:URL,Type\nfunction find(options) {\n\n for (var sUrlType in MockXMLHttpRequest.Mock._mocked) {\n var item = MockXMLHttpRequest.Mock._mocked[sUrlType]\n if (\n (!item.rurl || match(item.rurl, options.url)) &&\n (!item.rtype || match(item.rtype, options.type.toLowerCase()))\n ) {\n // console.log('[mock]', options.url, '>', item.rurl)\n return item\n }\n }\n\n function match(expected, actual) {\n if (Util.type(expected) === 'string') {\n return expected === actual\n }\n if (Util.type(expected) === 'regexp') {\n return expected.test(actual)\n }\n }\n\n}\n\n// 数据模板 => 响应数据\nfunction convert(item, options) {\n return Util.isFunction(item.template) ?\n item.template(options) : MockXMLHttpRequest.Mock.mock(item.template)\n}\n\nmodule.exports = MockXMLHttpRequest\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/mock/xhr/xhr.js\n// module id = 28\n// module chunks = 0"],"sourceRoot":""} \ No newline at end of file diff --git a/dist/mock.js b/dist/mock.js deleted file mode 100644 index 35d5b9af..00000000 --- a/dist/mock.js +++ /dev/null @@ -1,8543 +0,0 @@ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["Mock"] = factory(); - else - root["Mock"] = factory(); -})(this, function() { -return /******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - - /* global require, module, window */ - var Handler = __webpack_require__(1) - var Util = __webpack_require__(3) - var Random = __webpack_require__(5) - var RE = __webpack_require__(20) - var toJSONSchema = __webpack_require__(23) - var valid = __webpack_require__(25) - - var XHR - if (typeof window !== 'undefined') XHR = __webpack_require__(27) - - /*! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - */ - var Mock = { - Handler: Handler, - Random: Random, - Util: Util, - XHR: XHR, - RE: RE, - toJSONSchema: toJSONSchema, - valid: valid, - heredoc: Util.heredoc, - setup: function(settings) { - return XHR.setup(settings) - }, - _mocked: {} - } - - Mock.version = '1.0.1-beta3' - - // 避免循环依赖 - if (XHR) XHR.Mock = Mock - - /* - * Mock.mock( template ) - * Mock.mock( function() ) - * Mock.mock( rurl, template ) - * Mock.mock( rurl, function(options) ) - * Mock.mock( rurl, rtype, template ) - * Mock.mock( rurl, rtype, function(options) ) - - 根据数据模板生成模拟数据。 - */ - Mock.mock = function(rurl, rtype, template) { - // Mock.mock(template) - if (arguments.length === 1) { - return Handler.gen(rurl) - } - // Mock.mock(rurl, template) - if (arguments.length === 2) { - template = rtype - rtype = undefined - } - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR - Mock._mocked[rurl + (rtype || '')] = { - rurl: rurl, - rtype: rtype, - template: template - } - return Mock - } - - module.exports = Mock - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - - */ - - var Constant = __webpack_require__(2) - var Util = __webpack_require__(3) - var Parser = __webpack_require__(4) - var Random = __webpack_require__(5) - var RE = __webpack_require__(20) - - var Handler = { - extend: Util.extend - } - - /* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot - */ - Handler.gen = function(template, name, context) { - /* jshint -W041 */ - name = name == undefined ? '' : (name + '') - - context = context || {} - context = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [Constant.GUID], - templatePath: context.templatePath || [Constant.GUID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template - } - // console.log('path:', context.path.join('.'), template) - - var rule = Parser.parse(name) - var type = Util.type(template) - var data - - if (Handler[type]) { - data = Handler[type]({ - // 属性值类型 - type: type, - // 属性值模板 - template: template, - // 属性名 + 生成规则 - name: name, - // 属性名 - parsedName: name ? name.replace(Constant.RE_KEY, '$1') : name, - - // 解析后的生成规则 - rule: rule, - // 相关上下文 - context: context - }) - - if (!context.root) context.root = data - return data - } - - return template - } - - Handler.extend({ - array: function(options) { - var result = [], - i, ii; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (options.template.length === 0) return result - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!options.rule.parameters) { - for (i = 0; i < options.template.length; i++) { - options.context.path.push(i) - options.context.templatePath.push(i) - result.push( - Handler.gen(options.template[i], i, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - ) - options.context.path.pop() - options.context.templatePath.pop() - } - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (options.rule.min === 1 && options.rule.max === undefined) { - // fix #17 - options.context.path.push(options.name) - options.context.templatePath.push(options.name) - result = Random.pick( - Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - ) - options.context.path.pop() - options.context.templatePath.pop() - } else { - // 'data|+1': [{}, {}] - if (options.rule.parameters[2]) { - options.template.__order_index = options.template.__order_index || 0 - - options.context.path.push(options.name) - options.context.templatePath.push(options.name) - result = Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - })[ - options.template.__order_index % options.template.length - ] - - options.template.__order_index += +options.rule.parameters[2] - - options.context.path.pop() - options.context.templatePath.pop() - - } else { - // 'data|1-10': [{}] - for (i = 0; i < options.rule.count; i++) { - // 'data|1-10': [{}, {}] - for (ii = 0; ii < options.template.length; ii++) { - options.context.path.push(result.length) - options.context.templatePath.push(ii) - result.push( - Handler.gen(options.template[ii], result.length, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - ) - options.context.path.pop() - options.context.templatePath.pop() - } - } - } - } - } - return result - }, - object: function(options) { - var result = {}, - keys, fnKeys, key, parsedKey, inc, i; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (options.rule.min != undefined) { - keys = Util.keys(options.template) - keys = Random.shuffle(keys) - keys = keys.slice(0, options.rule.count) - for (i = 0; i < keys.length; i++) { - key = keys[i] - parsedKey = key.replace(Constant.RE_KEY, '$1') - options.context.path.push(parsedKey) - options.context.templatePath.push(key) - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - options.context.path.pop() - options.context.templatePath.pop() - } - - } else { - // 'obj': {} - keys = [] - fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便 - for (key in options.template) { - (typeof options.template[key] === 'function' ? fnKeys : keys).push(key) - } - keys = keys.concat(fnKeys) - - /* - 会改变非函数属性的顺序 - keys = Util.keys(options.template) - keys.sort(function(a, b) { - var afn = typeof options.template[a] === 'function' - var bfn = typeof options.template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - for (i = 0; i < keys.length; i++) { - key = keys[i] - parsedKey = key.replace(Constant.RE_KEY, '$1') - options.context.path.push(parsedKey) - options.context.templatePath.push(key) - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - options.context.path.pop() - options.context.templatePath.pop() - // 'id|+1': 1 - inc = key.match(Constant.RE_KEY) - if (inc && inc[2] && Util.type(options.template[key]) === 'number') { - options.template[key] += parseInt(inc[2], 10) - } - } - } - return result - }, - number: function(options) { - var result, parts; - if (options.rule.decimal) { // float - options.template += '' - parts = options.template.split('.') - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parts[0] = options.rule.range ? options.rule.count : parts[0] - parts[1] = (parts[1] || '').slice(0, options.rule.dcount) - while (parts[1].length < options.rule.dcount) { - parts[1] += ( - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789') - ) - } - result = parseFloat(parts.join('.'), 10) - } else { // integer - // 'grade1|1-100': 1, - result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template - } - return result - }, - boolean: function(options) { - var result; - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template - return result - }, - string: function(options) { - var result = '', - i, placeholders, ph, phed; - if (options.template.length) { - - // 'foo': '★', - /* jshint -W041 */ - if (options.rule.count == undefined) { - result += options.template - } - - // 'star|1-5': '★', - for (i = 0; i < options.rule.count; i++) { - result += options.template - } - // 'email|1-10': '@EMAIL, ', - placeholders = result.match(Constant.RE_PLACEHOLDER) || [] // A-Z_0-9 > \w_ - for (i = 0; i < placeholders.length; i++) { - ph = placeholders[i] - - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(i--, 1) - continue - } - - phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options) - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // - result = phed - break - - if (Util.isNumeric(phed)) { - result = parseFloat(phed, 10) - break - } - if (/^(true|false)$/.test(phed)) { - result = phed === 'true' ? true : - phed === 'false' ? false : - phed // 已经是布尔值 - break - } - } - result = result.replace(ph, phed) - } - - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = options.rule.range ? Random.string(options.rule.count) : options.template - } - return result - }, - 'function': function(options) { - // ( context, options ) - return options.template.call(options.context.currentContext, options) - }, - 'regexp': function(options) { - var source = '' - - // 'name': /regexp/, - /* jshint -W041 */ - if (options.rule.count == undefined) { - source += options.template.source // regexp.source - } - - // 'name|1-5': /regexp/, - for (var i = 0; i < options.rule.count; i++) { - source += options.template.source - } - - return RE.Handler.gen( - RE.Parser.parse( - source - ) - ) - } - }) - - Handler.extend({ - _all: function() { - var re = {}; - for (var key in Random) re[key.toLowerCase()] = key - return re - }, - // 处理占位符,转换为最终值 - placeholder: function(placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec('') - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = this._all()[lkey], - params = parts && parts[2] || '' - var pathParts = this.splitPathToArray(key) - - // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')') - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/) - } - - // 占位符优先引用数据模板中的属性 - if (obj && (key in obj)) return obj[key] - - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - - // 绝对路径 or 相对路径 - if ( - key.charAt(0) === '/' || - pathParts.length > 1 - ) return this.getValueByKeyPath(key, options) - - // 递归引用数据模板中的属性 - if (templateContext && - (typeof templateContext === 'object') && - (key in templateContext) && - (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = Handler.gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext - }) - return templateContext[key] - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec('') - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = Handler.placeholder(params[i], obj, templateContext, options) - } - } - - var handle = Random[key] || Random[lkey] || Random[okey] - switch (Util.type(handle)) { - case 'array': - // 自动从数组中取一个,例如 @areas - return Random.pick(handle) - case 'function': - // 执行占位符方法(大多数情况) - handle.options = options - var re = handle.apply(Random, params) - if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。 - delete handle.options - return re - } - }, - getValueByKeyPath: function(key, options) { - var originalKey = key - var keyPathParts = this.splitPathToArray(key) - var absolutePathParts = [] - - // 绝对路径 - if (key.charAt(0) === '/') { - absolutePathParts = [options.context.path[0]].concat( - this.normalizePath(keyPathParts) - ) - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0) - absolutePathParts.pop() - absolutePathParts = this.normalizePath( - absolutePathParts.concat(keyPathParts) - ) - - } - } - - try { - key = keyPathParts[keyPathParts.length - 1] - var currentContext = options.context.root - var templateCurrentContext = options.context.templateRoot - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]] - templateCurrentContext = templateCurrentContext[absolutePathParts[i]] - } - // 引用的值已经计算好 - if (currentContext && (key in currentContext)) return currentContext[key] - - // 尚未计算,递归引用数据模板中的属性 - if (templateCurrentContext && - (typeof templateCurrentContext === 'object') && - (key in templateCurrentContext) && - (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext - }) - return templateCurrentContext[key] - } - } catch(err) { } - - return '@' + keyPathParts.join('/') - }, - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function(pathParts) { - var newPathParts = [] - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case '..': - newPathParts.pop() - break - case '.': - break - default: - newPathParts.push(pathParts[i]) - } - } - return newPathParts - }, - splitPathToArray: function(path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1) - if (!parts[0]) parts = parts.slice(1) - return parts; - } - }) - - module.exports = Handler - -/***/ }), -/* 2 */ -/***/ (function(module, exports) { - - /* - ## Constant - - 常量集合。 - */ - /* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 - */ - module.exports = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ - } - -/***/ }), -/* 3 */ -/***/ (function(module, exports) { - - /* - ## Utilities - */ - var Util = {} - - Util.extend = function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, name, src, copy, clone - - if (length === 1) { - target = this - i = 0 - } - - for (; i < length; i++) { - options = arguments[i] - if (!options) continue - - for (name in options) { - src = target[name] - copy = options[name] - - if (target === copy) continue - if (copy === undefined) continue - - if (Util.isArray(copy) || Util.isObject(copy)) { - if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : [] - if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {} - - target[name] = Util.extend(clone, copy) - } else { - target[name] = copy - } - } - } - - return target - } - - Util.each = function each(obj, iterator, context) { - var i, key - if (this.type(obj) === 'number') { - for (i = 0; i < obj; i++) { - iterator(i, i) - } - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break - } - } - } - - Util.type = function type(obj) { - return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase() - } - - Util.each('String Object Array RegExp Function'.split(' '), function(value) { - Util['is' + value] = function(obj) { - return Util.type(obj) === value.toLowerCase() - } - }) - - Util.isObjectOrArray = function(value) { - return Util.isObject(value) || Util.isArray(value) - } - - Util.isNumeric = function(value) { - return !isNaN(parseFloat(value)) && isFinite(value) - } - - Util.keys = function(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) keys.push(key) - } - return keys; - } - Util.values = function(obj) { - var values = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) values.push(obj[key]) - } - return values; - } - - /* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 - */ - Util.heredoc = function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn.toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim() - } - - Util.noop = function() {} - - module.exports = Util - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - - var Constant = __webpack_require__(2) - var Random = __webpack_require__(5) - - /* jshint -W041 */ - module.exports = { - parse: function(name) { - name = name == undefined ? '' : (name + '') - - var parameters = (name || '').match(Constant.RE_KEY) - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE) - var min = range && range[1] && parseInt(range[1], 10) // || 1 - var max = range && range[2] && parseInt(range[2], 10) // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 - var count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE) - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters: parameters, - // 1 min, 2 max - range: range, - min: min, - max: max, - // min-max - count: count, - // 是否有 decimal - decimal: decimal, - dmin: dmin, - dmax: dmax, - // dmin-dimax - dcount: dcount - } - - for (var r in result) { - if (result[r] != undefined) return result - } - - return {} - } - } - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Mock.Random - - 工具类,用于生成各种随机数据。 - */ - - var Util = __webpack_require__(3) - - var Random = { - extend: Util.extend - } - - Random.extend(__webpack_require__(6)) - Random.extend(__webpack_require__(7)) - Random.extend(__webpack_require__(8)) - Random.extend(__webpack_require__(10)) - Random.extend(__webpack_require__(13)) - Random.extend(__webpack_require__(15)) - Random.extend(__webpack_require__(16)) - Random.extend(__webpack_require__(17)) - Random.extend(__webpack_require__(14)) - Random.extend(__webpack_require__(19)) - - module.exports = Random - -/***/ }), -/* 6 */ -/***/ (function(module, exports) { - - /* - ## Basics - */ - module.exports = { - // 返回一个随机的布尔值。 - boolean: function(min, max, cur) { - if (cur !== undefined) { - min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1 - max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1 - return Math.random() > 1.0 / (min + max) * min ? !cur : cur - } - - return Math.random() >= 0.5 - }, - bool: function(min, max, cur) { - return this.boolean(min, max, cur) - }, - // 返回一个随机的自然数(大于等于 0 的整数)。 - natural: function(min, max) { - min = typeof min !== 'undefined' ? parseInt(min, 10) : 0 - max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53 - return Math.round(Math.random() * (max - min)) + min - }, - // 返回一个随机的整数。 - integer: function(min, max) { - min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992 - max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53 - return Math.round(Math.random() * (max - min)) + min - }, - int: function(min, max) { - return this.integer(min, max) - }, - // 返回一个随机的浮点数。 - float: function(min, max, dmin, dmax) { - dmin = dmin === undefined ? 0 : dmin - dmin = Math.max(Math.min(dmin, 17), 0) - dmax = dmax === undefined ? 17 : dmax - dmax = Math.max(Math.min(dmax, 17), 0) - var ret = this.integer(min, max) + '.'; - for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) { - ret += ( - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - (i < dcount - 1) ? this.character('number') : this.character('123456789') - ) - } - return parseFloat(ret, 10) - }, - // 返回一个随机字符。 - character: function(pool) { - var pools = { - lower: 'abcdefghijklmnopqrstuvwxyz', - upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - number: '0123456789', - symbol: '!@#$%^&*()[]' - } - pools.alpha = pools.lower + pools.upper - pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol - - pool = pools[('' + pool).toLowerCase()] || pool - return pool.charAt(this.natural(0, pool.length - 1)) - }, - char: function(pool) { - return this.character(pool) - }, - // 返回一个随机字符串。 - string: function(pool, min, max) { - var len - switch (arguments.length) { - case 0: // () - len = this.natural(3, 7) - break - case 1: // ( length ) - len = pool - pool = undefined - break - case 2: - // ( pool, length ) - if (typeof arguments[0] === 'string') { - len = min - } else { - // ( min, max ) - len = this.natural(pool, min) - pool = undefined - } - break - case 3: - len = this.natural(min, max) - break - } - - var text = '' - for (var i = 0; i < len; i++) { - text += this.character(pool) - } - - return text - }, - str: function( /*pool, min, max*/ ) { - return this.string.apply(this, arguments) - }, - // 返回一个整型数组。 - range: function(start, stop, step) { - // range( stop ) - if (arguments.length <= 1) { - stop = start || 0; - start = 0; - } - // range( start, stop ) - step = arguments[2] || 1; - - start = +start - stop = +stop - step = +step - - var len = Math.max(Math.ceil((stop - start) / step), 0); - var idx = 0; - var range = new Array(len); - - while (idx < len) { - range[idx++] = start; - start += step; - } - - return range; - } - } - -/***/ }), -/* 7 */ -/***/ (function(module, exports) { - - /* - ## Date - */ - var patternLetters = { - yyyy: 'getFullYear', - yy: function(date) { - return ('' + date.getFullYear()).slice(2) - }, - y: 'yy', - - MM: function(date) { - var m = date.getMonth() + 1 - return m < 10 ? '0' + m : m - }, - M: function(date) { - return date.getMonth() + 1 - }, - - dd: function(date) { - var d = date.getDate() - return d < 10 ? '0' + d : d - }, - d: 'getDate', - - HH: function(date) { - var h = date.getHours() - return h < 10 ? '0' + h : h - }, - H: 'getHours', - hh: function(date) { - var h = date.getHours() % 12 - return h < 10 ? '0' + h : h - }, - h: function(date) { - return date.getHours() % 12 - }, - - mm: function(date) { - var m = date.getMinutes() - return m < 10 ? '0' + m : m - }, - m: 'getMinutes', - - ss: function(date) { - var s = date.getSeconds() - return s < 10 ? '0' + s : s - }, - s: 'getSeconds', - - SS: function(date) { - var ms = date.getMilliseconds() - return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms - }, - S: 'getMilliseconds', - - A: function(date) { - return date.getHours() < 12 ? 'AM' : 'PM' - }, - a: function(date) { - return date.getHours() < 12 ? 'am' : 'pm' - }, - T: 'getTime' - } - module.exports = { - // 日期占位符集合。 - _patternLetters: patternLetters, - // 日期占位符正则。 - _rformat: new RegExp((function() { - var re = [] - for (var i in patternLetters) re.push(i) - return '(' + re.join('|') + ')' - })(), 'g'), - // 格式化日期。 - _formatDate: function(date, format) { - return format.replace(this._rformat, function creatNewSubString($0, flag) { - return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) : - patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) : - date[patternLetters[flag]]() - }) - }, - // 生成一个随机的 Date 对象。 - _randomDate: function(min, max) { // min, max - min = min === undefined ? new Date(0) : min - max = max === undefined ? new Date() : max - return new Date(Math.random() * (max.getTime() - min.getTime())) - }, - // 返回一个随机的日期字符串。 - date: function(format) { - format = format || 'yyyy-MM-dd' - return this._formatDate(this._randomDate(), format) - }, - // 返回一个随机的时间字符串。 - time: function(format) { - format = format || 'HH:mm:ss' - return this._formatDate(this._randomDate(), format) - }, - // 返回一个随机的日期和时间字符串。 - datetime: function(format) { - format = format || 'yyyy-MM-dd HH:mm:ss' - return this._formatDate(this._randomDate(), format) - }, - // 返回当前的日期和时间字符串。 - now: function(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit - unit = '' - } - } - unit = (unit || '').toLowerCase() - format = format || 'yyyy-MM-dd HH:mm:ss' - - var date = new Date() - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case 'year': - date.setMonth(0) - case 'month': - date.setDate(1) - case 'week': - case 'day': - date.setHours(0) - case 'hour': - date.setMinutes(0) - case 'minute': - date.setSeconds(0) - case 'second': - date.setMilliseconds(0) - } - switch (unit) { - case 'week': - date.setDate(date.getDate() - date.getDay()) - } - - return this._formatDate(date, format) - } - } - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - - /* WEBPACK VAR INJECTION */(function(module) {/* global document */ - /* - ## Image - */ - module.exports = { - // 常见的广告宽高 - _adSize: [ - '300x250', '250x250', '240x400', '336x280', '180x150', - '720x300', '468x60', '234x60', '88x31', '120x90', - '120x60', '120x240', '125x125', '728x90', '160x600', - '120x600', '300x600' - ], - // 常见的屏幕宽高 - _screenSize: [ - '320x200', '320x240', '640x480', '800x480', '800x480', - '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200', - '2560x1600' - ], - // 常见的视频宽高 - _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'], - /* - 生成一个随机的图片地址。 - - 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - image: function(size, background, foreground, format, text) { - // Random.image( size, background, foreground, text ) - if (arguments.length === 4) { - text = format - format = undefined - } - // Random.image( size, background, text ) - if (arguments.length === 3) { - text = foreground - foreground = undefined - } - // Random.image() - if (!size) size = this.pick(this._adSize) - - if (background && ~background.indexOf('#')) background = background.slice(1) - if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1) - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return 'http://dummyimage.com/' + size + - (background ? '/' + background : '') + - (foreground ? '/' + foreground : '') + - (format ? '.' + format : '') + - (text ? '&text=' + text : '') - }, - img: function() { - return this.image.apply(this, arguments) - }, - - /* - BrandColors - http://brandcolors.net/ - A collection of major brand color codes curated by Galen Gidman. - 大牌公司的颜色集合 - - // 获取品牌和颜色 - $('h2').each(function(index, item){ - item = $(item) - console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') - }) - */ - _brandColors: { - '4ormat': '#fb0a2a', - '500px': '#02adea', - 'About.me (blue)': '#00405d', - 'About.me (yellow)': '#ffcc33', - 'Addvocate': '#ff6138', - 'Adobe': '#ff0000', - 'Aim': '#fcd20b', - 'Amazon': '#e47911', - 'Android': '#a4c639', - 'Angie\'s List': '#7fbb00', - 'AOL': '#0060a3', - 'Atlassian': '#003366', - 'Behance': '#053eff', - 'Big Cartel': '#97b538', - 'bitly': '#ee6123', - 'Blogger': '#fc4f08', - 'Boeing': '#0039a6', - 'Booking.com': '#003580', - 'Carbonmade': '#613854', - 'Cheddar': '#ff7243', - 'Code School': '#3d4944', - 'Delicious': '#205cc0', - 'Dell': '#3287c1', - 'Designmoo': '#e54a4f', - 'Deviantart': '#4e6252', - 'Designer News': '#2d72da', - 'Devour': '#fd0001', - 'DEWALT': '#febd17', - 'Disqus (blue)': '#59a3fc', - 'Disqus (orange)': '#db7132', - 'Dribbble': '#ea4c89', - 'Dropbox': '#3d9ae8', - 'Drupal': '#0c76ab', - 'Dunked': '#2a323a', - 'eBay': '#89c507', - 'Ember': '#f05e1b', - 'Engadget': '#00bdf6', - 'Envato': '#528036', - 'Etsy': '#eb6d20', - 'Evernote': '#5ba525', - 'Fab.com': '#dd0017', - 'Facebook': '#3b5998', - 'Firefox': '#e66000', - 'Flickr (blue)': '#0063dc', - 'Flickr (pink)': '#ff0084', - 'Forrst': '#5b9a68', - 'Foursquare': '#25a0ca', - 'Garmin': '#007cc3', - 'GetGlue': '#2d75a2', - 'Gimmebar': '#f70078', - 'GitHub': '#171515', - 'Google Blue': '#0140ca', - 'Google Green': '#16a61e', - 'Google Red': '#dd1812', - 'Google Yellow': '#fcca03', - 'Google+': '#dd4b39', - 'Grooveshark': '#f77f00', - 'Groupon': '#82b548', - 'Hacker News': '#ff6600', - 'HelloWallet': '#0085ca', - 'Heroku (light)': '#c7c5e6', - 'Heroku (dark)': '#6567a5', - 'HootSuite': '#003366', - 'Houzz': '#73ba37', - 'HTML5': '#ec6231', - 'IKEA': '#ffcc33', - 'IMDb': '#f3ce13', - 'Instagram': '#3f729b', - 'Intel': '#0071c5', - 'Intuit': '#365ebf', - 'Kickstarter': '#76cc1e', - 'kippt': '#e03500', - 'Kodery': '#00af81', - 'LastFM': '#c3000d', - 'LinkedIn': '#0e76a8', - 'Livestream': '#cf0005', - 'Lumo': '#576396', - 'Mixpanel': '#a086d3', - 'Meetup': '#e51937', - 'Nokia': '#183693', - 'NVIDIA': '#76b900', - 'Opera': '#cc0f16', - 'Path': '#e41f11', - 'PayPal (dark)': '#1e477a', - 'PayPal (light)': '#3b7bbf', - 'Pinboard': '#0000e6', - 'Pinterest': '#c8232c', - 'PlayStation': '#665cbe', - 'Pocket': '#ee4056', - 'Prezi': '#318bff', - 'Pusha': '#0f71b4', - 'Quora': '#a82400', - 'QUOTE.fm': '#66ceff', - 'Rdio': '#008fd5', - 'Readability': '#9c0000', - 'Red Hat': '#cc0000', - 'Resource': '#7eb400', - 'Rockpack': '#0ba6ab', - 'Roon': '#62b0d9', - 'RSS': '#ee802f', - 'Salesforce': '#1798c1', - 'Samsung': '#0c4da2', - 'Shopify': '#96bf48', - 'Skype': '#00aff0', - 'Snagajob': '#f47a20', - 'Softonic': '#008ace', - 'SoundCloud': '#ff7700', - 'Space Box': '#f86960', - 'Spotify': '#81b71a', - 'Sprint': '#fee100', - 'Squarespace': '#121212', - 'StackOverflow': '#ef8236', - 'Staples': '#cc0000', - 'Status Chart': '#d7584f', - 'Stripe': '#008cdd', - 'StudyBlue': '#00afe1', - 'StumbleUpon': '#f74425', - 'T-Mobile': '#ea0a8e', - 'Technorati': '#40a800', - 'The Next Web': '#ef4423', - 'Treehouse': '#5cb868', - 'Trulia': '#5eab1f', - 'Tumblr': '#34526f', - 'Twitch.tv': '#6441a5', - 'Twitter': '#00acee', - 'TYPO3': '#ff8700', - 'Ubuntu': '#dd4814', - 'Ustream': '#3388ff', - 'Verizon': '#ef1d1d', - 'Vimeo': '#86c9ef', - 'Vine': '#00a478', - 'Virb': '#06afd8', - 'Virgin Media': '#cc0000', - 'Wooga': '#5b009c', - 'WordPress (blue)': '#21759b', - 'WordPress (orange)': '#d54e21', - 'WordPress (grey)': '#464646', - 'Wunderlist': '#2b88d9', - 'XBOX': '#9bc848', - 'XING': '#126567', - 'Yahoo!': '#720e9e', - 'Yandex': '#ffcc00', - 'Yelp': '#c41200', - 'YouTube': '#c4302b', - 'Zalongo': '#5498dc', - 'Zendesk': '#78a300', - 'Zerply': '#9dcc7a', - 'Zootool': '#5e8b1d' - }, - _brandNames: function() { - var brands = []; - for (var b in this._brandColors) { - brands.push(b) - } - return brands - }, - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - dataImage: function(size, text) { - var canvas - if (typeof document !== 'undefined') { - canvas = document.createElement('canvas') - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require('canvas') - canvas = new Canvas() - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d") - if (!canvas || !ctx) return '' - - if (!size) size = this.pick(this._adSize) - text = text !== undefined ? text : size - - size = size.split('x') - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = this._brandColors[this.pick(this._brandNames())], - foreground = '#FFF', - text_height = 14, - font = 'sans-serif'; - - canvas.width = width - canvas.height = height - ctx.textAlign = 'center' - ctx.textBaseline = 'middle' - ctx.fillStyle = background - ctx.fillRect(0, 0, width, height) - ctx.fillStyle = foreground - ctx.font = 'bold ' + text_height + 'px ' + font - ctx.fillText(text, (width / 2), (height / 2), width) - return canvas.toDataURL('image/png') - } - } - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(9)(module))) - -/***/ }), -/* 9 */ -/***/ (function(module, exports) { - - module.exports = function(module) { - if(!module.webpackPolyfill) { - module.deprecate = function() {}; - module.paths = []; - // module.parent = undefined by default - module.children = []; - module.webpackPolyfill = 1; - } - return module; - } - - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() - */ - - var Convert = __webpack_require__(11) - var DICT = __webpack_require__(12) - - module.exports = { - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 - color: function(name) { - if (name || DICT[name]) return DICT[name].nicer - return this.hex() - }, - // #DAC0DE - hex: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2]) - return hex - }, - // rgb(128,255,255) - rgb: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - return 'rgb(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ')' - }, - // rgba(128,255,255,0.3) - rgba: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - return 'rgba(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ', ' + - Math.random().toFixed(2) + ')' - }, - // hsl(300,80%,90%) - hsl: function() { - var hsv = this._goldenRatioColor() - var hsl = Convert.hsv2hsl(hsv) - return 'hsl(' + - parseInt(hsl[0], 10) + ', ' + - parseInt(hsl[1], 10) + ', ' + - parseInt(hsl[2], 10) + ')' - }, - // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - // https://github.com/devongovett/color-generator/blob/master/index.js - // 随机生成一个有吸引力的颜色。 - _goldenRatioColor: function(saturation, value) { - this._goldenRatio = 0.618033988749895 - this._hue = this._hue || Math.random() - this._hue += this._goldenRatio - this._hue %= 1 - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return [ - this._hue * 360, - saturation * 100, - value * 100 - ] - } - } - -/***/ }), -/* 11 */ -/***/ (function(module, exports) { - - /* - ## Color Convert - - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 - */ - // https://github.com/harthur/color-convert/blob/master/conversions.js - module.exports = { - rgb2hsl: function rgb2hsl(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, l; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - l = (min + max) / 2; - - if (max == min) - s = 0; - else if (l <= 0.5) - s = delta / (max + min); - else - s = delta / (2 - max - min); - - return [h, s * 100, l * 100]; - }, - rgb2hsv: function rgb2hsv(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, v; - - if (max === 0) - s = 0; - else - s = (delta / max * 1000) / 10; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - v = ((max / 255) * 1000) / 10; - - return [h, s, v]; - }, - hsl2rgb: function hsl2rgb(hsl) { - var h = hsl[0] / 360, - s = hsl[1] / 100, - l = hsl[2] / 100, - t1, t2, t3, rgb, val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) - t2 = l * (1 + s); - else - t2 = l + s - l * s; - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) t3++; - if (t3 > 1) t3--; - - if (6 * t3 < 1) - val = t1 + (t2 - t1) * 6 * t3; - else if (2 * t3 < 1) - val = t2; - else if (3 * t3 < 2) - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - else - val = t1; - - rgb[i] = val * 255; - } - - return rgb; - }, - hsl2hsv: function hsl2hsv(hsl) { - var h = hsl[0], - s = hsl[1] / 100, - l = hsl[2] / 100, - sv, v; - l *= 2; - s *= (l <= 1) ? l : 2 - l; - v = (l + s) / 2; - sv = (2 * s) / (l + s); - return [h, sv * 100, v * 100]; - }, - hsv2rgb: function hsv2rgb(hsv) { - var h = hsv[0] / 60 - var s = hsv[1] / 100 - var v = hsv[2] / 100 - var hi = Math.floor(h) % 6 - - var f = h - Math.floor(h) - var p = 255 * v * (1 - s) - var q = 255 * v * (1 - (s * f)) - var t = 255 * v * (1 - (s * (1 - f))) - - v = 255 * v - - switch (hi) { - case 0: - return [v, t, p] - case 1: - return [q, v, p] - case 2: - return [p, v, t] - case 3: - return [p, q, v] - case 4: - return [t, p, v] - case 5: - return [v, p, q] - } - }, - hsv2hsl: function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, l; - - l = (2 - s) * v; - sl = s * v; - sl /= (l <= 1) ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; - }, - // http://www.140byt.es/keywords/color - rgb2hex: function( - a, // red, as a number from 0 to 255 - b, // green, as a number from 0 to 255 - c // blue, as a number from 0 to 255 - ) { - return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) - }, - hex2rgb: function( - a // take a "#xxxxxx" hex string, - ) { - a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0; - return [a >> 16, a >> 8 & 255, a & 255] - } - } - -/***/ }), -/* 12 */ -/***/ (function(module, exports) { - - /* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) - */ - module.exports = { - // name value nicer - navy: { - value: '#000080', - nicer: '#001F3F' - }, - blue: { - value: '#0000ff', - nicer: '#0074D9' - }, - aqua: { - value: '#00ffff', - nicer: '#7FDBFF' - }, - teal: { - value: '#008080', - nicer: '#39CCCC' - }, - olive: { - value: '#008000', - nicer: '#3D9970' - }, - green: { - value: '#008000', - nicer: '#2ECC40' - }, - lime: { - value: '#00ff00', - nicer: '#01FF70' - }, - yellow: { - value: '#ffff00', - nicer: '#FFDC00' - }, - orange: { - value: '#ffa500', - nicer: '#FF851B' - }, - red: { - value: '#ff0000', - nicer: '#FF4136' - }, - maroon: { - value: '#800000', - nicer: '#85144B' - }, - fuchsia: { - value: '#ff00ff', - nicer: '#F012BE' - }, - purple: { - value: '#800080', - nicer: '#B10DC9' - }, - silver: { - value: '#c0c0c0', - nicer: '#DDDDDD' - }, - gray: { - value: '#808080', - nicer: '#AAAAAA' - }, - black: { - value: '#000000', - nicer: '#111111' - }, - white: { - value: '#FFFFFF', - nicer: '#FFFFFF' - } - } - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Text - - http://www.lipsum.com/ - */ - var Basic = __webpack_require__(6) - var Helper = __webpack_require__(14) - - function range(defaultMin, defaultMax, min, max) { - return min === undefined ? Basic.natural(defaultMin, defaultMax) : // () - max === undefined ? min : // ( len ) - Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max ) - } - - module.exports = { - // 随机生成一段文本。 - paragraph: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.sentence()) - } - return result.join(' ') - }, - // - cparagraph: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.csentence()) - } - return result.join('') - }, - // 随机生成一个句子,第一个单词的首字母大写。 - sentence: function(min, max) { - var len = range(12, 18, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.word()) - } - return Helper.capitalize(result.join(' ')) + '.' - }, - // 随机生成一个中文句子。 - csentence: function(min, max) { - var len = range(12, 18, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.cword()) - } - - return result.join('') + '。' - }, - // 随机生成一个单词。 - word: function(min, max) { - var len = range(3, 10, min, max) - var result = ''; - for (var i = 0; i < len; i++) { - result += Basic.character('lower') - } - return result - }, - // 随机生成一个或多个汉字。 - cword: function(pool, min, max) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞' - - var len - switch (arguments.length) { - case 0: // () - pool = DICT_KANZI - len = 1 - break - case 1: // ( pool ) - if (typeof arguments[0] === 'string') { - len = 1 - } else { - // ( length ) - len = pool - pool = DICT_KANZI - } - break - case 2: - // ( pool, length ) - if (typeof arguments[0] === 'string') { - len = min - } else { - // ( min, max ) - len = this.natural(pool, min) - pool = DICT_KANZI - } - break - case 3: - len = this.natural(min, max) - break - } - - var result = '' - for (var i = 0; i < len; i++) { - result += pool.charAt(this.natural(0, pool.length - 1)) - } - return result - }, - // 随机生成一句标题,其中每个单词的首字母大写。 - title: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.capitalize(this.word())) - } - return result.join(' ') - }, - // 随机生成一句中文标题。 - ctitle: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.cword()) - } - return result.join('') - } - } - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Helpers - */ - - var Util = __webpack_require__(3) - - module.exports = { - // 把字符串的第一个字母转换为大写。 - capitalize: function(word) { - return (word + '').charAt(0).toUpperCase() + (word + '').substr(1) - }, - // 把字符串转换为大写。 - upper: function(str) { - return (str + '').toUpperCase() - }, - // 把字符串转换为小写。 - lower: function(str) { - return (str + '').toLowerCase() - }, - // 从数组中随机选取一个元素,并返回。 - pick: function pick(arr, min, max) { - // pick( item1, item2 ... ) - if (!Util.isArray(arr)) { - arr = [].slice.call(arguments) - min = 1 - max = 1 - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1 - - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min - } - - if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)] - - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max) - - // 通过参数个数判断方法签名,扩展性太差!#90 - // switch (arguments.length) { - // case 1: - // // pick( [ item1, item2 ... ] ) - // return arr[this.natural(0, arr.length - 1)] - // case 2: - // // pick( [ item1, item2 ... ], count ) - // max = min - // /* falls through */ - // case 3: - // // pick( [ item1, item2 ... ], min, max ) - // return this.shuffle(arr, min, max) - // } - }, - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) - */ - shuffle: function shuffle(arr, min, max) { - arr = arr || [] - var old = arr.slice(0), - result = [], - index = 0, - length = old.length; - for (var i = 0; i < length; i++) { - index = this.natural(0, old.length - 1) - result.push(old[index]) - old.splice(index, 1) - } - switch (arguments.length) { - case 0: - case 1: - return result - case 2: - max = min - /* falls through */ - case 3: - min = parseInt(min, 10) - max = parseInt(max, 10) - return result.slice(0, this.natural(min, max)) - } - }, - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - order: function order(array) { - order.cache = order.cache || {} - - if (arguments.length > 1) array = [].slice.call(arguments, 0) - - // options.context.path/templatePath - var options = order.options - var templatePath = options.context.templatePath.join('.') - - var cache = ( - order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array - } - ) - - return cache.array[cache.index++ % cache.array.length] - } - } - -/***/ }), -/* 15 */ -/***/ (function(module, exports) { - - /* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) - */ - module.exports = { - // 随机生成一个常见的英文名。 - first: function() { - var names = [ - // male - "James", "John", "Robert", "Michael", "William", - "David", "Richard", "Charles", "Joseph", "Thomas", - "Christopher", "Daniel", "Paul", "Mark", "Donald", - "George", "Kenneth", "Steven", "Edward", "Brian", - "Ronald", "Anthony", "Kevin", "Jason", "Matthew", - "Gary", "Timothy", "Jose", "Larry", "Jeffrey", - "Frank", "Scott", "Eric" - ].concat([ - // female - "Mary", "Patricia", "Linda", "Barbara", "Elizabeth", - "Jennifer", "Maria", "Susan", "Margaret", "Dorothy", - "Lisa", "Nancy", "Karen", "Betty", "Helen", - "Sandra", "Donna", "Carol", "Ruth", "Sharon", - "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", - "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", - "Brenda", "Amy", "Anna" - ]) - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓。 - last: function() { - var names = [ - "Smith", "Johnson", "Williams", "Brown", "Jones", - "Miller", "Davis", "Garcia", "Rodriguez", "Wilson", - "Martinez", "Anderson", "Taylor", "Thomas", "Hernandez", - "Moore", "Martin", "Jackson", "Thompson", "White", - "Lopez", "Lee", "Gonzalez", "Harris", "Clark", - "Lewis", "Robinson", "Walker", "Perez", "Hall", - "Young", "Allen" - ] - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓名。 - name: function(middle) { - return this.first() + ' ' + - (middle ? this.first() + ' ' : '') + - this.last() - }, - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - cfirst: function() { - var names = ( - '王 李 张 刘 陈 杨 赵 黄 周 吴 ' + - '徐 孙 胡 朱 高 林 何 郭 马 罗 ' + - '梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' + - '程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' + - '苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' + - '余 潘 杜 戴 夏 锺 汪 田 任 姜 ' + - '范 方 石 姚 谭 廖 邹 熊 金 陆 ' + - '郝 孔 白 崔 康 毛 邱 秦 江 史 ' + - '顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' + - '尹 黎 易 常 武 乔 贺 赖 龚 文' - ).split(' ') - return this.pick(names) - }, - /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - clast: function() { - var names = ( - '伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' + - '洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' + - '平 刚 桂英' - ).split(' ') - return this.pick(names) - }, - // 随机生成一个常见的中文姓名。 - cname: function() { - return this.cfirst() + this.clast() - } - } - -/***/ }), -/* 16 */ -/***/ (function(module, exports) { - - /* - ## Web - */ - module.exports = { - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - url: function(protocol, host) { - return (protocol || this.protocol()) + '://' + // protocol? - (host || this.domain()) + // host? - '/' + this.word() - }, - // 随机生成一个 URL 协议。 - protocol: function() { - return this.pick( - // 协议簇 - 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ') - ) - }, - // 随机生成一个域名。 - domain: function(tld) { - return this.word() + '.' + (tld || this.tld()) - }, - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - tld: function() { // Top Level Domain - return this.pick( - ( - // 域名后缀 - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' - ).split(' ') - ) - }, - // 随机生成一个邮件地址。 - email: function(domain) { - return this.character('lower') + '.' + this.word() + '@' + - ( - domain || - (this.word() + '.' + this.tld()) - ) - // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld() - // return this.word() + '@' + (domain || this.domain()) - }, - // 随机生成一个 IP 地址。 - ip: function() { - return this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) - } - } - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Address - */ - - var DICT = __webpack_require__(18) - var REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北'] - - module.exports = { - // 随机生成一个大区。 - region: function() { - return this.pick(REGION) - }, - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - province: function() { - return this.pick(DICT).name - }, - // 随机生成一个(中国)市。 - city: function(prefix) { - var province = this.pick(DICT) - var city = this.pick(province.children) - return prefix ? [province.name, city.name].join(' ') : city.name - }, - // 随机生成一个(中国)县。 - county: function(prefix) { - var province = this.pick(DICT) - var city = this.pick(province.children) - var county = this.pick(city.children) || { - name: '-' - } - return prefix ? [province.name, city.name, county.name].join(' ') : county.name - }, - // 随机生成一个邮政编码(六位数字)。 - zip: function(len) { - var zip = '' - for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9) - return zip - } - - // address: function() {}, - // phone: function() {}, - // areacode: function() {}, - // street: function() {}, - // street_suffixes: function() {}, - // street_suffix: function() {}, - // states: function() {}, - // state: function() {}, - } - -/***/ }), -/* 18 */ -/***/ (function(module, exports) { - - /* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - - **排序** - - ```js - var map = {} - _.each(_.keys(REGIONS),function(id){ - map[id] = REGIONS[ID] - }) - JSON.stringify(map) - ``` - */ - var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "471005": "其它区", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" - } - - // id pid/parentId name children - function tree(list) { - var mapped = {} - for (var i = 0, item; i < list.length; i++) { - item = list[i] - if (!item || !item.id) continue - mapped[item.id] = item - } - - var result = [] - for (var ii = 0; ii < list.length; ii++) { - item = list[ii] - - if (!item) continue - /* jshint -W041 */ - if (item.pid == undefined && item.parentId == undefined) { - result.push(item) - continue - } - var parent = mapped[item.pid] || mapped[item.parentId] - if (!parent) continue - if (!parent.children) parent.children = [] - parent.children.push(item) - } - return result - } - - var DICT_FIXED = function() { - var fixed = [] - for (var id in DICT) { - var pid = id.slice(2, 6) === '0000' ? undefined : - id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') : - id.slice(0, 4) + '00' - fixed.push({ - id: id, - pid: pid, - name: DICT[id] - }) - } - return tree(fixed) - }() - - module.exports = DICT_FIXED - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## Miscellaneous - */ - var DICT = __webpack_require__(18) - module.exports = { - // Dice - d4: function() { - return this.natural(1, 4) - }, - d6: function() { - return this.natural(1, 6) - }, - d8: function() { - return this.natural(1, 8) - }, - d12: function() { - return this.natural(1, 12) - }, - d20: function() { - return this.natural(1, 20) - }, - d100: function() { - return this.natural(1, 100) - }, - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - */ - guid: function() { - var pool = "abcdefABCDEF1234567890", - guid = this.string(pool, 8) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 12); - return guid - }, - uuid: function() { - return this.guid() - }, - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - id: function() { - var id, - sum = 0, - rank = [ - "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" - ], - last = [ - "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" - ] - - id = this.pick(DICT).id + - this.date('yyyyMMdd') + - this.string('number', 3) - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id - }, - - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - increment: function() { - var key = 0 - return function(step) { - return key += (+step || 1) // step? - } - }(), - inc: function(step) { - return this.increment(step) - } - } - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - - var Parser = __webpack_require__(21) - var Handler = __webpack_require__(22) - module.exports = { - Parser: Parser, - Handler: Handler - } - -/***/ }), -/* 21 */ -/***/ (function(module, exports) { - - // https://github.com/nuysoft/regexp - // forked from https://github.com/ForbesLindesay/regexp - - function parse(n) { - if ("string" != typeof n) { - var l = new TypeError("The regexp to parse must be represented as a string."); - throw l; - } - return index = 1, cgs = {}, parser.parse(n); - } - - function Token(n) { - this.type = n, this.offset = Token.offset(), this.text = Token.text(); - } - - function Alternate(n, l) { - Token.call(this, "alternate"), this.left = n, this.right = l; - } - - function Match(n) { - Token.call(this, "match"), this.body = n.filter(Boolean); - } - - function Group(n, l) { - Token.call(this, n), this.body = l; - } - - function CaptureGroup(n) { - Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), - this.body = n; - } - - function Quantified(n, l) { - Token.call(this, "quantified"), this.body = n, this.quantifier = l; - } - - function Quantifier(n, l) { - Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0; - } - - function CharSet(n, l) { - Token.call(this, "charset"), this.invert = n, this.body = l; - } - - function CharacterRange(n, l) { - Token.call(this, "range"), this.start = n, this.end = l; - } - - function Literal(n) { - Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text; - } - - function Unicode(n) { - Token.call(this, "unicode"), this.code = n.toUpperCase(); - } - - function Hex(n) { - Token.call(this, "hex"), this.code = n.toUpperCase(); - } - - function Octal(n) { - Token.call(this, "octal"), this.code = n.toUpperCase(); - } - - function BackReference(n) { - Token.call(this, "back-reference"), this.code = n.toUpperCase(); - } - - function ControlCharacter(n) { - Token.call(this, "control-character"), this.code = n.toUpperCase(); - } - - var parser = function() { - function n(n, l) { - function u() { - this.constructor = n; - } - u.prototype = l.prototype, n.prototype = new u(); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) { - return "\\x0" + l(n); - }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) { - return "\\x" + l(n); - }).replace(/[\u0180-\u0FFF]/g, function(n) { - return "\\u0" + l(n); - }).replace(/[\u1080-\uFFFF]/g, function(n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; - } - this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, - this.name = "SyntaxError", this.message = e(n, l); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, - l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, - l.seenCR = !0) : (l.column++, l.seenCR = !1); - } - return Mt !== l && (Mt > l && (Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }), u(Dt, Mt, l), Mt = l), Dt; - } - function e(n) { - Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, - qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], - t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, - u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, - l = il), l; - } - function i() { - var n, l, u, t, r; - if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), - Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), - null === r && (r = a()); - null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); - } else qt = n, n = il; else qt = n, n = il; - return n; - } - function a() { - var n; - return n = x(), null === n && (n = Q(), null === n && (n = B())), n; - } - function f() { - var l, u; - return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), - null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; - } - function s() { - var l, u; - return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), - null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; - } - function h() { - var n, l, u; - return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; - } - function d() { - var n, l, u; - return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, - l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, - n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; - } - function p() { - var n; - return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), - null === n && (n = g(), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, - 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, - qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function w() { - var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, - 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function A() { - var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, - 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function C() { - var l, u; - return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), - null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; - } - function g() { - var l, u; - return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), - null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; - } - function b() { - var l, u; - return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), - null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), - l; - } - function T() { - var l, u, t; - if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, - 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), - qt++) : (t = null, 0 === Wt && e(Il)); else u = il; - return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, - l; - } - function x() { - var l, u, t, r; - return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), - null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), - null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), - null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function y() { - var n, l; - return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, - n = l) : n = l, n; - } - function m() { - var l, u, t; - return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function R() { - var l, u, t; - return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function F() { - var l, u, t; - return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function Q() { - var l, u, t, r, o; - if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), - null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), - null === t && (t = al), null !== t) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), - null === o && (o = U()); - null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), - null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il); - } else qt = l, l = il; else qt = l, l = il; - return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, - 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, - null === l && (u = null, 0 === Wt && e(du)), l; - } - function U() { - var n, l; - return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), - n; - } - function E() { - var l, u; - return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), - null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; - } - function G() { - var n; - return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), - null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), - null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), - null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), - null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; - } - function B() { - var n; - return n = j(), null === n && (n = q(), null === n && (n = $())), n; - } - function j() { - var l, u; - return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), - null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; - } - function $() { - var l, u; - return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, - 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, - Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; - } - function q() { - var n; - return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), - null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), - null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), - null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), - null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), - n; - } - function L() { - var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; - } - function M() { - var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; - } - function D() { - var l, u; - return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), - null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; - } - function H() { - var l, u; - return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), - null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; - } - function O() { - var l, u; - return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), - null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; - } - function W() { - var l, u; - return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), - null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; - } - function z() { - var l, u; - return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), - null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; - } - function I() { - var l, u; - return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), - null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; - } - function J() { - var l, u; - return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), - null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; - } - function K() { - var l, u; - return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), - null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; - } - function N() { - var l, u; - return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), - null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; - } - function P() { - var l, u; - return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), - null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; - } - function V() { - var l, u; - return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), - null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; - } - function X() { - var l, u; - return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), - null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; - } - function Y() { - var l, u, t; - return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function Z() { - var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), - null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function _() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u) { - if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), - null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(mt)); else t = il; - null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function nl() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function ll() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function ul() { - var l, u; - return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; - } - function tl() { - var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { - regexp: c - }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) { - return l ? new Alternate(n, l[1]) : n; - }, dl = function(n, l, u) { - return new Match([ n ].concat(l).concat([ u ])); - }, pl = "^", vl = '"^"', wl = function() { - return new Token("start"); - }, Al = "$", Cl = '"$"', gl = function() { - return new Token("end"); - }, bl = function(n, l) { - return new Quantified(n, l); - }, kl = "Quantifier", Tl = function(n, l) { - return l && (n.greedy = !1), n; - }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) { - return new Quantifier(n, l); - }, Ul = ",}", El = '",}"', Gl = function(n) { - return new Quantifier(n, 1/0); - }, Bl = function(n) { - return new Quantifier(n, n); - }, jl = "+", $l = '"+"', ql = function() { - return new Quantifier(1, 1/0); - }, Ll = "*", Ml = '"*"', Dl = function() { - return new Quantifier(0, 1/0); - }, Hl = "?", Ol = '"?"', Wl = function() { - return new Quantifier(0, 1); - }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) { - return +n.join(""); - }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) { - return n; - }, Yl = function(n) { - return new CaptureGroup(n); - }, Zl = "?:", _l = '"?:"', nu = function(n) { - return new Group("non-capture-group", n); - }, lu = "?=", uu = '"?="', tu = function(n) { - return new Group("positive-lookahead", n); - }, ru = "?!", eu = '"?!"', ou = function(n) { - return new Group("negative-lookahead", n); - }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) { - return new CharSet(!!n, l); - }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) { - return new CharacterRange(n, l); - }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) { - return new Literal(n); - }, ku = ".", Tu = '"."', xu = function() { - return new Token("any-character"); - }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() { - return new Token("backspace"); - }, Uu = function() { - return new Token("word-boundary"); - }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() { - return new Token("non-word-boundary"); - }, ju = "\\d", $u = '"\\\\d"', qu = function() { - return new Token("digit"); - }, Lu = "\\D", Mu = '"\\\\D"', Du = function() { - return new Token("non-digit"); - }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() { - return new Token("form-feed"); - }, zu = "\\n", Iu = '"\\\\n"', Ju = function() { - return new Token("line-feed"); - }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() { - return new Token("carriage-return"); - }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() { - return new Token("white-space"); - }, Zu = "\\S", _u = '"\\\\S"', nt = function() { - return new Token("non-white-space"); - }, lt = "\\t", ut = '"\\\\t"', tt = function() { - return new Token("tab"); - }, rt = "\\v", et = '"\\\\v"', ot = function() { - return new Token("vertical-tab"); - }, ct = "\\w", it = '"\\\\w"', at = function() { - return new Token("word"); - }, ft = "\\W", st = '"\\\\W"', ht = function() { - return new Token("non-word"); - }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) { - return new ControlCharacter(n); - }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) { - return new BackReference(n); - }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) { - return new Octal(n.join("")); - }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) { - return new Hex(n.join("")); - }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) { - return new Unicode(n.join("")); - }, $t = function() { - return new Token("null-character"); - }, qt = 0, Lt = 0, Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }, Ht = 0, Ot = [], Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl; - throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column); - } - return n(l, Error), { - SyntaxError: l, - parse: u - }; - }(), index = 1, cgs = {}; - - module.exports = parser - -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ - - var Util = __webpack_require__(3) - var Random = __webpack_require__(5) - /* - - */ - var Handler = { - extend: Util.extend - } - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart - /*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] - }*/ - - // ASCII printable code chart - // var LOWER = 'abcdefghijklmnopqrstuvwxyz' - // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - // var NUMBER = '0123456789' - // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' - var LOWER = ascii(97, 122) - var UPPER = ascii(65, 90) - var NUMBER = ascii(48, 57) - var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96) - var PRINTABLE = ascii(32, 126) - var SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029' - var CHARACTER_CLASSES = { - '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) - '\\W': OTHER.replace('_', ''), - '\\s': SPACE, - '\\S': function() { - var result = PRINTABLE - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], '') - } - return result - }(), - '\\d': NUMBER, - '\\D': LOWER + UPPER + OTHER - } - - function ascii(from, to) { - var result = '' - for (var i = from; i <= to; i++) { - result += String.fromCharCode(i) - } - return result - } - - // var ast = RegExpParser.parse(regexp.source) - Handler.gen = function(node, result, cache) { - cache = cache || { - guid: 1 - } - return Handler[node.type] ? Handler[node.type](node, result, cache) : - Handler.token(node, result, cache) - } - - Handler.extend({ - /* jshint unused:false */ - token: function(node, result, cache) { - switch (node.type) { - case 'start': - case 'end': - return '' - case 'any-character': - return Random.character() - case 'backspace': - return '' - case 'word-boundary': // TODO - return '' - case 'non-word-boundary': // TODO - break - case 'digit': - return Random.pick( - NUMBER.split('') - ) - case 'non-digit': - return Random.pick( - (LOWER + UPPER + OTHER).split('') - ) - case 'form-feed': - break - case 'line-feed': - return node.body || node.text - case 'carriage-return': - break - case 'white-space': - return Random.pick( - SPACE.split('') - ) - case 'non-white-space': - return Random.pick( - (LOWER + UPPER + NUMBER).split('') - ) - case 'tab': - break - case 'vertical-tab': - break - case 'word': // \w [a-zA-Z0-9] - return Random.pick( - (LOWER + UPPER + NUMBER).split('') - ) - case 'non-word': // \W [^a-zA-Z0-9] - return Random.pick( - OTHER.replace('_', '').split('') - ) - case 'null-character': - break - } - return node.body || node.text - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function(node, result, cache) { - // node.left/right {} - return this.gen( - Random.boolean() ? node.left : node.right, - result, - cache - ) - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function(node, result, cache) { - result = '' - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache) - } - return result - }, - // () - 'capture-group': function(node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache) - cache[cache.guid++] = result - return result - }, - // (?:...) - 'non-capture-group': function(node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache) - }, - // (?=p) - 'positive-lookahead': function(node, result, cache) { - // node.body - return this.gen(node.body, result, cache) - }, - // (?!p) - 'negative-lookahead': function(node, result, cache) { - // node.body - return '' - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function(node, result, cache) { - result = '' - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache) - } - return result - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function(node, result, cache) { - var min = Math.max(node.min, 0) - var max = isFinite(node.max) ? node.max : - min + Random.integer(3, 7) - return Random.integer(min, max) - }, - /* - - */ - charset: function(node, result, cache) { - // node.invert - if (node.invert) return this['invert-charset'](node, result, cache) - - // node.body [] - var literal = Random.pick(node.body) - return this.gen(literal, result, cache) - }, - 'invert-charset': function(node, result, cache) { - var pool = PRINTABLE - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i] - switch (item.type) { - case 'literal': - pool = pool.replace(item.body, '') - break - case 'range': - var min = this.gen(item.start, result, cache).charCodeAt() - var max = this.gen(item.end, result, cache).charCodeAt() - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), '') - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text] - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], '') - } - } - } - } - return Random.pick(pool.split('')) - }, - range: function(node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt() - var max = this.gen(node.end, result, cache).charCodeAt() - return String.fromCharCode( - Random.integer(min, max) - ) - }, - literal: function(node, result, cache) { - return node.escaped ? node.body : node.text - }, - // Unicode \u - unicode: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 16) - ) - }, - // 十六进制 \xFF - hex: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 16) - ) - }, - // 八进制 \0 - octal: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 8) - ) - }, - // 反向引用 - 'back-reference': function(node, result, cache) { - return cache[node.code] || '' - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: function() { - var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' ') - var CONTROL_CHARACTER_UNICODE = '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split(' ') - var map = {} - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i] - } - return map - }(), - 'control-character': function(node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code] - } - }) - - module.exports = Handler - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(24) - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - var Constant = __webpack_require__(2) - var Util = __webpack_require__(3) - var Parser = __webpack_require__(4) - - function toJSONSchema(template, name, path /* Internal Use Only */ ) { - // type rule properties items - path = path || [] - var result = { - name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, - template: template, - type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: Parser.parse(name) - } - result.path = path.slice(0) - result.path.push(name === undefined ? 'ROOT' : result.name) - - switch (result.type) { - case 'array': - result.items = [] - Util.each(template, function(value, index) { - result.items.push( - toJSONSchema(value, index, result.path) - ) - }) - break - case 'object': - result.properties = [] - Util.each(template, function(value, name) { - result.properties.push( - toJSONSchema(value, name, result.path) - ) - }) - break - } - - return result - - } - - module.exports = toJSONSchema - - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(26) - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - - /* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) - */ - var Constant = __webpack_require__(2) - var Util = __webpack_require__(3) - var toJSONSchema = __webpack_require__(23) - - function valid(template, data) { - var schema = toJSONSchema(template) - var result = Diff.diff(schema, data) - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result - } - - /* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 - */ - var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */ ) { - var result = [] - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if ( - this.name(schema, data, name, result) && - this.type(schema, data, name, result) - ) { - this.value(schema, data, name, result) - this.properties(schema, data, name, result) - this.items(schema, data, name, result) - } - - return result - }, - /* jshint unused:false */ - name: function(schema, data, name, result) { - var length = result.length - - Assert.equal('name', schema.path, name + '', schema.name + '', result) - - return result.length === length - }, - type: function(schema, data, name, result) { - var length = result.length - - switch (schema.type) { - case 'string': - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true - break - case 'array': - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true - } - break - case 'function': - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true - } - - Assert.equal('type', schema.path, Util.type(data), schema.type, result) - - return result.length === length - }, - value: function(schema, data, name, result) { - var length = result.length - - var rule = schema.rule - var templateType = schema.type - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result) - return result.length === length - case 'string': - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length - break - } - Assert.equal('value', schema.path, data, schema.template, result) - return result.length === length - } - - // 有生成规则 - var actualRepeatCount - switch (templateType) { - case 'number': - var parts = (data + '').split('.') - parts[0] = +parts[0] - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result) - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name) - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result) - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result) - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result) - } - } - - break - - case 'boolean': - break - - case 'string': - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')) - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) - } - - break - - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')) - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) - } - break - } - - return result.length === length - }, - properties: function(schema, data, name, result) { - var length = result.length - - var rule = schema.rule - var keys = Util.keys(data) - if (!schema.properties) return - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result) - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result) - Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result) - } - } - - if (result.length !== length) return false - - for (var i = 0; i < keys.length; i++) { - result.push.apply( - result, - this.diff( - function() { - var property - Util.each(schema.properties, function(item /*, index*/ ) { - if (item.name === keys[i]) property = item - }) - return property || schema.properties[i] - }(), - data[keys[i]], - keys[i] - ) - ) - } - - return result.length === length - }, - items: function(schema, data, name, result) { - var length = result.length - - if (!schema.items) return - - var rule = schema.rule - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result) - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements') - Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements') - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length - else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result) - } - // |+inc - if (rule.parameters[2]) return result.length === length - } - - if (result.length !== length) return false - - for (var i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff( - schema.items[i % schema.items.length], - data[i], - i % schema.items.length - ) - ) - } - - return result.length === length - } - } - - /* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - - */ - var Assert = { - message: function(item) { - return (item.message || - '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}') - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual) - }, - equal: function(type, path, actual, expected, result, message) { - if (actual === expected) return true - switch (type) { - case 'type': - // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true - break - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - // actual matches expected - match: function(type, path, actual, expected, result, message) { - if (expected.test(actual)) return true - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'matches', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - notEqual: function(type, path, actual, expected, result, message) { - if (actual !== expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is not equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - greaterThan: function(type, path, actual, expected, result, message) { - if (actual > expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - lessThan: function(type, path, actual, expected, result, message) { - if (actual < expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - greaterThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual >= expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than or equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - lessThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual <= expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less than or equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - } - } - - valid.Diff = Diff - valid.Assert = Assert - - module.exports = valid - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - - module.exports = __webpack_require__(28) - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - - /* global window, document, location, Event, setTimeout */ - /* - ## MockXMLHttpRequest - - 期望的功能: - 1. 完整地覆盖原生 XHR 的行为 - 2. 完整地模拟原生 XHR 的行为 - 3. 在发起请求时,自动检测是否需要拦截 - 4. 如果不必拦截,则执行原生 XHR 的行为 - 5. 如果需要拦截,则执行虚拟 XHR 的行为 - 6. 兼容 XMLHttpRequest 和 ActiveXObject - new window.XMLHttpRequest() - new window.ActiveXObject("Microsoft.XMLHTTP") - - 关键方法的逻辑: - * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。 - * open 此时可以取到 URL,可以决定是否进行拦截。 - * send 此时已经确定了请求方式。 - - 规范: - http://xhr.spec.whatwg.org/ - http://www.w3.org/TR/XMLHttpRequest2/ - - 参考实现: - https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js - https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js - https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js - https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js - https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js - - **需不需要全面重写 XMLHttpRequest?** - http://xhr.spec.whatwg.org/#interface-xmlhttprequest - 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。 - 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。 - - // Event handlers - onloadstart loadstart - onprogress progress - onabort abort - onerror error - onload load - ontimeout timeout - onloadend loadend - onreadystatechange readystatechange - */ - - var Util = __webpack_require__(3) - - // 备份原生 XMLHttpRequest - window._XMLHttpRequest = window.XMLHttpRequest - window._ActiveXObject = window.ActiveXObject - - /* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 - */ - try { - new window.Event('custom') - } catch (exception) { - window.Event = function(type, bubbles, cancelable, detail) { - var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail) - return event - } - } - - var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4 - } - - var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ') - var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ') - var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ') - - // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 - var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" - } - - /* - MockXMLHttpRequest - */ - - function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {} - } - } - - MockXMLHttpRequest._settings = { - timeout: '10-100', - /* - timeout: 50, - timeout: '10-100', - */ - } - - MockXMLHttpRequest.setup = function(settings) { - Util.extend(MockXMLHttpRequest._settings, settings) - return MockXMLHttpRequest._settings - } - - Util.extend(MockXMLHttpRequest, XHR_STATES) - Util.extend(MockXMLHttpRequest.prototype, XHR_STATES) - - // 标记当前对象为 MockXMLHttpRequest - MockXMLHttpRequest.prototype.mock = true - - // 是否拦截 Ajax 请求 - MockXMLHttpRequest.prototype.match = false - - // 初始化 Request 相关的属性和方法 - Util.extend(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function(method, url, async, username, password) { - var that = this - - Util.extend(this.custom, { - method: method, - url: url, - async: typeof async === 'boolean' ? async : true, - username: username, - password: password, - options: { - url: url, - type: method - } - }) - - this.custom.timeout = function(timeout) { - if (typeof timeout === 'number') return timeout - if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10) - if (typeof timeout === 'string' && ~timeout.indexOf('-')) { - var tmp = timeout.split('-') - var min = parseInt(tmp[0], 10) - var max = parseInt(tmp[1], 10) - return Math.round(Math.random() * (max - min)) + min - } - }(MockXMLHttpRequest._settings.timeout) - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options) - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]] - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/ )) - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest() - this.custom.xhr = xhr - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle) - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password) - else xhr.open(method, url, async) - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]] - } catch (e) {} - } - - return - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true - this.custom.template = item - this.readyState = MockXMLHttpRequest.OPENED - this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ )) - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function(name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value) - return - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders - if (requestHeaders[name]) requestHeaders[name] += ',' + value - else requestHeaders[name] = value - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this - this.custom.options.body = data - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data) - return - } - - // 拦截 XHR - - // X-Requested-With header - this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest') - - // loadstart The fetch initiates. - this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ )) - - if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步 - else done() // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - that.readyState = MockXMLHttpRequest.LOADING - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - - that.status = 200 - that.statusText = HTTP_STATUS_CODES[200] - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify( - convert(that.custom.template, that.custom.options), - null, 4 - ) - - that.readyState = MockXMLHttpRequest.DONE - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - that.dispatchEvent(new Event('load' /*, false, false, that*/ )); - that.dispatchEvent(new Event('loadend' /*, false, false, that*/ )); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort() - return - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT - this.dispatchEvent(new Event('abort', false, false, this)) - this.dispatchEvent(new Event('error', false, false, this)) - } - }) - - // 初始化 Response 相关的属性和方法 - Util.extend(MockXMLHttpRequest.prototype, { - responseURL: '', - status: MockXMLHttpRequest.UNSENT, - statusText: '', - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function(name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name) - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()] - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function() { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders() - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders - var headers = '' - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue - headers += h + ': ' + responseHeaders[h] + '\r\n' - } - return headers - }, - overrideMimeType: function( /*mime*/ ) {}, - responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: '', - responseXML: null - }) - - // EventTarget - Util.extend(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events - if (!events[type]) events[type] = [] - events[type].push(handle) - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || [] - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1) - } - } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || [] - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event) - } - - var ontype = 'on' + event.type - if (this[ontype]) this[ontype](event) - } - }) - - // Inspired by jQuery - function createNativeXMLHttpRequest() { - var isLocal = function() { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ - var ajaxLocation = location.href - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [] - return rlocalProtocol.test(ajaxLocParts[1]) - }() - - return window.ActiveXObject ? - (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR() - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} - } - - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} - } - } - - - // 查找与请求参数匹配的数据模板:URL,Type - function find(options) { - - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType] - if ( - (!item.rurl || match(item.rurl, options.url)) && - (!item.rtype || match(item.rtype, options.type.toLowerCase())) - ) { - // console.log('[mock]', options.url, '>', item.rurl) - return item - } - } - - function match(expected, actual) { - if (Util.type(expected) === 'string') { - return expected === actual - } - if (Util.type(expected) === 'regexp') { - return expected.test(actual) - } - } - - } - - // 数据模板 => 响应数据 - function convert(item, options) { - return Util.isFunction(item.template) ? - item.template(options) : MockXMLHttpRequest.Mock.mock(item.template) - } - - module.exports = MockXMLHttpRequest - -/***/ }) -/******/ ]) -}); -; \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 81227851..00000000 --- a/gulpfile.js +++ /dev/null @@ -1,164 +0,0 @@ -var gulp = require('gulp') -var jshint = require('gulp-jshint') -var webpack = require("webpack") -var connect = require('gulp-connect') -var mochaPhantomJS = require('gulp-mocha-phantomjs') -var exec = require('child_process').exec - -var istanbul = require('gulp-istanbul') -var mocha = require('gulp-mocha') -var coveralls = require('gulp-coveralls') - -// -gulp.task('hello', function() { - console.log((function() { - /* -___ ___ _ _ -| \/ | | | (_) -| . . | ___ ___ | | __ _ ___ -| |\/| | / _ \ / __|| |/ / | |/ __| -| | | || (_) || (__ | < _ | |\__ \ -\_| |_/ \___/ \___||_|\_\(_)| ||___/ - _/ | - |__/ - */ - }).toString().split('\n').slice(2, -2).join('\n') + '\n') -}) - -// https://github.com/AveVlad/gulp-connect -gulp.task('connect', function() { - /* jshint unused:false */ - connect.server({ - port: 5050, - middleware: function(connect, opt) { - return [ - // https://github.com/senchalabs/connect/#use-middleware - function cors(req, res, next) { - res.setHeader('Access-Control-Allow-Origin', '*') - res.setHeader('Access-Control-Allow-Methods', '*') - next() - } - ] - } - }) -}) - -// https://github.com/spenceralger/gulp-jshint -gulp.task('jshint', function() { - var globs = [ - 'src/**/*.js', 'test/test.*.js', 'gulpfile.js', '!**/regexp/parser.js' - ] - return gulp.src(globs) - .pipe(jshint('.jshintrc')) - .pipe(jshint.reporter('jshint-stylish')) -}) - -// https://webpack.github.io/docs/usage-with-gulp.html -gulp.task("webpack", function( /*callback*/ ) { - webpack({ - entry: './src/mock.js', - output: { - path: './dist', - filename: 'mock.js', - library: 'Mock', - libraryTarget: 'umd' - } - }, function(err /*, stats*/ ) { - // console.log(err, stats) - if (err) throw err - }) - webpack({ - entry: './src/mock.js', - devtool: 'source-map', - output: { - path: './dist', - filename: 'mock-min.js', - library: 'Mock', - libraryTarget: 'umd' - }, - plugins: [ - new webpack.optimize.UglifyJsPlugin({ - minimize: true - }) - ] - }, function(err /*, stats*/ ) { - // console.log(err, stats) - if (err) throw err - }) -}) - -// https://github.com/mrhooray/gulp-mocha-phantomjs -gulp.task('mocha', function() { - return gulp.src('test/test.mock.html') - .pipe(mochaPhantomJS({ - reporter: 'spec' - })) -}) - - -// https://github.com/floatdrop/gulp-watch -var watchTasks = ['hello', 'madge', 'jshint', 'webpack', 'mocha'] -gulp.task('watch', function( /*callback*/ ) { - gulp.watch(['src/**/*.js', 'gulpfile.js', 'test/*'], watchTasks) -}) - -// https://github.com/pahen/madge -gulp.task('madge', function( /*callback*/ ) { - exec('madge ./src/', - function(error, stdout /*, stderr*/ ) { - if (error) console.log('exec error: ' + error) - console.log('module dependencies:') - console.log(stdout) - } - ) - exec('madge --image ./src/dependencies.png ./src/', - function(error /*, stdout, stderr*/ ) { - if (error) console.log('exec error: ' + error) - } - ) -}) - -// TODO - -// https://github.com/SBoudrias/gulp-istanbul -gulp.task('istanbul', function(cb) { - gulp.src(['test/test.coveralls.js']) - .pipe(istanbul()) // Covering files - .pipe(istanbul.hookRequire()) // Force `require` to return covered files - .on('finish', function() { - gulp.src(['test/test.coveralls.js']) - .pipe(mocha({})) - .pipe(istanbul.writeReports()) // Creating the reports after tests runned - .on('end', cb) - }) -}) -gulp.task('istanbulForMochaPhantomJS', function(cb) { - gulp.src(['dist/mock.js']) - .pipe(istanbul()) // Covering files - .pipe(istanbul.hookRequire()) // Force `require` to return covered files - .on('finish', function() { - gulp.src(['test/test.mock.html']) - .pipe(mochaPhantomJS({ - reporter: 'spec' - })) - .pipe(istanbul.writeReports()) // Creating the reports after tests runned - .on('end', cb) - }) -}) - -// https://github.com/markdalgleish/gulp-coveralls -gulp.task('coveralls', ['istanbul'], function() { - return gulp.src('coverage/**/lcov.info') - .pipe(coveralls()) -}) - -// -gulp.task('publish', function() { - var child_process = require('child_process') - child_process.exec('ls', function(error, stdout, stderr) { - console.log(error, stdout, stderr) - }) -}) - -gulp.task('default', watchTasks.concat(['watch', 'connect'])) -gulp.task('build', ['jshint', 'webpack', 'mocha']) \ No newline at end of file diff --git a/package.json b/package.json deleted file mode 100644 index 730429c7..00000000 --- a/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "mockjs", - "title": "Mock.js", - "description": "生成随机数据 & 拦截 Ajax 请求", - "version": "1.0.1-beta3", - "homepage": "http://mockjs.com/", - "keywords": [ - "mock", - "mockJSON", - "mockAjax" - ], - "author": "nuysoft@gmail.com", - "dependencies": { - "commander": "*" - }, - "devDependencies": { - "gulp": "^3.9.0", - "gulp-connect": "^5.7.0", - "gulp-coveralls": "^0.1.4", - "gulp-istanbul": "^0.10.4", - "gulp-jshint": "^2.1.0", - "gulp-mocha": "^2.2.0", - "gulp-mocha-phantomjs": "^0.10.1", - "jshint": "^2.8.0", - "jshint-stylish": "^2.1.0", - "webpack": "^1.12.9" - }, - "repository": { - "type": "git", - "url": "git://github.com/nuysoft/Mock.git" - }, - "main": "./dist/mock.js", - "scripts": { - "test": "gulp mocha", - "coveralls": "gulp coveralls" - }, - "bin": { - "random": "bin/random" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/nuysoft/Mock/blob/master/LICENSE" - } - ], - "spm": { - "main": "dist/mock.js" - } -} diff --git a/src/dependencies.png b/src/dependencies.png deleted file mode 100644 index 0c5d7d88c6345fb3630169cf3ea37778f2f3f843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344355 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

hZN;D- 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

`&Cj0o_(?<8*Qy?+0OU9$t-i?O4# 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

X=q8yf`0PTPn1hu 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 - - - - - - - - - - - - - - - Created with Snapgroup #1any character|+group #2digitgroup #3One of:+-digit-One of:+-digit.group #4digit-digit \ No newline at end of file diff --git a/src/mock/constant.js b/src/mock/constant.js deleted file mode 100644 index 3a83fa55..00000000 --- a/src/mock/constant.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - ## Constant - - 常量集合。 - */ -/* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 -*/ -module.exports = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ -} \ No newline at end of file diff --git a/src/mock/handler.js b/src/mock/handler.js deleted file mode 100644 index f4b9e139..00000000 --- a/src/mock/handler.js +++ /dev/null @@ -1,544 +0,0 @@ -/* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - -*/ - -var Constant = require('./constant') -var Util = require('./util') -var Parser = require('./parser') -var Random = require('./random/') -var RE = require('./regexp') - -var Handler = { - extend: Util.extend -} - -/* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot -*/ -Handler.gen = function(template, name, context) { - /* jshint -W041 */ - name = name == undefined ? '' : (name + '') - - context = context || {} - context = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [Constant.GUID], - templatePath: context.templatePath || [Constant.GUID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template - } - // console.log('path:', context.path.join('.'), template) - - var rule = Parser.parse(name) - var type = Util.type(template) - var data - - if (Handler[type]) { - data = Handler[type]({ - // 属性值类型 - type: type, - // 属性值模板 - template: template, - // 属性名 + 生成规则 - name: name, - // 属性名 - parsedName: name ? name.replace(Constant.RE_KEY, '$1') : name, - - // 解析后的生成规则 - rule: rule, - // 相关上下文 - context: context - }) - - if (!context.root) context.root = data - return data - } - - return template -} - -Handler.extend({ - array: function(options) { - var result = [], - i, ii; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (options.template.length === 0) return result - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!options.rule.parameters) { - for (i = 0; i < options.template.length; i++) { - options.context.path.push(i) - options.context.templatePath.push(i) - result.push( - Handler.gen(options.template[i], i, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - ) - options.context.path.pop() - options.context.templatePath.pop() - } - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (options.rule.min === 1 && options.rule.max === undefined) { - // fix #17 - options.context.path.push(options.name) - options.context.templatePath.push(options.name) - result = Random.pick( - Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - ) - options.context.path.pop() - options.context.templatePath.pop() - } else { - // 'data|+1': [{}, {}] - if (options.rule.parameters[2]) { - options.template.__order_index = options.template.__order_index || 0 - - options.context.path.push(options.name) - options.context.templatePath.push(options.name) - result = Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - })[ - options.template.__order_index % options.template.length - ] - - options.template.__order_index += +options.rule.parameters[2] - - options.context.path.pop() - options.context.templatePath.pop() - - } else { - // 'data|1-10': [{}] - for (i = 0; i < options.rule.count; i++) { - // 'data|1-10': [{}, {}] - for (ii = 0; ii < options.template.length; ii++) { - options.context.path.push(result.length) - options.context.templatePath.push(ii) - result.push( - Handler.gen(options.template[ii], result.length, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - ) - options.context.path.pop() - options.context.templatePath.pop() - } - } - } - } - } - return result - }, - object: function(options) { - var result = {}, - keys, fnKeys, key, parsedKey, inc, i; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (options.rule.min != undefined) { - keys = Util.keys(options.template) - keys = Random.shuffle(keys) - keys = keys.slice(0, options.rule.count) - for (i = 0; i < keys.length; i++) { - key = keys[i] - parsedKey = key.replace(Constant.RE_KEY, '$1') - options.context.path.push(parsedKey) - options.context.templatePath.push(key) - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - options.context.path.pop() - options.context.templatePath.pop() - } - - } else { - // 'obj': {} - keys = [] - fnKeys = [] // #25 改变了非函数属性的顺序,查找起来不方便 - for (key in options.template) { - (typeof options.template[key] === 'function' ? fnKeys : keys).push(key) - } - keys = keys.concat(fnKeys) - - /* - 会改变非函数属性的顺序 - keys = Util.keys(options.template) - keys.sort(function(a, b) { - var afn = typeof options.template[a] === 'function' - var bfn = typeof options.template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - for (i = 0; i < keys.length; i++) { - key = keys[i] - parsedKey = key.replace(Constant.RE_KEY, '$1') - options.context.path.push(parsedKey) - options.context.templatePath.push(key) - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - }) - options.context.path.pop() - options.context.templatePath.pop() - // 'id|+1': 1 - inc = key.match(Constant.RE_KEY) - if (inc && inc[2] && Util.type(options.template[key]) === 'number') { - options.template[key] += parseInt(inc[2], 10) - } - } - } - return result - }, - number: function(options) { - var result, parts; - if (options.rule.decimal) { // float - options.template += '' - parts = options.template.split('.') - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parts[0] = options.rule.range ? options.rule.count : parts[0] - parts[1] = (parts[1] || '').slice(0, options.rule.dcount) - while (parts[1].length < options.rule.dcount) { - parts[1] += ( - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789') - ) - } - result = parseFloat(parts.join('.'), 10) - } else { // integer - // 'grade1|1-100': 1, - result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template - } - return result - }, - boolean: function(options) { - var result; - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template - return result - }, - string: function(options) { - var result = '', - i, placeholders, ph, phed; - if (options.template.length) { - - // 'foo': '★', - /* jshint -W041 */ - if (options.rule.count == undefined) { - result += options.template - } - - // 'star|1-5': '★', - for (i = 0; i < options.rule.count; i++) { - result += options.template - } - // 'email|1-10': '@EMAIL, ', - placeholders = result.match(Constant.RE_PLACEHOLDER) || [] // A-Z_0-9 > \w_ - for (i = 0; i < placeholders.length; i++) { - ph = placeholders[i] - - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(i--, 1) - continue - } - - phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options) - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // - result = phed - break - - if (Util.isNumeric(phed)) { - result = parseFloat(phed, 10) - break - } - if (/^(true|false)$/.test(phed)) { - result = phed === 'true' ? true : - phed === 'false' ? false : - phed // 已经是布尔值 - break - } - } - result = result.replace(ph, phed) - } - - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = options.rule.range ? Random.string(options.rule.count) : options.template - } - return result - }, - 'function': function(options) { - // ( context, options ) - return options.template.call(options.context.currentContext, options) - }, - 'regexp': function(options) { - var source = '' - - // 'name': /regexp/, - /* jshint -W041 */ - if (options.rule.count == undefined) { - source += options.template.source // regexp.source - } - - // 'name|1-5': /regexp/, - for (var i = 0; i < options.rule.count; i++) { - source += options.template.source - } - - return RE.Handler.gen( - RE.Parser.parse( - source - ) - ) - } -}) - -Handler.extend({ - _all: function() { - var re = {}; - for (var key in Random) re[key.toLowerCase()] = key - return re - }, - // 处理占位符,转换为最终值 - placeholder: function(placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec('') - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = this._all()[lkey], - params = parts && parts[2] || '' - var pathParts = this.splitPathToArray(key) - - // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')') - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/) - } - - // 占位符优先引用数据模板中的属性 - if (obj && (key in obj)) return obj[key] - - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - - // 绝对路径 or 相对路径 - if ( - key.charAt(0) === '/' || - pathParts.length > 1 - ) return this.getValueByKeyPath(key, options) - - // 递归引用数据模板中的属性 - if (templateContext && - (typeof templateContext === 'object') && - (key in templateContext) && - (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = Handler.gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext - }) - return templateContext[key] - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec('') - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = Handler.placeholder(params[i], obj, templateContext, options) - } - } - - var handle = Random[key] || Random[lkey] || Random[okey] - switch (Util.type(handle)) { - case 'array': - // 自动从数组中取一个,例如 @areas - return Random.pick(handle) - case 'function': - // 执行占位符方法(大多数情况) - handle.options = options - var re = handle.apply(Random, params) - if (re === undefined) re = '' // 因为是在字符串中,所以默认为空字符串。 - delete handle.options - return re - } - }, - getValueByKeyPath: function(key, options) { - var originalKey = key - var keyPathParts = this.splitPathToArray(key) - var absolutePathParts = [] - - // 绝对路径 - if (key.charAt(0) === '/') { - absolutePathParts = [options.context.path[0]].concat( - this.normalizePath(keyPathParts) - ) - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0) - absolutePathParts.pop() - absolutePathParts = this.normalizePath( - absolutePathParts.concat(keyPathParts) - ) - - } - } - - try { - key = keyPathParts[keyPathParts.length - 1] - var currentContext = options.context.root - var templateCurrentContext = options.context.templateRoot - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]] - templateCurrentContext = templateCurrentContext[absolutePathParts[i]] - } - // 引用的值已经计算好 - if (currentContext && (key in currentContext)) return currentContext[key] - - // 尚未计算,递归引用数据模板中的属性 - if (templateCurrentContext && - (typeof templateCurrentContext === 'object') && - (key in templateCurrentContext) && - (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext - }) - return templateCurrentContext[key] - } - } catch(err) { } - - return '@' + keyPathParts.join('/') - }, - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function(pathParts) { - var newPathParts = [] - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case '..': - newPathParts.pop() - break - case '.': - break - default: - newPathParts.push(pathParts[i]) - } - } - return newPathParts - }, - splitPathToArray: function(path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1) - if (!parts[0]) parts = parts.slice(1) - return parts; - } -}) - -module.exports = Handler \ No newline at end of file diff --git a/src/mock/parser.js b/src/mock/parser.js deleted file mode 100644 index 7216d706..00000000 --- a/src/mock/parser.js +++ /dev/null @@ -1,71 +0,0 @@ -/* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - -var Constant = require('./constant') -var Random = require('./random/') - -/* jshint -W041 */ -module.exports = { - parse: function(name) { - name = name == undefined ? '' : (name + '') - - var parameters = (name || '').match(Constant.RE_KEY) - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE) - var min = range && range[1] && parseInt(range[1], 10) // || 1 - var max = range && range[2] && parseInt(range[2], 10) // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 - var count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE) - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10) // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10) // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters: parameters, - // 1 min, 2 max - range: range, - min: min, - max: max, - // min-max - count: count, - // 是否有 decimal - decimal: decimal, - dmin: dmin, - dmax: dmax, - // dmin-dimax - dcount: dcount - } - - for (var r in result) { - if (result[r] != undefined) return result - } - - return {} - } -} \ No newline at end of file diff --git a/src/mock/random/address.js b/src/mock/random/address.js deleted file mode 100644 index 42958637..00000000 --- a/src/mock/random/address.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - ## Address -*/ - -var DICT = require('./address_dict') -var REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北'] - -module.exports = { - // 随机生成一个大区。 - region: function() { - return this.pick(REGION) - }, - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - province: function() { - return this.pick(DICT).name - }, - // 随机生成一个(中国)市。 - city: function(prefix) { - var province = this.pick(DICT) - var city = this.pick(province.children) - return prefix ? [province.name, city.name].join(' ') : city.name - }, - // 随机生成一个(中国)县。 - county: function(prefix) { - var province = this.pick(DICT) - var city = this.pick(province.children) - var county = this.pick(city.children) || { - name: '-' - } - return prefix ? [province.name, city.name, county.name].join(' ') : county.name - }, - // 随机生成一个邮政编码(六位数字)。 - zip: function(len) { - var zip = '' - for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9) - return zip - } - - // address: function() {}, - // phone: function() {}, - // areacode: function() {}, - // street: function() {}, - // street_suffixes: function() {}, - // street_suffix: function() {}, - // states: function() {}, - // state: function() {}, -} \ No newline at end of file diff --git a/src/mock/random/address_dict.js b/src/mock/random/address_dict.js deleted file mode 100644 index d017ecd4..00000000 --- a/src/mock/random/address_dict.js +++ /dev/null @@ -1,4068 +0,0 @@ -/* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - - **排序** - - ```js - var map = {} - _.each(_.keys(REGIONS),function(id){ - map[id] = REGIONS[ID] - }) - JSON.stringify(map) - ``` -*/ -var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "471005": "其它区", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" -} - -// id pid/parentId name children -function tree(list) { - var mapped = {} - for (var i = 0, item; i < list.length; i++) { - item = list[i] - if (!item || !item.id) continue - mapped[item.id] = item - } - - var result = [] - for (var ii = 0; ii < list.length; ii++) { - item = list[ii] - - if (!item) continue - /* jshint -W041 */ - if (item.pid == undefined && item.parentId == undefined) { - result.push(item) - continue - } - var parent = mapped[item.pid] || mapped[item.parentId] - if (!parent) continue - if (!parent.children) parent.children = [] - parent.children.push(item) - } - return result -} - -var DICT_FIXED = function() { - var fixed = [] - for (var id in DICT) { - var pid = id.slice(2, 6) === '0000' ? undefined : - id.slice(4, 6) == '00' ? (id.slice(0, 2) + '0000') : - id.slice(0, 4) + '00' - fixed.push({ - id: id, - pid: pid, - name: DICT[id] - }) - } - return tree(fixed) -}() - -module.exports = DICT_FIXED \ No newline at end of file diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js deleted file mode 100644 index 21310fc4..00000000 --- a/src/mock/random/basic.js +++ /dev/null @@ -1,126 +0,0 @@ -/* - ## Basics -*/ -module.exports = { - // 返回一个随机的布尔值。 - boolean: function(min, max, cur) { - if (cur !== undefined) { - min = typeof min !== 'undefined' && !isNaN(min) ? parseInt(min, 10) : 1 - max = typeof max !== 'undefined' && !isNaN(max) ? parseInt(max, 10) : 1 - return Math.random() > 1.0 / (min + max) * min ? !cur : cur - } - - return Math.random() >= 0.5 - }, - bool: function(min, max, cur) { - return this.boolean(min, max, cur) - }, - // 返回一个随机的自然数(大于等于 0 的整数)。 - natural: function(min, max) { - min = typeof min !== 'undefined' ? parseInt(min, 10) : 0 - max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53 - return Math.round(Math.random() * (max - min)) + min - }, - // 返回一个随机的整数。 - integer: function(min, max) { - min = typeof min !== 'undefined' ? parseInt(min, 10) : -9007199254740992 - max = typeof max !== 'undefined' ? parseInt(max, 10) : 9007199254740992 // 2^53 - return Math.round(Math.random() * (max - min)) + min - }, - int: function(min, max) { - return this.integer(min, max) - }, - // 返回一个随机的浮点数。 - float: function(min, max, dmin, dmax) { - dmin = dmin === undefined ? 0 : dmin - dmin = Math.max(Math.min(dmin, 17), 0) - dmax = dmax === undefined ? 17 : dmax - dmax = Math.max(Math.min(dmax, 17), 0) - var ret = this.integer(min, max) + '.'; - for (var i = 0, dcount = this.natural(dmin, dmax); i < dcount; i++) { - ret += ( - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - (i < dcount - 1) ? this.character('number') : this.character('123456789') - ) - } - return parseFloat(ret, 10) - }, - // 返回一个随机字符。 - character: function(pool) { - var pools = { - lower: 'abcdefghijklmnopqrstuvwxyz', - upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - number: '0123456789', - symbol: '!@#$%^&*()[]' - } - pools.alpha = pools.lower + pools.upper - pools['undefined'] = pools.lower + pools.upper + pools.number + pools.symbol - - pool = pools[('' + pool).toLowerCase()] || pool - return pool.charAt(this.natural(0, pool.length - 1)) - }, - char: function(pool) { - return this.character(pool) - }, - // 返回一个随机字符串。 - string: function(pool, min, max) { - var len - switch (arguments.length) { - case 0: // () - len = this.natural(3, 7) - break - case 1: // ( length ) - len = pool - pool = undefined - break - case 2: - // ( pool, length ) - if (typeof arguments[0] === 'string') { - len = min - } else { - // ( min, max ) - len = this.natural(pool, min) - pool = undefined - } - break - case 3: - len = this.natural(min, max) - break - } - - var text = '' - for (var i = 0; i < len; i++) { - text += this.character(pool) - } - - return text - }, - str: function( /*pool, min, max*/ ) { - return this.string.apply(this, arguments) - }, - // 返回一个整型数组。 - range: function(start, stop, step) { - // range( stop ) - if (arguments.length <= 1) { - stop = start || 0; - start = 0; - } - // range( start, stop ) - step = arguments[2] || 1; - - start = +start - stop = +stop - step = +step - - var len = Math.max(Math.ceil((stop - start) / step), 0); - var idx = 0; - var range = new Array(len); - - while (idx < len) { - range[idx++] = start; - start += step; - } - - return range; - } -} \ No newline at end of file diff --git a/src/mock/random/color.js b/src/mock/random/color.js deleted file mode 100644 index a2630488..00000000 --- a/src/mock/random/color.js +++ /dev/null @@ -1,137 +0,0 @@ -/* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() -*/ - -var Convert = require('./color_convert') -var DICT = require('./color_dict') - -module.exports = { - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 - color: function(name) { - if (name || DICT[name]) return DICT[name].nicer - return this.hex() - }, - // #DAC0DE - hex: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2]) - return hex - }, - // rgb(128,255,255) - rgb: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - return 'rgb(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ')' - }, - // rgba(128,255,255,0.3) - rgba: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - return 'rgba(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ', ' + - Math.random().toFixed(2) + ')' - }, - // hsl(300,80%,90%) - hsl: function() { - var hsv = this._goldenRatioColor() - var hsl = Convert.hsv2hsl(hsv) - return 'hsl(' + - parseInt(hsl[0], 10) + ', ' + - parseInt(hsl[1], 10) + ', ' + - parseInt(hsl[2], 10) + ')' - }, - // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - // https://github.com/devongovett/color-generator/blob/master/index.js - // 随机生成一个有吸引力的颜色。 - _goldenRatioColor: function(saturation, value) { - this._goldenRatio = 0.618033988749895 - this._hue = this._hue || Math.random() - this._hue += this._goldenRatio - this._hue %= 1 - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return [ - this._hue * 360, - saturation * 100, - value * 100 - ] - } -} \ No newline at end of file diff --git a/src/mock/random/color_convert.js b/src/mock/random/color_convert.js deleted file mode 100644 index 333d6ff0..00000000 --- a/src/mock/random/color_convert.js +++ /dev/null @@ -1,177 +0,0 @@ -/* - ## Color Convert - - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 -*/ -// https://github.com/harthur/color-convert/blob/master/conversions.js -module.exports = { - rgb2hsl: function rgb2hsl(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, l; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - l = (min + max) / 2; - - if (max == min) - s = 0; - else if (l <= 0.5) - s = delta / (max + min); - else - s = delta / (2 - max - min); - - return [h, s * 100, l * 100]; - }, - rgb2hsv: function rgb2hsv(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, v; - - if (max === 0) - s = 0; - else - s = (delta / max * 1000) / 10; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - v = ((max / 255) * 1000) / 10; - - return [h, s, v]; - }, - hsl2rgb: function hsl2rgb(hsl) { - var h = hsl[0] / 360, - s = hsl[1] / 100, - l = hsl[2] / 100, - t1, t2, t3, rgb, val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) - t2 = l * (1 + s); - else - t2 = l + s - l * s; - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) t3++; - if (t3 > 1) t3--; - - if (6 * t3 < 1) - val = t1 + (t2 - t1) * 6 * t3; - else if (2 * t3 < 1) - val = t2; - else if (3 * t3 < 2) - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - else - val = t1; - - rgb[i] = val * 255; - } - - return rgb; - }, - hsl2hsv: function hsl2hsv(hsl) { - var h = hsl[0], - s = hsl[1] / 100, - l = hsl[2] / 100, - sv, v; - l *= 2; - s *= (l <= 1) ? l : 2 - l; - v = (l + s) / 2; - sv = (2 * s) / (l + s); - return [h, sv * 100, v * 100]; - }, - hsv2rgb: function hsv2rgb(hsv) { - var h = hsv[0] / 60 - var s = hsv[1] / 100 - var v = hsv[2] / 100 - var hi = Math.floor(h) % 6 - - var f = h - Math.floor(h) - var p = 255 * v * (1 - s) - var q = 255 * v * (1 - (s * f)) - var t = 255 * v * (1 - (s * (1 - f))) - - v = 255 * v - - switch (hi) { - case 0: - return [v, t, p] - case 1: - return [q, v, p] - case 2: - return [p, v, t] - case 3: - return [p, q, v] - case 4: - return [t, p, v] - case 5: - return [v, p, q] - } - }, - hsv2hsl: function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, l; - - l = (2 - s) * v; - sl = s * v; - sl /= (l <= 1) ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; - }, - // http://www.140byt.es/keywords/color - rgb2hex: function( - a, // red, as a number from 0 to 255 - b, // green, as a number from 0 to 255 - c // blue, as a number from 0 to 255 - ) { - return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) - }, - hex2rgb: function( - a // take a "#xxxxxx" hex string, - ) { - a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0; - return [a >> 16, a >> 8 & 255, a & 255] - } -} \ No newline at end of file diff --git a/src/mock/random/color_dict.js b/src/mock/random/color_dict.js deleted file mode 100644 index daa2f608..00000000 --- a/src/mock/random/color_dict.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) -*/ -module.exports = { - // name value nicer - navy: { - value: '#000080', - nicer: '#001F3F' - }, - blue: { - value: '#0000ff', - nicer: '#0074D9' - }, - aqua: { - value: '#00ffff', - nicer: '#7FDBFF' - }, - teal: { - value: '#008080', - nicer: '#39CCCC' - }, - olive: { - value: '#008000', - nicer: '#3D9970' - }, - green: { - value: '#008000', - nicer: '#2ECC40' - }, - lime: { - value: '#00ff00', - nicer: '#01FF70' - }, - yellow: { - value: '#ffff00', - nicer: '#FFDC00' - }, - orange: { - value: '#ffa500', - nicer: '#FF851B' - }, - red: { - value: '#ff0000', - nicer: '#FF4136' - }, - maroon: { - value: '#800000', - nicer: '#85144B' - }, - fuchsia: { - value: '#ff00ff', - nicer: '#F012BE' - }, - purple: { - value: '#800080', - nicer: '#B10DC9' - }, - silver: { - value: '#c0c0c0', - nicer: '#DDDDDD' - }, - gray: { - value: '#808080', - nicer: '#AAAAAA' - }, - black: { - value: '#000000', - nicer: '#111111' - }, - white: { - value: '#FFFFFF', - nicer: '#FFFFFF' - } -} \ No newline at end of file diff --git a/src/mock/random/date.js b/src/mock/random/date.js deleted file mode 100644 index 0c3799ad..00000000 --- a/src/mock/random/date.js +++ /dev/null @@ -1,141 +0,0 @@ -/* - ## Date -*/ -var patternLetters = { - yyyy: 'getFullYear', - yy: function(date) { - return ('' + date.getFullYear()).slice(2) - }, - y: 'yy', - - MM: function(date) { - var m = date.getMonth() + 1 - return m < 10 ? '0' + m : m - }, - M: function(date) { - return date.getMonth() + 1 - }, - - dd: function(date) { - var d = date.getDate() - return d < 10 ? '0' + d : d - }, - d: 'getDate', - - HH: function(date) { - var h = date.getHours() - return h < 10 ? '0' + h : h - }, - H: 'getHours', - hh: function(date) { - var h = date.getHours() % 12 - return h < 10 ? '0' + h : h - }, - h: function(date) { - return date.getHours() % 12 - }, - - mm: function(date) { - var m = date.getMinutes() - return m < 10 ? '0' + m : m - }, - m: 'getMinutes', - - ss: function(date) { - var s = date.getSeconds() - return s < 10 ? '0' + s : s - }, - s: 'getSeconds', - - SS: function(date) { - var ms = date.getMilliseconds() - return ms < 10 && '00' + ms || ms < 100 && '0' + ms || ms - }, - S: 'getMilliseconds', - - A: function(date) { - return date.getHours() < 12 ? 'AM' : 'PM' - }, - a: function(date) { - return date.getHours() < 12 ? 'am' : 'pm' - }, - T: 'getTime' -} -module.exports = { - // 日期占位符集合。 - _patternLetters: patternLetters, - // 日期占位符正则。 - _rformat: new RegExp((function() { - var re = [] - for (var i in patternLetters) re.push(i) - return '(' + re.join('|') + ')' - })(), 'g'), - // 格式化日期。 - _formatDate: function(date, format) { - return format.replace(this._rformat, function creatNewSubString($0, flag) { - return typeof patternLetters[flag] === 'function' ? patternLetters[flag](date) : - patternLetters[flag] in patternLetters ? creatNewSubString($0, patternLetters[flag]) : - date[patternLetters[flag]]() - }) - }, - // 生成一个随机的 Date 对象。 - _randomDate: function(min, max) { // min, max - min = min === undefined ? new Date(0) : min - max = max === undefined ? new Date() : max - return new Date(Math.random() * (max.getTime() - min.getTime())) - }, - // 返回一个随机的日期字符串。 - date: function(format) { - format = format || 'yyyy-MM-dd' - return this._formatDate(this._randomDate(), format) - }, - // 返回一个随机的时间字符串。 - time: function(format) { - format = format || 'HH:mm:ss' - return this._formatDate(this._randomDate(), format) - }, - // 返回一个随机的日期和时间字符串。 - datetime: function(format) { - format = format || 'yyyy-MM-dd HH:mm:ss' - return this._formatDate(this._randomDate(), format) - }, - // 返回当前的日期和时间字符串。 - now: function(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit - unit = '' - } - } - unit = (unit || '').toLowerCase() - format = format || 'yyyy-MM-dd HH:mm:ss' - - var date = new Date() - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case 'year': - date.setMonth(0) - case 'month': - date.setDate(1) - case 'week': - case 'day': - date.setHours(0) - case 'hour': - date.setMinutes(0) - case 'minute': - date.setSeconds(0) - case 'second': - date.setMilliseconds(0) - } - switch (unit) { - case 'week': - date.setDate(date.getDate() - date.getDay()) - } - - return this._formatDate(date, format) - } -} \ No newline at end of file diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js deleted file mode 100644 index 98981984..00000000 --- a/src/mock/random/helper.js +++ /dev/null @@ -1,116 +0,0 @@ -/* - ## Helpers -*/ - -var Util = require('../util') - -module.exports = { - // 把字符串的第一个字母转换为大写。 - capitalize: function(word) { - return (word + '').charAt(0).toUpperCase() + (word + '').substr(1) - }, - // 把字符串转换为大写。 - upper: function(str) { - return (str + '').toUpperCase() - }, - // 把字符串转换为小写。 - lower: function(str) { - return (str + '').toLowerCase() - }, - // 从数组中随机选取一个元素,并返回。 - pick: function pick(arr, min, max) { - // pick( item1, item2 ... ) - if (!Util.isArray(arr)) { - arr = [].slice.call(arguments) - min = 1 - max = 1 - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1 - - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min - } - - if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)] - - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max) - - // 通过参数个数判断方法签名,扩展性太差!#90 - // switch (arguments.length) { - // case 1: - // // pick( [ item1, item2 ... ] ) - // return arr[this.natural(0, arr.length - 1)] - // case 2: - // // pick( [ item1, item2 ... ], count ) - // max = min - // /* falls through */ - // case 3: - // // pick( [ item1, item2 ... ], min, max ) - // return this.shuffle(arr, min, max) - // } - }, - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) - */ - shuffle: function shuffle(arr, min, max) { - arr = arr || [] - var old = arr.slice(0), - result = [], - index = 0, - length = old.length; - for (var i = 0; i < length; i++) { - index = this.natural(0, old.length - 1) - result.push(old[index]) - old.splice(index, 1) - } - switch (arguments.length) { - case 0: - case 1: - return result - case 2: - max = min - /* falls through */ - case 3: - min = parseInt(min, 10) - max = parseInt(max, 10) - return result.slice(0, this.natural(min, max)) - } - }, - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - order: function order(array) { - order.cache = order.cache || {} - - if (arguments.length > 1) array = [].slice.call(arguments, 0) - - // options.context.path/templatePath - var options = order.options - var templatePath = options.context.templatePath.join('.') - - var cache = ( - order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array - } - ) - - return cache.array[cache.index++ % cache.array.length] - } -} \ No newline at end of file diff --git a/src/mock/random/image.js b/src/mock/random/image.js deleted file mode 100644 index 9eb19235..00000000 --- a/src/mock/random/image.js +++ /dev/null @@ -1,282 +0,0 @@ -/* global document */ -/* - ## Image -*/ -module.exports = { - // 常见的广告宽高 - _adSize: [ - '300x250', '250x250', '240x400', '336x280', '180x150', - '720x300', '468x60', '234x60', '88x31', '120x90', - '120x60', '120x240', '125x125', '728x90', '160x600', - '120x600', '300x600' - ], - // 常见的屏幕宽高 - _screenSize: [ - '320x200', '320x240', '640x480', '800x480', '800x480', - '1024x600', '1024x768', '1280x800', '1440x900', '1920x1200', - '2560x1600' - ], - // 常见的视频宽高 - _videoSize: ['720x480', '768x576', '1280x720', '1920x1080'], - /* - 生成一个随机的图片地址。 - - 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - image: function(size, background, foreground, format, text) { - // Random.image( size, background, foreground, text ) - if (arguments.length === 4) { - text = format - format = undefined - } - // Random.image( size, background, text ) - if (arguments.length === 3) { - text = foreground - foreground = undefined - } - // Random.image() - if (!size) size = this.pick(this._adSize) - - if (background && ~background.indexOf('#')) background = background.slice(1) - if (foreground && ~foreground.indexOf('#')) foreground = foreground.slice(1) - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return 'http://dummyimage.com/' + size + - (background ? '/' + background : '') + - (foreground ? '/' + foreground : '') + - (format ? '.' + format : '') + - (text ? '&text=' + text : '') - }, - img: function() { - return this.image.apply(this, arguments) - }, - - /* - BrandColors - http://brandcolors.net/ - A collection of major brand color codes curated by Galen Gidman. - 大牌公司的颜色集合 - - // 获取品牌和颜色 - $('h2').each(function(index, item){ - item = $(item) - console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') - }) - */ - _brandColors: { - '4ormat': '#fb0a2a', - '500px': '#02adea', - 'About.me (blue)': '#00405d', - 'About.me (yellow)': '#ffcc33', - 'Addvocate': '#ff6138', - 'Adobe': '#ff0000', - 'Aim': '#fcd20b', - 'Amazon': '#e47911', - 'Android': '#a4c639', - 'Angie\'s List': '#7fbb00', - 'AOL': '#0060a3', - 'Atlassian': '#003366', - 'Behance': '#053eff', - 'Big Cartel': '#97b538', - 'bitly': '#ee6123', - 'Blogger': '#fc4f08', - 'Boeing': '#0039a6', - 'Booking.com': '#003580', - 'Carbonmade': '#613854', - 'Cheddar': '#ff7243', - 'Code School': '#3d4944', - 'Delicious': '#205cc0', - 'Dell': '#3287c1', - 'Designmoo': '#e54a4f', - 'Deviantart': '#4e6252', - 'Designer News': '#2d72da', - 'Devour': '#fd0001', - 'DEWALT': '#febd17', - 'Disqus (blue)': '#59a3fc', - 'Disqus (orange)': '#db7132', - 'Dribbble': '#ea4c89', - 'Dropbox': '#3d9ae8', - 'Drupal': '#0c76ab', - 'Dunked': '#2a323a', - 'eBay': '#89c507', - 'Ember': '#f05e1b', - 'Engadget': '#00bdf6', - 'Envato': '#528036', - 'Etsy': '#eb6d20', - 'Evernote': '#5ba525', - 'Fab.com': '#dd0017', - 'Facebook': '#3b5998', - 'Firefox': '#e66000', - 'Flickr (blue)': '#0063dc', - 'Flickr (pink)': '#ff0084', - 'Forrst': '#5b9a68', - 'Foursquare': '#25a0ca', - 'Garmin': '#007cc3', - 'GetGlue': '#2d75a2', - 'Gimmebar': '#f70078', - 'GitHub': '#171515', - 'Google Blue': '#0140ca', - 'Google Green': '#16a61e', - 'Google Red': '#dd1812', - 'Google Yellow': '#fcca03', - 'Google+': '#dd4b39', - 'Grooveshark': '#f77f00', - 'Groupon': '#82b548', - 'Hacker News': '#ff6600', - 'HelloWallet': '#0085ca', - 'Heroku (light)': '#c7c5e6', - 'Heroku (dark)': '#6567a5', - 'HootSuite': '#003366', - 'Houzz': '#73ba37', - 'HTML5': '#ec6231', - 'IKEA': '#ffcc33', - 'IMDb': '#f3ce13', - 'Instagram': '#3f729b', - 'Intel': '#0071c5', - 'Intuit': '#365ebf', - 'Kickstarter': '#76cc1e', - 'kippt': '#e03500', - 'Kodery': '#00af81', - 'LastFM': '#c3000d', - 'LinkedIn': '#0e76a8', - 'Livestream': '#cf0005', - 'Lumo': '#576396', - 'Mixpanel': '#a086d3', - 'Meetup': '#e51937', - 'Nokia': '#183693', - 'NVIDIA': '#76b900', - 'Opera': '#cc0f16', - 'Path': '#e41f11', - 'PayPal (dark)': '#1e477a', - 'PayPal (light)': '#3b7bbf', - 'Pinboard': '#0000e6', - 'Pinterest': '#c8232c', - 'PlayStation': '#665cbe', - 'Pocket': '#ee4056', - 'Prezi': '#318bff', - 'Pusha': '#0f71b4', - 'Quora': '#a82400', - 'QUOTE.fm': '#66ceff', - 'Rdio': '#008fd5', - 'Readability': '#9c0000', - 'Red Hat': '#cc0000', - 'Resource': '#7eb400', - 'Rockpack': '#0ba6ab', - 'Roon': '#62b0d9', - 'RSS': '#ee802f', - 'Salesforce': '#1798c1', - 'Samsung': '#0c4da2', - 'Shopify': '#96bf48', - 'Skype': '#00aff0', - 'Snagajob': '#f47a20', - 'Softonic': '#008ace', - 'SoundCloud': '#ff7700', - 'Space Box': '#f86960', - 'Spotify': '#81b71a', - 'Sprint': '#fee100', - 'Squarespace': '#121212', - 'StackOverflow': '#ef8236', - 'Staples': '#cc0000', - 'Status Chart': '#d7584f', - 'Stripe': '#008cdd', - 'StudyBlue': '#00afe1', - 'StumbleUpon': '#f74425', - 'T-Mobile': '#ea0a8e', - 'Technorati': '#40a800', - 'The Next Web': '#ef4423', - 'Treehouse': '#5cb868', - 'Trulia': '#5eab1f', - 'Tumblr': '#34526f', - 'Twitch.tv': '#6441a5', - 'Twitter': '#00acee', - 'TYPO3': '#ff8700', - 'Ubuntu': '#dd4814', - 'Ustream': '#3388ff', - 'Verizon': '#ef1d1d', - 'Vimeo': '#86c9ef', - 'Vine': '#00a478', - 'Virb': '#06afd8', - 'Virgin Media': '#cc0000', - 'Wooga': '#5b009c', - 'WordPress (blue)': '#21759b', - 'WordPress (orange)': '#d54e21', - 'WordPress (grey)': '#464646', - 'Wunderlist': '#2b88d9', - 'XBOX': '#9bc848', - 'XING': '#126567', - 'Yahoo!': '#720e9e', - 'Yandex': '#ffcc00', - 'Yelp': '#c41200', - 'YouTube': '#c4302b', - 'Zalongo': '#5498dc', - 'Zendesk': '#78a300', - 'Zerply': '#9dcc7a', - 'Zootool': '#5e8b1d' - }, - _brandNames: function() { - var brands = []; - for (var b in this._brandColors) { - brands.push(b) - } - return brands - }, - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - dataImage: function(size, text) { - var canvas - if (typeof document !== 'undefined') { - canvas = document.createElement('canvas') - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require('canvas') - canvas = new Canvas() - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d") - if (!canvas || !ctx) return '' - - if (!size) size = this.pick(this._adSize) - text = text !== undefined ? text : size - - size = size.split('x') - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = this._brandColors[this.pick(this._brandNames())], - foreground = '#FFF', - text_height = 14, - font = 'sans-serif'; - - canvas.width = width - canvas.height = height - ctx.textAlign = 'center' - ctx.textBaseline = 'middle' - ctx.fillStyle = background - ctx.fillRect(0, 0, width, height) - ctx.fillStyle = foreground - ctx.font = 'bold ' + text_height + 'px ' + font - ctx.fillText(text, (width / 2), (height / 2), width) - return canvas.toDataURL('image/png') - } -} \ No newline at end of file diff --git a/src/mock/random/index.js b/src/mock/random/index.js deleted file mode 100644 index 93270602..00000000 --- a/src/mock/random/index.js +++ /dev/null @@ -1,24 +0,0 @@ -/* - ## Mock.Random - - 工具类,用于生成各种随机数据。 -*/ - -var Util = require('../util') - -var Random = { - extend: Util.extend -} - -Random.extend(require('./basic')) -Random.extend(require('./date')) -Random.extend(require('./image')) -Random.extend(require('./color')) -Random.extend(require('./text')) -Random.extend(require('./name')) -Random.extend(require('./web')) -Random.extend(require('./address')) -Random.extend(require('./helper')) -Random.extend(require('./misc')) - -module.exports = Random \ No newline at end of file diff --git a/src/mock/random/misc.js b/src/mock/random/misc.js deleted file mode 100644 index 3763dae2..00000000 --- a/src/mock/random/misc.js +++ /dev/null @@ -1,105 +0,0 @@ -/* - ## Miscellaneous -*/ -var DICT = require('./address_dict') -module.exports = { - // Dice - d4: function() { - return this.natural(1, 4) - }, - d6: function() { - return this.natural(1, 6) - }, - d8: function() { - return this.natural(1, 8) - }, - d12: function() { - return this.natural(1, 12) - }, - d20: function() { - return this.natural(1, 20) - }, - d100: function() { - return this.natural(1, 100) - }, - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - */ - guid: function() { - var pool = "abcdefABCDEF1234567890", - guid = this.string(pool, 8) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 12); - return guid - }, - uuid: function() { - return this.guid() - }, - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - id: function() { - var id, - sum = 0, - rank = [ - "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" - ], - last = [ - "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" - ] - - id = this.pick(DICT).id + - this.date('yyyyMMdd') + - this.string('number', 3) - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id - }, - - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - increment: function() { - var key = 0 - return function(step) { - return key += (+step || 1) // step? - } - }(), - inc: function(step) { - return this.increment(step) - } -} \ No newline at end of file diff --git a/src/mock/random/name.js b/src/mock/random/name.js deleted file mode 100644 index e4989f45..00000000 --- a/src/mock/random/name.js +++ /dev/null @@ -1,87 +0,0 @@ -/* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) -*/ -module.exports = { - // 随机生成一个常见的英文名。 - first: function() { - var names = [ - // male - "James", "John", "Robert", "Michael", "William", - "David", "Richard", "Charles", "Joseph", "Thomas", - "Christopher", "Daniel", "Paul", "Mark", "Donald", - "George", "Kenneth", "Steven", "Edward", "Brian", - "Ronald", "Anthony", "Kevin", "Jason", "Matthew", - "Gary", "Timothy", "Jose", "Larry", "Jeffrey", - "Frank", "Scott", "Eric" - ].concat([ - // female - "Mary", "Patricia", "Linda", "Barbara", "Elizabeth", - "Jennifer", "Maria", "Susan", "Margaret", "Dorothy", - "Lisa", "Nancy", "Karen", "Betty", "Helen", - "Sandra", "Donna", "Carol", "Ruth", "Sharon", - "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", - "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", - "Brenda", "Amy", "Anna" - ]) - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓。 - last: function() { - var names = [ - "Smith", "Johnson", "Williams", "Brown", "Jones", - "Miller", "Davis", "Garcia", "Rodriguez", "Wilson", - "Martinez", "Anderson", "Taylor", "Thomas", "Hernandez", - "Moore", "Martin", "Jackson", "Thompson", "White", - "Lopez", "Lee", "Gonzalez", "Harris", "Clark", - "Lewis", "Robinson", "Walker", "Perez", "Hall", - "Young", "Allen" - ] - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓名。 - name: function(middle) { - return this.first() + ' ' + - (middle ? this.first() + ' ' : '') + - this.last() - }, - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - cfirst: function() { - var names = ( - '王 李 张 刘 陈 杨 赵 黄 周 吴 ' + - '徐 孙 胡 朱 高 林 何 郭 马 罗 ' + - '梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' + - '程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' + - '苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' + - '余 潘 杜 戴 夏 锺 汪 田 任 姜 ' + - '范 方 石 姚 谭 廖 邹 熊 金 陆 ' + - '郝 孔 白 崔 康 毛 邱 秦 江 史 ' + - '顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' + - '尹 黎 易 常 武 乔 贺 赖 龚 文' - ).split(' ') - return this.pick(names) - }, - /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - clast: function() { - var names = ( - '伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' + - '洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' + - '平 刚 桂英' - ).split(' ') - return this.pick(names) - }, - // 随机生成一个常见的中文姓名。 - cname: function() { - return this.cfirst() + this.clast() - } -} \ No newline at end of file diff --git a/src/mock/random/text.js b/src/mock/random/text.js deleted file mode 100644 index 98fb5974..00000000 --- a/src/mock/random/text.js +++ /dev/null @@ -1,121 +0,0 @@ -/* - ## Text - - http://www.lipsum.com/ -*/ -var Basic = require('./basic') -var Helper = require('./helper') - -function range(defaultMin, defaultMax, min, max) { - return min === undefined ? Basic.natural(defaultMin, defaultMax) : // () - max === undefined ? min : // ( len ) - Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max ) -} - -module.exports = { - // 随机生成一段文本。 - paragraph: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.sentence()) - } - return result.join(' ') - }, - // - cparagraph: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.csentence()) - } - return result.join('') - }, - // 随机生成一个句子,第一个单词的首字母大写。 - sentence: function(min, max) { - var len = range(12, 18, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.word()) - } - return Helper.capitalize(result.join(' ')) + '.' - }, - // 随机生成一个中文句子。 - csentence: function(min, max) { - var len = range(12, 18, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.cword()) - } - - return result.join('') + '。' - }, - // 随机生成一个单词。 - word: function(min, max) { - var len = range(3, 10, min, max) - var result = ''; - for (var i = 0; i < len; i++) { - result += Basic.character('lower') - } - return result - }, - // 随机生成一个或多个汉字。 - cword: function(pool, min, max) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞' - - var len - switch (arguments.length) { - case 0: // () - pool = DICT_KANZI - len = 1 - break - case 1: // ( pool ) - if (typeof arguments[0] === 'string') { - len = 1 - } else { - // ( length ) - len = pool - pool = DICT_KANZI - } - break - case 2: - // ( pool, length ) - if (typeof arguments[0] === 'string') { - len = min - } else { - // ( min, max ) - len = this.natural(pool, min) - pool = DICT_KANZI - } - break - case 3: - len = this.natural(min, max) - break - } - - var result = '' - for (var i = 0; i < len; i++) { - result += pool.charAt(this.natural(0, pool.length - 1)) - } - return result - }, - // 随机生成一句标题,其中每个单词的首字母大写。 - title: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.capitalize(this.word())) - } - return result.join(' ') - }, - // 随机生成一句中文标题。 - ctitle: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.cword()) - } - return result.join('') - } -} \ No newline at end of file diff --git a/src/mock/random/web.js b/src/mock/random/web.js deleted file mode 100644 index d02943d8..00000000 --- a/src/mock/random/web.js +++ /dev/null @@ -1,76 +0,0 @@ -/* - ## Web -*/ -module.exports = { - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - url: function(protocol, host) { - return (protocol || this.protocol()) + '://' + // protocol? - (host || this.domain()) + // host? - '/' + this.word() - }, - // 随机生成一个 URL 协议。 - protocol: function() { - return this.pick( - // 协议簇 - 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ') - ) - }, - // 随机生成一个域名。 - domain: function(tld) { - return this.word() + '.' + (tld || this.tld()) - }, - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - tld: function() { // Top Level Domain - return this.pick( - ( - // 域名后缀 - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' - ).split(' ') - ) - }, - // 随机生成一个邮件地址。 - email: function(domain) { - return this.character('lower') + '.' + this.word() + '@' + - ( - domain || - (this.word() + '.' + this.tld()) - ) - // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld() - // return this.word() + '@' + (domain || this.domain()) - }, - // 随机生成一个 IP 地址。 - ip: function() { - return this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) - } -} \ No newline at end of file diff --git a/src/mock/regexp/handler.js b/src/mock/regexp/handler.js deleted file mode 100644 index 910a995a..00000000 --- a/src/mock/regexp/handler.js +++ /dev/null @@ -1,392 +0,0 @@ -/* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ - -var Util = require('../util') -var Random = require('../random/') - /* - - */ -var Handler = { - extend: Util.extend -} - -// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart -/*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] -}*/ - -// ASCII printable code chart -// var LOWER = 'abcdefghijklmnopqrstuvwxyz' -// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -// var NUMBER = '0123456789' -// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' -var LOWER = ascii(97, 122) -var UPPER = ascii(65, 90) -var NUMBER = ascii(48, 57) -var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126) // 排除 95 _ ascii(91, 94) + ascii(96, 96) -var PRINTABLE = ascii(32, 126) -var SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029' -var CHARACTER_CLASSES = { - '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) - '\\W': OTHER.replace('_', ''), - '\\s': SPACE, - '\\S': function() { - var result = PRINTABLE - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], '') - } - return result - }(), - '\\d': NUMBER, - '\\D': LOWER + UPPER + OTHER -} - -function ascii(from, to) { - var result = '' - for (var i = from; i <= to; i++) { - result += String.fromCharCode(i) - } - return result -} - -// var ast = RegExpParser.parse(regexp.source) -Handler.gen = function(node, result, cache) { - cache = cache || { - guid: 1 - } - return Handler[node.type] ? Handler[node.type](node, result, cache) : - Handler.token(node, result, cache) -} - -Handler.extend({ - /* jshint unused:false */ - token: function(node, result, cache) { - switch (node.type) { - case 'start': - case 'end': - return '' - case 'any-character': - return Random.character() - case 'backspace': - return '' - case 'word-boundary': // TODO - return '' - case 'non-word-boundary': // TODO - break - case 'digit': - return Random.pick( - NUMBER.split('') - ) - case 'non-digit': - return Random.pick( - (LOWER + UPPER + OTHER).split('') - ) - case 'form-feed': - break - case 'line-feed': - return node.body || node.text - case 'carriage-return': - break - case 'white-space': - return Random.pick( - SPACE.split('') - ) - case 'non-white-space': - return Random.pick( - (LOWER + UPPER + NUMBER).split('') - ) - case 'tab': - break - case 'vertical-tab': - break - case 'word': // \w [a-zA-Z0-9] - return Random.pick( - (LOWER + UPPER + NUMBER).split('') - ) - case 'non-word': // \W [^a-zA-Z0-9] - return Random.pick( - OTHER.replace('_', '').split('') - ) - case 'null-character': - break - } - return node.body || node.text - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function(node, result, cache) { - // node.left/right {} - return this.gen( - Random.boolean() ? node.left : node.right, - result, - cache - ) - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function(node, result, cache) { - result = '' - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache) - } - return result - }, - // () - 'capture-group': function(node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache) - cache[cache.guid++] = result - return result - }, - // (?:...) - 'non-capture-group': function(node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache) - }, - // (?=p) - 'positive-lookahead': function(node, result, cache) { - // node.body - return this.gen(node.body, result, cache) - }, - // (?!p) - 'negative-lookahead': function(node, result, cache) { - // node.body - return '' - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function(node, result, cache) { - result = '' - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache) - } - return result - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function(node, result, cache) { - var min = Math.max(node.min, 0) - var max = isFinite(node.max) ? node.max : - min + Random.integer(3, 7) - return Random.integer(min, max) - }, - /* - - */ - charset: function(node, result, cache) { - // node.invert - if (node.invert) return this['invert-charset'](node, result, cache) - - // node.body [] - var literal = Random.pick(node.body) - return this.gen(literal, result, cache) - }, - 'invert-charset': function(node, result, cache) { - var pool = PRINTABLE - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i] - switch (item.type) { - case 'literal': - pool = pool.replace(item.body, '') - break - case 'range': - var min = this.gen(item.start, result, cache).charCodeAt() - var max = this.gen(item.end, result, cache).charCodeAt() - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), '') - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text] - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], '') - } - } - } - } - return Random.pick(pool.split('')) - }, - range: function(node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt() - var max = this.gen(node.end, result, cache).charCodeAt() - return String.fromCharCode( - Random.integer(min, max) - ) - }, - literal: function(node, result, cache) { - return node.escaped ? node.body : node.text - }, - // Unicode \u - unicode: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 16) - ) - }, - // 十六进制 \xFF - hex: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 16) - ) - }, - // 八进制 \0 - octal: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 8) - ) - }, - // 反向引用 - 'back-reference': function(node, result, cache) { - return cache[node.code] || '' - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: function() { - var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' ') - var CONTROL_CHARACTER_UNICODE = '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split(' ') - var map = {} - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i] - } - return map - }(), - 'control-character': function(node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code] - } -}) - -module.exports = Handler \ No newline at end of file diff --git a/src/mock/regexp/index.js b/src/mock/regexp/index.js deleted file mode 100644 index 4d2d02e0..00000000 --- a/src/mock/regexp/index.js +++ /dev/null @@ -1,6 +0,0 @@ -var Parser = require('./parser') -var Handler = require('./handler') -module.exports = { - Parser: Parser, - Handler: Handler -} \ No newline at end of file diff --git a/src/mock/regexp/parser.js b/src/mock/regexp/parser.js deleted file mode 100644 index 03906dd1..00000000 --- a/src/mock/regexp/parser.js +++ /dev/null @@ -1,570 +0,0 @@ -// https://github.com/nuysoft/regexp -// forked from https://github.com/ForbesLindesay/regexp - -function parse(n) { - if ("string" != typeof n) { - var l = new TypeError("The regexp to parse must be represented as a string."); - throw l; - } - return index = 1, cgs = {}, parser.parse(n); -} - -function Token(n) { - this.type = n, this.offset = Token.offset(), this.text = Token.text(); -} - -function Alternate(n, l) { - Token.call(this, "alternate"), this.left = n, this.right = l; -} - -function Match(n) { - Token.call(this, "match"), this.body = n.filter(Boolean); -} - -function Group(n, l) { - Token.call(this, n), this.body = l; -} - -function CaptureGroup(n) { - Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), - this.body = n; -} - -function Quantified(n, l) { - Token.call(this, "quantified"), this.body = n, this.quantifier = l; -} - -function Quantifier(n, l) { - Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0; -} - -function CharSet(n, l) { - Token.call(this, "charset"), this.invert = n, this.body = l; -} - -function CharacterRange(n, l) { - Token.call(this, "range"), this.start = n, this.end = l; -} - -function Literal(n) { - Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text; -} - -function Unicode(n) { - Token.call(this, "unicode"), this.code = n.toUpperCase(); -} - -function Hex(n) { - Token.call(this, "hex"), this.code = n.toUpperCase(); -} - -function Octal(n) { - Token.call(this, "octal"), this.code = n.toUpperCase(); -} - -function BackReference(n) { - Token.call(this, "back-reference"), this.code = n.toUpperCase(); -} - -function ControlCharacter(n) { - Token.call(this, "control-character"), this.code = n.toUpperCase(); -} - -var parser = function() { - function n(n, l) { - function u() { - this.constructor = n; - } - u.prototype = l.prototype, n.prototype = new u(); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) { - return "\\x0" + l(n); - }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) { - return "\\x" + l(n); - }).replace(/[\u0180-\u0FFF]/g, function(n) { - return "\\u0" + l(n); - }).replace(/[\u1080-\uFFFF]/g, function(n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; - } - this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, - this.name = "SyntaxError", this.message = e(n, l); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, - l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, - l.seenCR = !0) : (l.column++, l.seenCR = !1); - } - return Mt !== l && (Mt > l && (Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }), u(Dt, Mt, l), Mt = l), Dt; - } - function e(n) { - Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, - qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], - t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, - u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, - l = il), l; - } - function i() { - var n, l, u, t, r; - if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), - Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), - null === r && (r = a()); - null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); - } else qt = n, n = il; else qt = n, n = il; - return n; - } - function a() { - var n; - return n = x(), null === n && (n = Q(), null === n && (n = B())), n; - } - function f() { - var l, u; - return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), - null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; - } - function s() { - var l, u; - return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), - null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; - } - function h() { - var n, l, u; - return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; - } - function d() { - var n, l, u; - return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, - l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, - n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; - } - function p() { - var n; - return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), - null === n && (n = g(), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, - 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, - qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function w() { - var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, - 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function A() { - var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, - 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function C() { - var l, u; - return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), - null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; - } - function g() { - var l, u; - return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), - null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; - } - function b() { - var l, u; - return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), - null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), - l; - } - function T() { - var l, u, t; - if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, - 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), - qt++) : (t = null, 0 === Wt && e(Il)); else u = il; - return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, - l; - } - function x() { - var l, u, t, r; - return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), - null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), - null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), - null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function y() { - var n, l; - return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, - n = l) : n = l, n; - } - function m() { - var l, u, t; - return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function R() { - var l, u, t; - return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function F() { - var l, u, t; - return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function Q() { - var l, u, t, r, o; - if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), - null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), - null === t && (t = al), null !== t) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), - null === o && (o = U()); - null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), - null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il); - } else qt = l, l = il; else qt = l, l = il; - return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, - 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, - null === l && (u = null, 0 === Wt && e(du)), l; - } - function U() { - var n, l; - return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), - n; - } - function E() { - var l, u; - return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), - null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; - } - function G() { - var n; - return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), - null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), - null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), - null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), - null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; - } - function B() { - var n; - return n = j(), null === n && (n = q(), null === n && (n = $())), n; - } - function j() { - var l, u; - return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), - null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; - } - function $() { - var l, u; - return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, - 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, - Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; - } - function q() { - var n; - return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), - null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), - null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), - null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), - null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), - n; - } - function L() { - var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; - } - function M() { - var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; - } - function D() { - var l, u; - return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), - null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; - } - function H() { - var l, u; - return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), - null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; - } - function O() { - var l, u; - return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), - null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; - } - function W() { - var l, u; - return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), - null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; - } - function z() { - var l, u; - return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), - null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; - } - function I() { - var l, u; - return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), - null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; - } - function J() { - var l, u; - return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), - null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; - } - function K() { - var l, u; - return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), - null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; - } - function N() { - var l, u; - return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), - null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; - } - function P() { - var l, u; - return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), - null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; - } - function V() { - var l, u; - return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), - null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; - } - function X() { - var l, u; - return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), - null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; - } - function Y() { - var l, u, t; - return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function Z() { - var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), - null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function _() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u) { - if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), - null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(mt)); else t = il; - null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function nl() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function ll() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function ul() { - var l, u; - return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; - } - function tl() { - var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { - regexp: c - }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) { - return l ? new Alternate(n, l[1]) : n; - }, dl = function(n, l, u) { - return new Match([ n ].concat(l).concat([ u ])); - }, pl = "^", vl = '"^"', wl = function() { - return new Token("start"); - }, Al = "$", Cl = '"$"', gl = function() { - return new Token("end"); - }, bl = function(n, l) { - return new Quantified(n, l); - }, kl = "Quantifier", Tl = function(n, l) { - return l && (n.greedy = !1), n; - }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) { - return new Quantifier(n, l); - }, Ul = ",}", El = '",}"', Gl = function(n) { - return new Quantifier(n, 1/0); - }, Bl = function(n) { - return new Quantifier(n, n); - }, jl = "+", $l = '"+"', ql = function() { - return new Quantifier(1, 1/0); - }, Ll = "*", Ml = '"*"', Dl = function() { - return new Quantifier(0, 1/0); - }, Hl = "?", Ol = '"?"', Wl = function() { - return new Quantifier(0, 1); - }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) { - return +n.join(""); - }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) { - return n; - }, Yl = function(n) { - return new CaptureGroup(n); - }, Zl = "?:", _l = '"?:"', nu = function(n) { - return new Group("non-capture-group", n); - }, lu = "?=", uu = '"?="', tu = function(n) { - return new Group("positive-lookahead", n); - }, ru = "?!", eu = '"?!"', ou = function(n) { - return new Group("negative-lookahead", n); - }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) { - return new CharSet(!!n, l); - }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) { - return new CharacterRange(n, l); - }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) { - return new Literal(n); - }, ku = ".", Tu = '"."', xu = function() { - return new Token("any-character"); - }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() { - return new Token("backspace"); - }, Uu = function() { - return new Token("word-boundary"); - }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() { - return new Token("non-word-boundary"); - }, ju = "\\d", $u = '"\\\\d"', qu = function() { - return new Token("digit"); - }, Lu = "\\D", Mu = '"\\\\D"', Du = function() { - return new Token("non-digit"); - }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() { - return new Token("form-feed"); - }, zu = "\\n", Iu = '"\\\\n"', Ju = function() { - return new Token("line-feed"); - }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() { - return new Token("carriage-return"); - }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() { - return new Token("white-space"); - }, Zu = "\\S", _u = '"\\\\S"', nt = function() { - return new Token("non-white-space"); - }, lt = "\\t", ut = '"\\\\t"', tt = function() { - return new Token("tab"); - }, rt = "\\v", et = '"\\\\v"', ot = function() { - return new Token("vertical-tab"); - }, ct = "\\w", it = '"\\\\w"', at = function() { - return new Token("word"); - }, ft = "\\W", st = '"\\\\W"', ht = function() { - return new Token("non-word"); - }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) { - return new ControlCharacter(n); - }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) { - return new BackReference(n); - }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) { - return new Octal(n.join("")); - }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) { - return new Hex(n.join("")); - }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) { - return new Unicode(n.join("")); - }, $t = function() { - return new Token("null-character"); - }, qt = 0, Lt = 0, Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }, Ht = 0, Ot = [], Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl; - throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column); - } - return n(l, Error), { - SyntaxError: l, - parse: u - }; -}(), index = 1, cgs = {}; - -module.exports = parser \ No newline at end of file diff --git a/src/mock/schema/index.js b/src/mock/schema/index.js deleted file mode 100644 index 24f823bd..00000000 --- a/src/mock/schema/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./schema') \ No newline at end of file diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js deleted file mode 100644 index a78b2584..00000000 --- a/src/mock/schema/schema.js +++ /dev/null @@ -1,47 +0,0 @@ -/* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ -var Constant = require('../constant') -var Util = require('../util') -var Parser = require('../parser') - -function toJSONSchema(template, name, path /* Internal Use Only */ ) { - // type rule properties items - path = path || [] - var result = { - name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, - template: template, - type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: Parser.parse(name) - } - result.path = path.slice(0) - result.path.push(name === undefined ? 'ROOT' : result.name) - - switch (result.type) { - case 'array': - result.items = [] - Util.each(template, function(value, index) { - result.items.push( - toJSONSchema(value, index, result.path) - ) - }) - break - case 'object': - result.properties = [] - Util.each(template, function(value, name) { - result.properties.push( - toJSONSchema(value, name, result.path) - ) - }) - break - } - - return result - -} - -module.exports = toJSONSchema diff --git a/src/mock/util.js b/src/mock/util.js deleted file mode 100644 index bd36d50b..00000000 --- a/src/mock/util.js +++ /dev/null @@ -1,126 +0,0 @@ -/* - ## Utilities -*/ -var Util = {} - -Util.extend = function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, name, src, copy, clone - - if (length === 1) { - target = this - i = 0 - } - - for (; i < length; i++) { - options = arguments[i] - if (!options) continue - - for (name in options) { - src = target[name] - copy = options[name] - - if (target === copy) continue - if (copy === undefined) continue - - if (Util.isArray(copy) || Util.isObject(copy)) { - if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : [] - if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {} - - target[name] = Util.extend(clone, copy) - } else { - target[name] = copy - } - } - } - - return target -} - -Util.each = function each(obj, iterator, context) { - var i, key - if (this.type(obj) === 'number') { - for (i = 0; i < obj; i++) { - iterator(i, i) - } - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break - } - } -} - -Util.type = function type(obj) { - return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase() -} - -Util.each('String Object Array RegExp Function'.split(' '), function(value) { - Util['is' + value] = function(obj) { - return Util.type(obj) === value.toLowerCase() - } -}) - -Util.isObjectOrArray = function(value) { - return Util.isObject(value) || Util.isArray(value) -} - -Util.isNumeric = function(value) { - return !isNaN(parseFloat(value)) && isFinite(value) -} - -Util.keys = function(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) keys.push(key) - } - return keys; -} -Util.values = function(obj) { - var values = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) values.push(obj[key]) - } - return values; -} - -/* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 -*/ -Util.heredoc = function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn.toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim() -} - -Util.noop = function() {} - -module.exports = Util \ No newline at end of file diff --git a/src/mock/valid/index.js b/src/mock/valid/index.js deleted file mode 100644 index ea476661..00000000 --- a/src/mock/valid/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./valid') \ No newline at end of file diff --git a/src/mock/valid/valid.js b/src/mock/valid/valid.js deleted file mode 100644 index f785ac19..00000000 --- a/src/mock/valid/valid.js +++ /dev/null @@ -1,445 +0,0 @@ -/* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) -*/ -var Constant = require('../constant') -var Util = require('../util') -var toJSONSchema = require('../schema') - -function valid(template, data) { - var schema = toJSONSchema(template) - var result = Diff.diff(schema, data) - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result -} - -/* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 -*/ -var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */ ) { - var result = [] - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if ( - this.name(schema, data, name, result) && - this.type(schema, data, name, result) - ) { - this.value(schema, data, name, result) - this.properties(schema, data, name, result) - this.items(schema, data, name, result) - } - - return result - }, - /* jshint unused:false */ - name: function(schema, data, name, result) { - var length = result.length - - Assert.equal('name', schema.path, name + '', schema.name + '', result) - - return result.length === length - }, - type: function(schema, data, name, result) { - var length = result.length - - switch (schema.type) { - case 'string': - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true - break - case 'array': - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true - } - break - case 'function': - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true - } - - Assert.equal('type', schema.path, Util.type(data), schema.type, result) - - return result.length === length - }, - value: function(schema, data, name, result) { - var length = result.length - - var rule = schema.rule - var templateType = schema.type - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result) - return result.length === length - case 'string': - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length - break - } - Assert.equal('value', schema.path, data, schema.template, result) - return result.length === length - } - - // 有生成规则 - var actualRepeatCount - switch (templateType) { - case 'number': - var parts = (data + '').split('.') - parts[0] = +parts[0] - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result) - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name) - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result) - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result) - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result) - } - } - - break - - case 'boolean': - break - - case 'string': - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')) - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) - } - - break - - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')) - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) - } - break - } - - return result.length === length - }, - properties: function(schema, data, name, result) { - var length = result.length - - var rule = schema.rule - var keys = Util.keys(data) - if (!schema.properties) return - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result) - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result) - Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result) - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result) - } - } - - if (result.length !== length) return false - - for (var i = 0; i < keys.length; i++) { - result.push.apply( - result, - this.diff( - function() { - var property - Util.each(schema.properties, function(item /*, index*/ ) { - if (item.name === keys[i]) property = item - }) - return property || schema.properties[i] - }(), - data[keys[i]], - keys[i] - ) - ) - } - - return result.length === length - }, - items: function(schema, data, name, result) { - var length = result.length - - if (!schema.items) return - - var rule = schema.rule - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result) - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements') - Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements') - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length - else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result) - } - // |+inc - if (rule.parameters[2]) return result.length === length - } - - if (result.length !== length) return false - - for (var i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff( - schema.items[i % schema.items.length], - data[i], - i % schema.items.length - ) - ) - } - - return result.length === length - } -} - -/* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - -*/ -var Assert = { - message: function(item) { - return (item.message || - '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}') - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual) - }, - equal: function(type, path, actual, expected, result, message) { - if (actual === expected) return true - switch (type) { - case 'type': - // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true - break - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - // actual matches expected - match: function(type, path, actual, expected, result, message) { - if (expected.test(actual)) return true - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'matches', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - notEqual: function(type, path, actual, expected, result, message) { - if (actual !== expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is not equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - greaterThan: function(type, path, actual, expected, result, message) { - if (actual > expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - lessThan: function(type, path, actual, expected, result, message) { - if (actual < expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - greaterThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual >= expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than or equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - }, - lessThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual <= expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less than or equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - } -} - -valid.Diff = Diff -valid.Assert = Assert - -module.exports = valid \ No newline at end of file diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js deleted file mode 100644 index edf84ff5..00000000 --- a/src/mock/xhr/index.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = require('./xhr') \ No newline at end of file diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/xhr.js deleted file mode 100644 index daf2af4b..00000000 --- a/src/mock/xhr/xhr.js +++ /dev/null @@ -1,442 +0,0 @@ -/* global window, document, location, Event, setTimeout */ -/* - ## MockXMLHttpRequest - - 期望的功能: - 1. 完整地覆盖原生 XHR 的行为 - 2. 完整地模拟原生 XHR 的行为 - 3. 在发起请求时,自动检测是否需要拦截 - 4. 如果不必拦截,则执行原生 XHR 的行为 - 5. 如果需要拦截,则执行虚拟 XHR 的行为 - 6. 兼容 XMLHttpRequest 和 ActiveXObject - new window.XMLHttpRequest() - new window.ActiveXObject("Microsoft.XMLHTTP") - - 关键方法的逻辑: - * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。 - * open 此时可以取到 URL,可以决定是否进行拦截。 - * send 此时已经确定了请求方式。 - - 规范: - http://xhr.spec.whatwg.org/ - http://www.w3.org/TR/XMLHttpRequest2/ - - 参考实现: - https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js - https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js - https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js - https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js - https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js - - **需不需要全面重写 XMLHttpRequest?** - http://xhr.spec.whatwg.org/#interface-xmlhttprequest - 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。 - 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。 - - // Event handlers - onloadstart loadstart - onprogress progress - onabort abort - onerror error - onload load - ontimeout timeout - onloadend loadend - onreadystatechange readystatechange - */ - -var Util = require('../util') - -// 备份原生 XMLHttpRequest -window._XMLHttpRequest = window.XMLHttpRequest -window._ActiveXObject = window.ActiveXObject - -/* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 -*/ -try { - new window.Event('custom') -} catch (exception) { - window.Event = function(type, bubbles, cancelable, detail) { - var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail) - return event - } -} - -var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4 -} - -var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ') -var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ') -var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ') - -// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 -var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" -} - -/* - MockXMLHttpRequest -*/ - -function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {} - } -} - -MockXMLHttpRequest._settings = { - timeout: '10-100', - /* - timeout: 50, - timeout: '10-100', - */ -} - -MockXMLHttpRequest.setup = function(settings) { - Util.extend(MockXMLHttpRequest._settings, settings) - return MockXMLHttpRequest._settings -} - -Util.extend(MockXMLHttpRequest, XHR_STATES) -Util.extend(MockXMLHttpRequest.prototype, XHR_STATES) - -// 标记当前对象为 MockXMLHttpRequest -MockXMLHttpRequest.prototype.mock = true - -// 是否拦截 Ajax 请求 -MockXMLHttpRequest.prototype.match = false - -// 初始化 Request 相关的属性和方法 -Util.extend(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function(method, url, async, username, password) { - var that = this - - Util.extend(this.custom, { - method: method, - url: url, - async: typeof async === 'boolean' ? async : true, - username: username, - password: password, - options: { - url: url, - type: method - } - }) - - this.custom.timeout = function(timeout) { - if (typeof timeout === 'number') return timeout - if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10) - if (typeof timeout === 'string' && ~timeout.indexOf('-')) { - var tmp = timeout.split('-') - var min = parseInt(tmp[0], 10) - var max = parseInt(tmp[1], 10) - return Math.round(Math.random() * (max - min)) + min - } - }(MockXMLHttpRequest._settings.timeout) - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options) - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]] - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/ )) - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest() - this.custom.xhr = xhr - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle) - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password) - else xhr.open(method, url, async) - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]] - } catch (e) {} - } - - return - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true - this.custom.template = item - this.readyState = MockXMLHttpRequest.OPENED - this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ )) - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function(name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value) - return - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders - if (requestHeaders[name]) requestHeaders[name] += ',' + value - else requestHeaders[name] = value - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this - this.custom.options.body = data - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data) - return - } - - // 拦截 XHR - - // X-Requested-With header - this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest') - - // loadstart The fetch initiates. - this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ )) - - if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步 - else done() // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - that.readyState = MockXMLHttpRequest.LOADING - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - - that.status = 200 - that.statusText = HTTP_STATUS_CODES[200] - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify( - convert(that.custom.template, that.custom.options), - null, 4 - ) - - that.readyState = MockXMLHttpRequest.DONE - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - that.dispatchEvent(new Event('load' /*, false, false, that*/ )); - that.dispatchEvent(new Event('loadend' /*, false, false, that*/ )); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort() - return - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT - this.dispatchEvent(new Event('abort', false, false, this)) - this.dispatchEvent(new Event('error', false, false, this)) - } -}) - -// 初始化 Response 相关的属性和方法 -Util.extend(MockXMLHttpRequest.prototype, { - responseURL: '', - status: MockXMLHttpRequest.UNSENT, - statusText: '', - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function(name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name) - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()] - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function() { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders() - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders - var headers = '' - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue - headers += h + ': ' + responseHeaders[h] + '\r\n' - } - return headers - }, - overrideMimeType: function( /*mime*/ ) {}, - responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: '', - responseXML: null -}) - -// EventTarget -Util.extend(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events - if (!events[type]) events[type] = [] - events[type].push(handle) - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || [] - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1) - } - } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || [] - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event) - } - - var ontype = 'on' + event.type - if (this[ontype]) this[ontype](event) - } -}) - -// Inspired by jQuery -function createNativeXMLHttpRequest() { - var isLocal = function() { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ - var ajaxLocation = location.href - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [] - return rlocalProtocol.test(ajaxLocParts[1]) - }() - - return window.ActiveXObject ? - (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR() - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} - } - - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} - } -} - - -// 查找与请求参数匹配的数据模板:URL,Type -function find(options) { - - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType] - if ( - (!item.rurl || match(item.rurl, options.url)) && - (!item.rtype || match(item.rtype, options.type.toLowerCase())) - ) { - // console.log('[mock]', options.url, '>', item.rurl) - return item - } - } - - function match(expected, actual) { - if (Util.type(expected) === 'string') { - return expected === actual - } - if (Util.type(expected) === 'regexp') { - return expected.test(actual) - } - } - -} - -// 数据模板 => 响应数据 -function convert(item, options) { - return Util.isFunction(item.template) ? - item.template(options) : MockXMLHttpRequest.Mock.mock(item.template) -} - -module.exports = MockXMLHttpRequest \ No newline at end of file diff --git a/test/bower.json b/test/bower.json deleted file mode 100644 index 3485bbe8..00000000 --- a/test/bower.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "test", - "dependencies": {}, - "devDependencies": { - "requirejs": "*", - "mocha": "*", - "chai": "*", - "underscore": "*", - "jquery": "~2.1.1" - } -} diff --git a/test/materiels/noop.html b/test/materiels/noop.html deleted file mode 100644 index bdef09c7..00000000 --- a/test/materiels/noop.html +++ /dev/null @@ -1,2 +0,0 @@ - -

noop.html
\ No newline at end of file diff --git a/test/materiels/noop.js b/test/materiels/noop.js deleted file mode 100644 index 247b5720..00000000 --- a/test/materiels/noop.js +++ /dev/null @@ -1 +0,0 @@ -(function noop() {})(); \ No newline at end of file diff --git a/test/package.json b/test/package.json deleted file mode 100644 index b26a3b84..00000000 --- a/test/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "test", - "dependencies": { - "chai": "^1.10.0" - } -} diff --git a/test/test.coveralls.js b/test/test.coveralls.js deleted file mode 100644 index 6166cb79..00000000 --- a/test/test.coveralls.js +++ /dev/null @@ -1,35 +0,0 @@ -/* global require */ -/* global describe, it */ -var assert = require("assert") -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.html b/test/test.mock.html deleted file mode 100644 index 8c9c6552..00000000 --- a/test/test.mock.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - Test: Mock - - - - - - -
- - - - - - - - -
-
-

-    

-
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-
\ No newline at end of file
diff --git a/test/test.mock.mock.js b/test/test.mock.mock.js
deleted file mode 100644
index 1461e5a8..00000000
--- a/test/test.mock.mock.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* global require, chai, describe, before, it */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-var expect = chai.expect
-var Mock, $, _
-
-describe('Mock.mock', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-
-    describe('Mock.mock( String )', function() {
-        it('@EMAIL', function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.not.equal(this.test.title)
-            this.test.title += ' => ' + data
-        })
-    })
-    describe('Mock.mock( {} )', function() {
-        it('', function() {
-            var tpl = {
-                'list|1-10': [{
-                    'id|+1': 1,
-                    'email': '@EMAIL'
-                }]
-            }
-            var data = Mock.mock(tpl)
-            this.test.title = JSON.stringify(tpl /*, null, 4*/ ) + ' => ' + JSON.stringify(data /*, null, 4*/ )
-            expect(data).to.have.property('list')
-                .that.be.an('array').with.length.within(1, 10)
-            _.each(data.list, function(item, index, list) {
-                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
-            })
-        })
-    })
-    describe('Mock.mock( function() )', function() {
-        it('', function() {
-            var fn = function() {
-                return Mock.mock({
-                    'list|1-10': [{
-                        'id|+1': 1,
-                        'email': '@EMAIL'
-                    }]
-                })
-            }
-            var data = Mock.mock(fn)
-            this.test.title = fn.toString() + ' => ' + JSON.stringify(data /*, null, 4*/ )
-            expect(data).to.have.property('list')
-                .that.be.an('array').with.length.within(1, 10)
-            _.each(data.list, function(item, index, list) {
-                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
-            })
-        })
-    })
-})
\ No newline at end of file
diff --git a/test/test.mock.random.js b/test/test.mock.random.js
deleted file mode 100644
index bb5f9df7..00000000
--- a/test/test.mock.random.js
+++ /dev/null
@@ -1,464 +0,0 @@
-/* global require, chai, describe, before, it */
-/* global window */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-var expect = chai.expect
-var Mock, Random, $, _, Random
-
-/* jshint -W061 */
-describe('Random', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            window.Random = Random = Mock.Random
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-
-    function stringify(json) {
-        return JSON.stringify(json /*, null, 4*/ )
-    }
-
-    function doit(expression, validator) {
-        it('', function() {
-            // for (var i = 0; i < 1; i++) {}
-            var data = eval(expression)
-            validator(data)
-            this.test.title = stringify(expression) + ' => ' + stringify(data)
-        })
-    }
-
-    describe('Basic', function() {
-        doit('Random.boolean()', function(data) {
-            expect(data).to.be.a('boolean')
-        })
-
-        doit('Random.natural()', function(data) {
-            expect(data).to.be.a('number').within(0, 9007199254740992)
-        })
-        doit('Random.natural(1, 3)', function(data) {
-            expect(data).to.be.a('number').within(1, 3)
-        })
-        doit('Random.natural(1)', function(data) {
-            expect(data).to.be.a('number').least(1)
-        })
-
-        doit('Random.integer()', function(data) {
-            expect(data).to.be.a('number').within(-9007199254740992, 9007199254740992)
-        })
-        doit('Random.integer(-10, 10)', function(data) {
-            expect(data).to.be.a('number').within(-10, 10)
-        })
-
-        // 1 整数部分 2 小数部分
-        var RE_FLOAT = /(\-?\d+)\.?(\d+)?/
-
-        function validFloat(float, min, max, dmin, dmax) {
-            RE_FLOAT.lastIndex = 0
-            var parts = RE_FLOAT.exec(float + '')
-
-            expect(+parts[1]).to.be.a('number').within(min, max)
-
-            /* jshint -W041 */
-            if (parts[2] != undefined) {
-                expect(parts[2]).to.have.length.within(dmin, dmax)
-            }
-        }
-
-        doit('Random.float()', function(data) {
-            validFloat(data, -9007199254740992, 9007199254740992, 0, 17)
-        })
-        doit('Random.float(0)', function(data) {
-            validFloat(data, 0, 9007199254740992, 0, 17)
-        })
-        doit('Random.float(60, 100)', function(data) {
-            validFloat(data, 60, 100, 0, 17)
-        })
-        doit('Random.float(60, 100, 3)', function(data) {
-            validFloat(data, 60, 100, 3, 17)
-        })
-        doit('Random.float(60, 100, 3, 5)', function(data) {
-            validFloat(data, 60, 100, 3, 5)
-        })
-
-        var CHARACTER_LOWER = 'abcdefghijklmnopqrstuvwxyz'
-        var CHARACTER_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-        var CHARACTER_NUMBER = '0123456789'
-        var CHARACTER_SYMBOL = '!@#$%^&*()[]'
-        doit('Random.character()', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(
-                CHARACTER_LOWER +
-                CHARACTER_UPPER +
-                CHARACTER_NUMBER +
-                CHARACTER_SYMBOL
-            ).to.include(data)
-        })
-        doit('Random.character("lower")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_LOWER).to.include(data)
-        })
-        doit('Random.character("upper")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_UPPER).to.include(data)
-        })
-        doit('Random.character("number")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_NUMBER).to.include(data)
-        })
-        doit('Random.character("symbol")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_SYMBOL).to.include(data)
-        })
-        doit('Random.character("aeiou")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect('aeiou').to.include(data)
-        })
-
-        doit('Random.string()', function(data) {
-            expect(data).to.be.a('string').with.length.within(3, 7)
-        })
-        doit('Random.string(5)', function(data) {
-            expect(data).to.be.a('string').with.length(5)
-        })
-        doit('Random.string("lower", 5)', function(data) {
-            expect(data).to.be.a('string').with.length(5)
-            for (var i = 0; i < data.length; i++) {
-                expect(CHARACTER_LOWER).to.include(data[i])
-            }
-        })
-        doit('Random.string(7, 10)', function(data) {
-            expect(data).to.be.a('string').with.length.within(7, 10)
-        })
-        doit('Random.string("aeiou", 1, 3)', function(data) {
-            expect(data).to.be.a('string').with.length.within(1, 3)
-            for (var i = 0; i < data.length; i++) {
-                expect('aeiou').to.include(data[i])
-            }
-        })
-
-        doit('Random.range(10)', function(data) {
-            expect(data).to.be.an('array').with.length(10)
-        })
-        doit('Random.range(3, 7)', function(data) {
-            expect(data).to.be.an('array').deep.equal([3, 4, 5, 6])
-        })
-        doit('Random.range(1, 10, 2)', function(data) {
-            expect(data).to.be.an('array').deep.equal([1, 3, 5, 7, 9])
-        })
-        doit('Random.range(1, 10, 3)', function(data) {
-            expect(data).to.be.an('array').deep.equal([1, 4, 7])
-        })
-
-        var RE_DATE = /\d{4}-\d{2}-\d{2}/
-        var RE_TIME = /\d{2}:\d{2}:\d{2}/
-        var RE_DATETIME = new RegExp(RE_DATE.source + ' ' + RE_TIME.source)
-
-        doit('Random.date()', function(data) {
-            expect(RE_DATE.test(data)).to.be.true
-        })
-
-        doit('Random.time()', function(data) {
-            expect(RE_TIME.test(data)).to.be.true
-        })
-
-        doit('Random.datetime()', function(data) {
-            expect(RE_DATETIME.test(data)).to.be.true
-        })
-        doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("yy-MM-dd HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("y-MM-dd HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("y-M-d H:m:s")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function(data) {
-            expect(data).to.be.ok
-        })
-
-        doit('Random.now()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("year")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("month")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("day")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("hour")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("minute")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("second")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("week")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function(data) {
-            expect(data).to.be.ok
-        })
-    })
-
-    describe('Image', function() {
-        doit('Random.image()', function(data) {
-            expect(data).to.be.ok
-        })
-        it('Random.dataImage()', function() {
-            var data = eval(this.test.title)
-            expect(data).to.be.ok
-            this.test.title = stringify(this.test.title) + ' => '
-        })
-        it('Random.dataImage("200x100")', function() {
-            var data = eval(this.test.title)
-            expect(data).to.be.ok
-            this.test.title = stringify(this.test.title) + ' => '
-        })
-        it('Random.dataImage("200x100", "Hello Mock.js!")', function() {
-            var data = eval(this.test.title)
-            expect(data).to.be.ok
-            this.test.title = stringify(this.test.title) + ' => '
-        })
-    })
-
-    var RE_COLOR = /^#[0-9a-fA-F]{6}$/
-    var RE_COLOR_RGB = /^rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
-    var RE_COLOR_RGBA = /^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0\.\d{1,2}\)$/
-    var RE_COLOR_HSL = /^hsl\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
-    describe('Color', function() {
-        doit('Random.color()', function(data) {
-            expect(RE_COLOR.test(data)).to.true
-        })
-        doit('Random.hex()', function(data) {
-            expect(RE_COLOR.test(data)).to.true
-        })
-        doit('Random.rgb()', function(data) {
-            expect(RE_COLOR_RGB.test(data)).to.true
-        })
-        doit('Random.rgba()', function(data) {
-            expect(RE_COLOR_RGBA.test(data)).to.true
-        })
-        doit('Random.hsl()', function(data) {
-            expect(RE_COLOR_HSL.test(data)).to.true
-        })
-    })
-
-    describe('Text', function() {
-        doit('Random.paragraph()', function(data) {
-            expect(data.split('.').length - 1).to.within(3, 7)
-        })
-        doit('Random.paragraph(2)', function(data) {
-            expect(data.split('.').length - 1).to.equal(2)
-        })
-        doit('Random.paragraph(1, 3)', function(data) {
-            expect(data.split('.').length - 1).to.within(1, 3)
-        })
-
-        doit('Random.sentence()', function(data) {
-            expect(data[0]).to.equal(data.toUpperCase()[0])
-            expect(data.split(' ').length).to.within(12, 18)
-        })
-        doit('Random.sentence(4)', function(data) {
-            expect(data[0]).to.equal(data.toUpperCase()[0])
-            expect(data.split(' ').length).to.equal(4)
-        })
-        doit('Random.sentence(3, 5)', function(data) {
-            expect(data[0]).to.equal(data.toUpperCase()[0])
-            expect(data.split(' ').length).to.within(3, 5)
-        })
-
-        doit('Random.word()', function(data) {
-            expect(data).to.have.length.within(3, 10)
-        })
-        doit('Random.word(4)', function(data) {
-            expect(data).to.have.length(4)
-        })
-        doit('Random.word(3, 5)', function(data) {
-            expect(data).to.have.length.within(3, 5)
-        })
-
-        doit('Random.title()', function(data) {
-            var words = data.split(' ')
-            _.each(words, function(word) {
-                expect(word[0]).to.equal(word[0].toUpperCase())
-            })
-            expect(words).to.have.length.within(3, 7)
-        })
-        doit('Random.title(4)', function(data) {
-            var words = data.split(' ')
-            _.each(words, function(word) {
-                expect(word[0]).to.equal(word[0].toUpperCase())
-            })
-            expect(words).to.have.length(4)
-        })
-        doit('Random.title(3, 5)', function(data) {
-            var words = data.split(' ')
-            _.each(words, function(word) {
-                expect(word[0]).to.equal(word[0].toUpperCase())
-            })
-            expect(words).to.have.length.within(3, 5)
-        })
-    })
-
-    describe('Name', function() {
-        doit('Random.first()', function(data) {
-            expect(data[0]).to.equal(data[0].toUpperCase())
-        })
-        doit('Random.last()', function(data) {
-            expect(data[0]).to.equal(data[0].toUpperCase())
-        })
-        doit('Random.name()', function(data) {
-            var words = data.split(' ')
-            expect(words).to.have.length(2)
-            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
-            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
-        })
-        doit('Random.name(true)', function(data) {
-            var words = data.split(' ')
-            expect(words).to.have.length(3)
-            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
-            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
-            expect(words[2][0]).to.equal(words[2][0].toUpperCase())
-        })
-
-        doit('Random.cfirst()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.clast()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.cname()', function(data) {
-            expect(data).to.be.ok
-        })
-    })
-
-    var RE_URL = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/
-    var RE_IP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
-    describe('Web', function() {
-        doit('Random.url()', function(data) {
-            expect(RE_URL.test(data)).to.be.true
-        })
-        doit('Random.domain()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.domain("com")', function(data) {
-            expect(data).to.include('.com')
-        })
-        doit('Random.tld()', function(data) {
-            expect(data).to.be.ok
-        })
-
-        doit('Random.email()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.email("nuysoft.com")', function(data) {
-            expect(data).to.include('@nuysoft.com')
-        })
-        doit('Random.ip()', function(data) {
-            expect(RE_IP.test(data)).to.be.true
-        })
-    })
-    describe('Address', function() {
-        doit('Random.region()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.province()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.city()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.city(true)', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.county()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.county(true)', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.zip()', function(data) {
-            expect(data).to.be.ok
-        })
-    })
-    describe('Helpers', function() {
-        doit('Random.capitalize()', function(data) {
-            expect(data).to.equal('Undefined')
-        })
-        doit('Random.capitalize("hello")', function(data) {
-            expect(data).to.equal('Hello')
-        })
-
-        doit('Random.upper()', function(data) {
-            expect(data).to.equal('UNDEFINED')
-        })
-        doit('Random.upper("hello")', function(data) {
-            expect(data).to.equal('HELLO')
-        })
-
-        doit('Random.lower()', function(data) {
-            expect(data).to.equal('undefined')
-        })
-        doit('Random.lower("HELLO")', function(data) {
-            expect(data).to.equal('hello')
-        })
-
-        doit('Random.pick()', function(data) {
-            expect(data).to.be.undefined
-        })
-        doit('Random.pick("a", "e", "i", "o", "u")', function(data) {
-            expect(["a", "e", "i", "o", "u"]).to.include(data)
-        })
-        doit('Random.pick(["a", "e", "i", "o", "u"])', function(data) {
-            expect(["a", "e", "i", "o", "u"]).to.include(data)
-        })
-        doit('Random.pick(["a", "e", "i", "o", "u"], 3)', function(data) {
-            expect(data).to.be.an('array').with.length(3)
-        })
-        doit('Random.pick(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
-            expect(data).to.be.an('array').with.length.within(1, 5)
-        })
-
-        doit('Random.shuffle()', function(data) {
-            expect(data).to.deep.equal([])
-        })
-        doit('Random.shuffle(["a", "e", "i", "o", "u"])', function(data) {
-            expect(data.join('')).to.not.equal('aeiou')
-            expect(data.sort().join('')).to.equal('aeiou')
-        })
-        doit('Random.shuffle(["a", "e", "i", "o", "u"], 3)', function(data) {
-            expect(data).to.be.an('array').with.length(3)
-        })
-        doit('Random.shuffle(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
-            expect(data).to.be.an('array').with.length.within(1, 5)
-        })
-    })
-
-    var RE_GUID = /[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}/
-    describe('Miscellaneous', function() {
-        doit('Random.guid()', function(data) {
-            expect(data).to.be.a('string').with.length(36)
-            expect(RE_GUID.test(data)).to.be.true
-        })
-        doit('Random.id()', function(data) {
-            expect(data).to.be.a('string').with.length(18)
-        })
-    })
-})
\ No newline at end of file
diff --git a/test/test.mock.request.js b/test/test.mock.request.js
deleted file mode 100644
index 42000d74..00000000
--- a/test/test.mock.request.js
+++ /dev/null
@@ -1,445 +0,0 @@
-/* global console, require, chai, describe, before, it */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-var expect = chai.expect
-var Mock, $, _
-
-describe('Request', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-
-    function stringify(json) {
-        return JSON.stringify(json /*, null, 4*/ )
-    }
-
-    describe('jQuery.ajax()', function() {
-        it('', function(done) {
-            var that = this
-            var url = Math.random()
-            $.ajax({
-                url: url,
-                dataType: 'json'
-            }).done(function( /*data, textStatus, jqXHR*/ ) {
-                // 不会进入
-            }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) {
-                // 浏览器 || PhantomJS
-                expect([404, 0]).to.include(jqXHR.status)
-                that.test.title += url + ' => ' + jqXHR.status
-            }).always(function() {
-                done()
-            })
-        })
-    })
-    describe('jQuery.getScript()', function() {
-        it('', function(done) {
-            var that = this
-            var url = './materiels/noop.js'
-            $.getScript(url, function(script, textStatus, jqXHR) {
-                expect(script).to.be.ok
-                that.test.title += url + ' => ' + jqXHR.status + ' ' + textStatus
-                done()
-            })
-        })
-    })
-    describe('jQuery.load()', function() {
-        it('', function(done) {
-            var that = this
-            var url = './materiels/noop.html'
-            $('
').load(url, function(responseText /*, textStatus, jqXHR*/ ) { - expect(responseText).to.be.ok - that.test.title += url + ' => ' + responseText - done() - }) - }) - }) - describe('jQuery.ajax() XHR Fields', function() { - it('', function(done) { - var that = this - var url = Math.random() - var xhr - $.ajax({ - xhr: function() { - xhr = $.ajaxSettings.xhr() - return xhr - }, - url: url, - dataType: 'json', - xhrFields: { - timeout: 123, - withCredentials: true - } - }).done(function( /*data, textStatus, jqXHR*/ ) { - // 不会进入 - }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) { - // 浏览器 || PhantomJS - expect([404, 0]).to.include(jqXHR.status) - that.test.title += url + ' => ' + jqXHR.status - expect(xhr.timeout).to.be.equal(123) - expect(xhr.withCredentials).to.be.equal(true) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, template )', function() { - it('', function(done) { - var that = this - var url = 'rurl_template.json' - - Mock.mock(/rurl_template.json/, { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - - Mock.setup({ - // timeout: 100, - timeout: '10-50', - }) - $.ajax({ - url: url, - dataType: 'json' - }).done(function(data /*, textStatus, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) )', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) ) + GET + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url + '?foo=1') - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) ) + POST + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('POST') - expect(options.body).to.be.equal('foo=1') - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, rtype, template )', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_template.json' - var count = 0 - - Mock.mock(/rurl_rtype_template\.json/, 'get', { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL', - type: 'get' - }] - }) - Mock.mock(/rurl_rtype_template\.json/, 'post', { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL', - type: 'post' - }] - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) + ' ' - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - expect(item).to.have.property('type').equal('get') - }) - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) + ' ' - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - expect(item).to.have.property('type').equal('post') - }) - }).done(success).always(complete) - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 2) done() - } - - }) - }) - - describe('Mock.mock( rurl, rtype, function(options) )', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_function.json' - var count = 0 - - Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return { - type: 'get' - } - }) - Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(['POST', 'PUT']).to.include(options.type) - expect(options.body).to.be.equal(null) - return { - type: options.type.toLowerCase() - } - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'get') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'post') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'put', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'PUT ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'put') - }).done(success).always(complete) - - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 3) done() - } - - }) - }) - describe('Mock.mock( rurl, rtype, function(options) ) + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_function.json' - var count = 0 - - Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url + '?foo=1') - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return { - type: 'get' - } - }) - Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(['POST', 'PUT']).to.include(options.type) - expect(options.body).to.be.equal('foo=1') - return { - type: options.type.toLowerCase() - } - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'get') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'post') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'put', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'PUT ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'put') - }).done(success).always(complete) - - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 3) done() - } - - }) - }) - describe('#105 addEventListener', function() { - it('addEventListene => addEventListener', function(done) { - var xhr = new Mock.XHR() - expect(xhr.addEventListener).to.not.equal(undefined) - expect(xhr.addEventListene).to.equal(undefined) - done() - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.schema.js b/test/test.mock.schema.js deleted file mode 100644 index ccffdeeb..00000000 --- a/test/test.mock.schema.js +++ /dev/null @@ -1,205 +0,0 @@ -/* global require, chai, describe, before, it */ -/* global window */ -// 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('Schema', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - window.XMLHttpRequest = Mock.XHR - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - - function stringify(json) { - return JSON.stringify(json /*, null, 4*/ ) - } - - function doit(template, validator) { - it('', function() { - var schema = Mock.toJSONSchema(template) - this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) - validator(schema) - }) - } - - describe('Type', function() { - doit(1, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'number') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit(true, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'boolean') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit('', function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'string') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit(function() {}, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'function') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit(/\d/, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'regexp') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit([], function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'array') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - expect(schema).to.have.property('items').with.length(0) - }) - doit({}, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - expect(schema).to.have.property('properties').with.length(0) - }) - - }) - - describe('Object', function() { - doit({ - a: { - b: { - c: { - d: {} - } - } - } - }, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - - var properties; - - // root.properties - properties = schema.properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'a') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.properties - properties = properties[0].properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'b') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.b.properties - properties = properties[0].properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'c') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.b.c.properties - properties = properties[0].properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'd') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.b.c.d.properties - properties = properties[0].properties - expect(properties).to.with.length(0) - }) - - }) - - describe('Array', function() { - doit([ - [ - ['foo', 'bar'] - ] - ], function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'array') - - var items; - - // root.items - items = schema.items - expect(items).to.with.length(1) - expect(items[0]).to.have.property('type', 'array') - - // root[0].items - items = items[0].items - expect(items).to.with.length(1) - expect(items[0]).to.have.property('type', 'array') - - // root[0][0].items - items = items[0].items - expect(items).to.with.length(2) - expect(items[0]).to.have.property('type', 'string') - expect(items[1]).to.have.property('type', 'string') - }) - }) - - describe('String Rule', function() { - doit({ - 'string|1-10': '★' - }, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - - var properties; - // root.properties - properties = schema.properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('type', 'string') - expect(properties[0].rule).to.have.property('min', 1) - expect(properties[0].rule).to.have.property('max', 10) - }) - doit({ - 'string|3': 'value', - }, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - - var properties; - // root.properties - properties = schema.properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('type', 'string') - expect(properties[0].rule).to.have.property('min', 3) - expect(properties[0].rule.max).to.be.an('undefined') - }) - }) - -}) \ No newline at end of file diff --git a/test/test.mock.spec.dpd.js b/test/test.mock.spec.dpd.js deleted file mode 100644 index 24648a77..00000000 --- a/test/test.mock.spec.dpd.js +++ /dev/null @@ -1,245 +0,0 @@ -/* global require, chai, describe, before, it */ -// 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('DPD', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - describe('Reference', function() { - it('@EMAIL', function() { - var data = Mock.mock(this.test.title) - expect(data).to.not.equal(this.test.title) - }) - }) - describe('Priority', function() { - it('@EMAIL', function() { - var data = Mock.mock({ - email: 'nuysoft@gmail.com', - name: '@EMAIL' - }) - this.test.title += ' => ' + data.name - expect(data.name).to.not.equal(data.email) - }) - it('@email', function() { - var data = Mock.mock({ - email: 'nuysoft@gmail.com', - name: '@email' - }) - this.test.title += ' => ' + data.name - expect(data.name).to.equal(data.email) - }) - }) - describe('Escape', function() { - it('\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - }) - describe('Path', function() { - it('Absolute Path', function() { - var data = Mock.mock({ - id: '@UUID', - children: [{ - parentId: '@/id' - }], - child: { - parentId: '@/id' - } - }) - expect(data.children[0]).to.have.property('parentId', data.id) - expect(data.child).to.have.property('parentId', data.id) - }) - it('Relative Path', function() { - var data = Mock.mock({ - id: '@UUID', - children: [{ - parentId: '@../../id' - }], - child: { - parentId: '@../id' - } - }) - expect(data.children[0]).to.have.property('parentId', data.id) - expect(data.child).to.have.property('parentId', data.id) - }) - - it('Relative Path Fallback in Corner Case', function() { - const STRING = 'https://test.org/@a/build/test.html' - var data = Mock.mock({ - a: STRING - }) - expect(data.a).to.equal(STRING) - }) - }) - describe('Complex', function() { - var tpl = { - basics: { - boolean1: '@BOOLEAN', - boolean2: '@BOOLEAN(1, 9, true)', - - natural1: '@NATURAL', - natural2: '@NATURAL(10000)', - natural3: '@NATURAL(60, 100)', - - integer1: '@INTEGER', - integer2: '@INTEGER(10000)', - integer3: '@INTEGER(60, 100)', - - float1: '@FLOAT', - float2: '@FLOAT(0)', - float3: '@FLOAT(60, 100)', - float4: '@FLOAT(60, 100, 3)', - float5: '@FLOAT(60, 100, 3, 5)', - - character1: '@CHARACTER', - character2: '@CHARACTER("lower")', - character3: '@CHARACTER("upper")', - character4: '@CHARACTER("number")', - character5: '@CHARACTER("symbol")', - character6: '@CHARACTER("aeiou")', - - string1: '@STRING', - string2: '@STRING(5)', - string3: '@STRING("lower",5)', - string4: '@STRING(7, 10)', - string5: '@STRING("aeiou", 1, 3)', - - range1: '@RANGE(10)', - range2: '@RANGE(3, 7)', - range3: '@RANGE(1, 10, 2)', - range4: '@RANGE(1, 10, 3)', - - date: '@DATE', - time: '@TIME', - - datetime1: '@DATETIME', - datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")', - datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")', - datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")', - datetime5: '@DATETIME("y-MM-dd HH:mm:ss")', - datetime6: '@DATETIME("y-M-d H:m:s")', - - now: '@NOW', - nowYear: '@NOW("year")', - nowMonth: '@NOW("month")', - nowDay: '@NOW("day")', - nowHour: '@NOW("hour")', - nowMinute: '@NOW("minute")', - nowSecond: '@NOW("second")', - nowWeek: '@NOW("week")', - nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")' - }, - image: { - image1: '@IMAGE', - image2: '@IMAGE("100x200", "#000")', - image3: '@IMAGE("100x200", "#000", "hello")', - image4: '@IMAGE("100x200", "#000", "#FFF", "hello")', - image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")', - - dataImage1: '@DATAIMAGE', - dataImage2: '@DATAIMAGE("200x100")', - dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")' - }, - color: { - color: '@COLOR', - render: function() { - $('.header').css('background', this.color) - } - }, - text: { - title1: '@TITLE', - title2: '@TITLE(5)', - title3: '@TITLE(3, 5)', - - word1: '@WORD', - word2: '@WORD(5)', - word3: '@WORD(3, 5)', - - sentence1: '@SENTENCE', - sentence2: '@SENTENCE(5)', - sentence3: '@SENTENCE(3, 5)', - - paragraph1: '@PARAGRAPH', - paragraph2: '@PARAGRAPH(2)', - paragraph3: '@PARAGRAPH(1, 3)' - }, - name: { - first: '@FIRST', - last: '@LAST', - name1: '@NAME', - name2: '@NAME(true)' - }, - web: { - url: '@URL', - domain: '@DOMAIN', - email: '@EMAIL', - ip: '@IP', - tld: '@TLD', - }, - address: { - region: '@REGION', - province: '@PROVINCE', - city: '@CITY', - county: '@COUNTY' - }, - miscellaneous: { - guid: '@GUID', - id: '@ID', - 'increment1|3': [ - '@INCREMENT' - ], - 'increment2|3': [ - '@INCREMENT(10)' - ] - }, - helpers: { - capitalize1: '@CAPITALIZE()', - capitalize2: '@CAPITALIZE("hello")', - - upper1: '@UPPER', - upper2: '@UPPER("hello")', - - lower1: '@LOWER', - lower2: '@LOWER("HELLO")', - - pick1: '@PICK', - pick2: '@PICK("abc")', - pick3: '@PICK(["a", "b", "c"])', - - shuffle1: '@SHUFFLE', - shuffle2: '@SHUFFLE(["a", "b", "c"])' - } - } - it('', function() { - var data = Mock.mock(tpl) - // this.test.title += JSON.stringify(data, null, 4) - expect(data).to.be.a('object') - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.spec.dtd.js b/test/test.mock.spec.dtd.js deleted file mode 100644 index 44fe72d5..00000000 --- a/test/test.mock.spec.dtd.js +++ /dev/null @@ -1,677 +0,0 @@ -/* global require, chai, describe, before, it */ -// 数据模板定义(Data Temaplte Definition,DTD) -/* - ## BDD - 1. 结构 - describe suite - [ describe ] - before after beforeEach afterEach - it test - done - 搜索 this.async = fn && fn.length - 2. 常用 expect - expect().to - .equal .deep.equal .not.equal - .match - .have.length .with.length - .have.property .have.deep.property - .to.be.a .to.be.an - .that - .least .most .within - 3. 速度 - 搜索 test.speed - slow > 75 - 75 / 2 < medium < 75 - fast < 75 / 2 - */ -var expect = chai.expect -var Mock, $, _ - -describe('DTD', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - describe('Literal', function() { - it('', function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it('foo', function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it(1, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it(true, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it(false, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it({}, function() { - var data = Mock.mock(this.test.title) - expect(data).to.deep.equal(this.test.title) - }) - it([], function() { - var data = Mock.mock(this.test.title) - expect(data).to.deep.equal(this.test.title) - }) - it(function() {}, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(undefined) - }) - }) - describe('String', function() { - // `'name|min-max': 'value'` - it('name|min-max', function() { - var data = Mock.mock({ - 'name|1-10': '★号' - }) - expect(data.name).to.have.length.within(2, 20) - }) - - // `'name|count': 'value'` - it('name|count', function() { - var data = Mock.mock({ - 'name|10': '★号' - }) - expect(data.name).to.be.a('string') - .that.have.length(20) - }) - }) - describe('Number', function() { - // `'name|+step': value` - it('name|+step', function() { - var data = Mock.mock({ - 'list|10': [{ - 'name|+1': 100 - }] - }) - expect(data.list).to.be.an('array').with.length(10) - _.each(data.list, function(item, index) { - expect(item).to.have.property('name') - .that.be.a('number') - if (index === 0) expect(item.name).to.equal(100) - else expect(item.name).to.equal( - data.list[index - 1].name + 1 - ) - }) - }) - - // `'name|min-max': value` - it('name|min-max', function() { - var data = Mock.mock({ - 'name|1-100': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(1, 100) - }) - it('name|max-min', function() { - var data = Mock.mock({ - 'name|100-1': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(1, 100) - }) - it('name|-min--max', function() { - var data = Mock.mock({ - 'name|-100--1': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(-100, -1) - }) - it('name|-max--min', function() { - var data = Mock.mock({ - 'name|-1--100': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(-100, -1) - }) - it('name|min-min', function() { - var data = Mock.mock({ - 'name|10-10': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').equal(10) - }) - it('name|count', function() { - var data = Mock.mock({ - 'name|10': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').equal(10) - }) - - // `'name|min-max.dmin-dmax': value` - - // 1 整数部分 2 小数部分 - var RE_FLOAT = /([\+\-]?\d+)\.?(\d+)?/ - - function validNumber(number, min, max, dmin, dmax) { - expect(number).to.be.a('number') - RE_FLOAT.lastIndex = 0 - var parts = RE_FLOAT.exec('' + number) - expect(+parts[1]).to.be.a('number').within(min, max) - expect(parts[2]).to.have.length.within(dmin, dmax) - } - - it('name|min-max.dmin-dmax', function() { - var data = Mock.mock({ - 'name|1-10.1-10': 123.456 - }) - validNumber(data.name, 1, 10, 1, 10) - }) - it('name|min-max.dcount', function() { - var data = Mock.mock({ - 'name|1-10.10': 123.456 - }) - validNumber(data.name, 1, 10, 10, 10) - }) - it('name|count.dmin-dmax', function() { - var data = Mock.mock({ - 'name|10.1-10': 123.456 - }) - validNumber(data.name, 10, 10, 1, 10) - }) - it('name|count.dcount', function() { - var data = Mock.mock({ - 'name|10.10': 123.456 - }) - validNumber(data.name, 10, 10, 10, 10) - }) - it('name|.dmin-dmax', function() { - var data = Mock.mock({ - 'name|.1-10': 123.456 - }) - validNumber(data.name, 123, 123, 1, 10) - }) - it('name|.dcount', function() { - var data = Mock.mock({ - 'name|.10': 123.456 - }) - validNumber(data.name, 123, 123, 10, 10) - }) - }) - describe('Boolean', function() { - // `'name|1': value` - it('name|1', function() { - var data = Mock.mock({ - 'name|1': true - }) - expect(data).to.have.property('name') - .that.be.a('boolean') - }) - - // `'name|min-max': value` - it('name|min-max', function() { - var data = Mock.mock({ - 'name|8-2': true - }) - expect(data).to.have.property('name') - .that.be.a('boolean') - }) - }) - describe('Object', function() { - var methods = { - GET: '@URL', - POST: '@URL', - HEAD: '@URL', - PUT: '@URL', - DELETE: '@URL' - } - var methodCount, tpl, data - - // `'name|min-max': {}` - it('name|min-max', function() { - methodCount = _.keys(methods).length // 5 - for (var min = 0, max; min <= methodCount + 1; min++) { - tpl = {} - max = Mock.Random.integer(0, methodCount) - - // methods|0-? |1-? |2-? |3-? |4-? |5-? |6-? - tpl['methods|' + min + '-' + max] = methods - data = Mock.mock(tpl) - expect(_.keys(data.methods)).to.have.length - .that.within(Math.min(min, max), Math.max(min, max)) - } - }) - - // `'name|count': {}` - it('name|count', function() { - methodCount = _.keys(methods).length // 5 - for (var count = 0; count <= methodCount + 1; count++) { - tpl = {} - tpl['methods|' + count] = methods - data = Mock.mock(tpl) - expect(_.keys(data.methods)).to.have.length( - Math.min(count, methodCount) - ) - } - }) - }) - describe('Array', function() { - // `'name': [{}, {} ...]` - it('name', function() { - var value = [{ - foo: 'foo' - }, { - bar: 'bar' - }, { - foobar: 'foobar' - }] - var data = Mock.mock({ - name: value - }) - expect(data).to.have.property('name') - .that.be.an('array').with.length(3) - .that.not.equal(value) - expect(data).to.have.property('name') - - for (var i = 0; i < data.name.length; i++) { - expect(data.name[i]).to.not.equal(value[i]) - expect(data.name[i]).to.deep.equal(value[i]) - } - }) - - // `'name|1': [{}, {} ...]` - it('name|1: [1, 2, 4, 8]', function() { - // number array - var value = [1, 2, 4, 8] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('number') - expect(value).to.include(data.name) - }) - it('name|1: ["GET", "POST", "HEAD", "DELETE"]', function() { - // string array - var value = ['GET', 'POST', 'HEAD', 'DELETE'] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('string') - expect(value).to.include(data.name) - }) - it('name|1 [{}]', function() { - // object array - var value = [{}] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('object') - .that.deep.equal({}) - expect(data.name).to.not.equal(value[0]) - }) - it('name|1 [{}, {}, {}]', function() { - // object array - var data = Mock.mock({ - 'name|1': [{}, {}, {}] - }) - expect(data).to.have.property('name') - .that.be.a('object') - .that.deep.equal({}) - }) - it('name|1 [{}, {}, {}]', function() { - // object array - var value = [{ - method: 'GET' - }, { - method: 'POST' - }, { - method: 'HEAD' - }, { - method: 'DELETE' - }] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('object') - .that.have.property('method') - .that.be.a('string') - expect(_.pluck(value, 'method')).include(data.name.method) - }) - - // `'name|+1': [{}, {} ...]` - it('name|+1: ["a", "b", "c"]', function() { - var data = Mock.mock({ - 'list|5': [{ - 'name|+1': ['a', 'b', 'c'] - }] - }) - expect(data).to.have.property('list') - .that.be.an('array').with.length(5) - expect(data.list[0].name).to.equal('a') - expect(data.list[1].name).to.equal('b') - expect(data.list[2].name).to.equal('c') - expect(data.list[3].name).to.equal('a') - expect(data.list[4].name).to.equal('b') - }) - it('name|+1: ["@integer", "@email", "@boolean"]', function() { - var data = Mock.mock({ - 'list|5-10': [{ - 'name|+1': ['@integer', '@email', '@boolean'] - }] - }) - expect(data).to.have.property('list') - .that.be.an('array').have.length.within(5, 10) - expect(data.list[0].name).to.be.a('number') - expect(data.list[1].name).to.be.a('string') - expect(data.list[2].name).to.be.a('boolean') - expect(data.list[3].name).to.be.a('number') - expect(data.list[4].name).to.be.a('string') - }) - - // `'name|min-max': [{}, {} ...]` - it('name|min-min', function() { - var data = Mock.mock({ - 'name|1-1': [{}] - }) - expect(data.name).to.be.an('array').with.length(1) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|min-max [{}]', function() { - var data = Mock.mock({ - 'name|1-10': [{}] - }) - expect(data.name).to.be.an('array').with.length.within(1, 10) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|max-min [{}]', function() { - var data = Mock.mock({ - 'name|10-1': [{}] - }) - expect(data.name).to.be.an('array').with.length.within(1, 10) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|min-max [{}, {}]', function() { - var data = Mock.mock({ - 'name|1-10': [{}, {}] - }) - expect(data.name).to.be.an('array').with.length.within(2, 20) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|max-min [{}, {}]', function() { - var data = Mock.mock({ - 'name|10-1': [{}, {}] - }) - expect(data.name).to.be.an('array').with.length.within(2, 20) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - - // `'name|count': [{}, {} ...]` - it('name|count [{}]', function() { - var data = Mock.mock({ - 'name|10': [{}] - }) - expect(data.name).to.be.an('array').with.length(10) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|count [{}, {}]', function() { - var data = Mock.mock({ - 'name|10': [{}, {}] - }) - expect(data.name).to.be.an('array').with.length(20) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - }) - describe('Function', function() { - // `'name': function(){}` - it('name: function', function() { - var data = Mock.mock({ - prop: 'hello', - name: function( /*root, path*/ ) { - return this.prop - } - }) - expect(data).to.have.property('name') - .that.be.a('string').equal('hello') - }) - - // 无序的 function - it('name: function', function() { - var data = Mock.mock({ - name2: function() { - return this.prop * 2 - }, - prop: 1, - name4: function() { - return this.prop * 4 - } - }) - expect(data.name2).to.equal(2) - expect(data.name4).to.equal(4) - }) - - // #25 改变了非函数属性的顺序,查找起来不方便 - it('name: function', function() { - var data = Mock.mock({ - name: function() {}, - first: '', - second: '', - third: '' - }) - var keys = _.keys(data) - expect(keys[0]).equal('first') - expect(keys[1]).equal('second') - expect(keys[2]).equal('third') - expect(keys[3]).equal('name') - }) - }) - - /* - 按照 http://www.regexr.com/ 的 Reference 设计测试用例。 - https://github.com/nuysoft/Mock/blob/7c1e3a686bcc515855f1f583d70ae0ee89acc65e/test/regexp.js#L120 - */ - describe('RegExp', function() { - function validRegExp(regexp) { - if (arguments.length > 1) { - for (var i = 0; i < arguments.length; i++) { - validRegExp(arguments[i]) - } - } - - it(regexp, function() { - var data = Mock.mock(regexp) - this.test.title += ' => ' + data - expect(regexp.test(data)).to.be.true - }) - } - - describe('Character Classes', function() { - validRegExp(/./) - validRegExp( - /[a-z]/, - /[A-Z]/, - /[0-9]/ - ) - validRegExp( - /\w/, - /\W/, - /\s/, - /\S/, - /\d/, - /\D/ - ) - validRegExp( - /[.]/, - /[\w]/, - /[\W]/, - /[\s]/, - /[\S]/, - /[\d]/, - /[\D]/ - ) - validRegExp( - /[^.]/, - /[^\w]/, - /[^\W]/, - /[^\s]/, - /[^\S]/, - /[^\d]/, - /[^\D]/ - ) - }) - describe('Quantifiers', function() { - validRegExp( - /\d?/, - /\d+/, - /\d*/ - ) - - // {n}, {n,}, {n,m}, {0,1} ?, {1,0} +, {0,} * - validRegExp( - /\d{5}/, - /\d{5,}/, - /\d{5,10}/, - /\d{0,1}/, - /\d{0,}/ - ) - - validRegExp(/[\u4E00-\u9FA5]+/) // 汉字 - }) - describe('Anchors', function() { - validRegExp(/^/) - validRegExp(/$/) - validRegExp(/^foo/) - validRegExp(/foo$/) - validRegExp(/\bfoo/) - validRegExp(/\Bfoo/) - }) - - describe('Escaped Characters', function() { - validRegExp(/\000/) - validRegExp(/\xFF/) - validRegExp(/\uFFFF/) - validRegExp(/\cI/) - }) - - describe('Groups & Lookaround', function() { - validRegExp(/(ABC)/) - validRegExp(/(ABC)\1/) - validRegExp(/(?:ABC)/) - validRegExp(/(?=ABC)/) - validRegExp(/(?!ABC)/) - // validRegExp(/(?<=ABC)/) - // validRegExp(/(? Date: Wed, 9 Jun 2021 16:46:48 +0800 Subject: [PATCH 02/65] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E5=9F=BA=E6=9C=AC?= =?UTF-8?q?=E8=A7=A3=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 10 +- dist/mock.js | 8393 +++++++++++++++++++++++ package.json | 55 + rollup.config.dev.js | 28 + src/dependencies.png | Bin 0 -> 344355 bytes src/mock.js | 67 + src/mock/RE_KEY.svg | 83 + src/mock/constant.js | 33 + src/mock/handler.js | 537 ++ src/mock/parser.js | 71 + src/mock/random/address.js | 48 + src/mock/random/address_ch.json | 3998 +++++++++++ src/mock/random/address_dict.js | 78 + src/mock/random/basic.js | 29 + src/mock/random/basic/boolean.js | 10 + src/mock/random/basic/character.js | 17 + src/mock/random/basic/float.js | 19 + src/mock/random/basic/number.js | 17 + src/mock/random/basic/range.js | 17 + src/mock/random/basic/string.js | 30 + src/mock/random/color.js | 137 + src/mock/random/color_convert.js | 177 + src/mock/random/color_dict.js | 76 + src/mock/random/date.js | 90 + src/mock/random/date/_patternLetters.js | 60 + src/mock/random/helper.js | 100 + src/mock/random/helper/pick.js | 0 src/mock/random/image.js | 310 + src/mock/random/index.js | 31 + src/mock/random/misc.js | 105 + src/mock/random/name.js | 87 + src/mock/random/text.js | 121 + src/mock/random/web.js | 76 + src/mock/regexp/handler.js | 369 + src/mock/regexp/index.js | 6 + src/mock/regexp/parser.js | 570 ++ src/mock/schema/index.js | 1 + src/mock/schema/schema.js | 47 + src/mock/util.js | 126 + src/mock/valid/index.js | 1 + src/mock/valid/valid.js | 445 ++ src/mock/xhr/index.js | 1 + src/mock/xhr/xhr.js | 442 ++ yarn.lock | 2005 ++++++ 44 files changed, 18914 insertions(+), 9 deletions(-) create mode 100644 dist/mock.js create mode 100644 package.json create mode 100644 rollup.config.dev.js create mode 100644 src/dependencies.png create mode 100644 src/mock.js create mode 100644 src/mock/RE_KEY.svg create mode 100644 src/mock/constant.js create mode 100644 src/mock/handler.js create mode 100644 src/mock/parser.js create mode 100644 src/mock/random/address.js create mode 100644 src/mock/random/address_ch.json create mode 100644 src/mock/random/address_dict.js create mode 100644 src/mock/random/basic.js create mode 100644 src/mock/random/basic/boolean.js create mode 100644 src/mock/random/basic/character.js create mode 100644 src/mock/random/basic/float.js create mode 100644 src/mock/random/basic/number.js create mode 100644 src/mock/random/basic/range.js create mode 100644 src/mock/random/basic/string.js create mode 100644 src/mock/random/color.js create mode 100644 src/mock/random/color_convert.js create mode 100644 src/mock/random/color_dict.js create mode 100644 src/mock/random/date.js create mode 100644 src/mock/random/date/_patternLetters.js create mode 100644 src/mock/random/helper.js create mode 100644 src/mock/random/helper/pick.js create mode 100644 src/mock/random/image.js create mode 100644 src/mock/random/index.js create mode 100644 src/mock/random/misc.js create mode 100644 src/mock/random/name.js create mode 100644 src/mock/random/text.js create mode 100644 src/mock/random/web.js create mode 100644 src/mock/regexp/handler.js create mode 100644 src/mock/regexp/index.js create mode 100644 src/mock/regexp/parser.js create mode 100644 src/mock/schema/index.js create mode 100644 src/mock/schema/schema.js create mode 100644 src/mock/util.js create mode 100644 src/mock/valid/index.js create mode 100644 src/mock/valid/valid.js create mode 100644 src/mock/xhr/index.js create mode 100644 src/mock/xhr/xhr.js create mode 100644 yarn.lock diff --git a/.gitignore b/.gitignore index c200f90f..b512c09d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1 @@ -bak -.DS_Store -.*.swp -.idea -node_modules -bower_components -coverage -PLAN.md -npm-debug.log \ No newline at end of file +node_modules \ No newline at end of file diff --git a/dist/mock.js b/dist/mock.js new file mode 100644 index 00000000..ad4eb4f0 --- /dev/null +++ b/dist/mock.js @@ -0,0 +1,8393 @@ +var Mock = (function () { + 'use strict'; + + /* + ## Constant + + 常量集合。 + */ + /* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 + */ + var constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ + }; + + /* + ## Utilities + */ + var Util$1 = {}; + + Util$1.extend = function extend() { + var target = arguments[0] || {}, + i = 1, + length = arguments.length, + options, name, src, copy, clone; + + if (length === 1) { + target = this; + i = 0; + } + + for (; i < length; i++) { + options = arguments[i]; + if (!options) continue + + for (name in options) { + src = target[name]; + copy = options[name]; + + if (target === copy) continue + if (copy === undefined) continue + + if (Util$1.isArray(copy) || Util$1.isObject(copy)) { + if (Util$1.isArray(copy)) clone = src && Util$1.isArray(src) ? src : []; + if (Util$1.isObject(copy)) clone = src && Util$1.isObject(src) ? src : {}; + + target[name] = Util$1.extend(clone, copy); + } else { + target[name] = copy; + } + } + } + + return target + }; + + Util$1.each = function each(obj, iterator, context) { + var i, key; + if (this.type(obj) === 'number') { + for (i = 0; i < obj; i++) { + iterator(i, i); + } + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break + } + } + }; + + Util$1.type = function type(obj) { + return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase() + }; + + Util$1.each('String Object Array RegExp Function'.split(' '), function(value) { + Util$1['is' + value] = function(obj) { + return Util$1.type(obj) === value.toLowerCase() + }; + }); + + Util$1.isObjectOrArray = function(value) { + return Util$1.isObject(value) || Util$1.isArray(value) + }; + + Util$1.isNumeric = function(value) { + return !isNaN(parseFloat(value)) && isFinite(value) + }; + + Util$1.keys = function(obj) { + var keys = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) keys.push(key); + } + return keys; + }; + Util$1.values = function(obj) { + var values = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) values.push(obj[key]); + } + return values; + }; + + /* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 + */ + Util$1.heredoc = function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn.toString() + .replace(/^[^\/]+\/\*!?/, '') + .replace(/\*\/[^\/]+$/, '') + .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim() + }; + + Util$1.noop = function() {}; + + var util = Util$1; + + const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); + }; + const random = function (min, max) { + return Math.random() * (max - min) + min; + }; + + // 返回一个随机的整数。 + const integer = function (min, max) { + min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; + max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 + return Math.round(random(min, max)); + }; + const natural = function (min, max) { + return Math.abs(integer(min, max)); + }; + + const boolean = function (min, max, cur) { + if (cur) { + min = isNumber(min) ? parseInt(min, 10) : 1; + max = isNumber(max) ? parseInt(max, 10) : 1; + return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + } + return Math.random() >= 0.5; + }; + + const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", + alpha: undefined.lower + undefined.upper, + default: undefined.lower + undefined.upper + undefined.number + undefined.symbol, + }; + const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); + }; + + const string = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map((i) => character(pool)).join(""); + }; + + const range$1 = function (...args) { + // range( stop ) + let start, stop, step; + if (arguments.length <= 1) { + [stop] = args; + return [...Array(stop).keys()]; + } + + // range( start, stop ,step=1) + // range(10,20,3) = [10,13,16,19] + [start, stop, step = 1] = args; + let arrayLength = Math.ceil((stop - start) / step); + return [...Array(arrayLength).keys()].map((index) => { + return start + index * step; + }); + }; + + const float = function (min, max, dmin, dmax) { + dmin = isNumber(dmin) ? dmin : 0; + dmax = isNumber(dmax) ? dmax : 17; + dmin = Math.max(Math.min(dmin, 17), 0); + dmax = Math.max(Math.min(dmax, 17), 0); + let dcount = natural(dmin, dmax); + var ret = + integer(min, max) + + "." + + [...Array(dcount).keys()] + .map((i) => { + // 最后一位不能为 0,所以必须进行处理 + return i < dcount - 1 ? this.character("number") : this.character("123456789"); + }) + .join(""); + return parseFloat(ret, 10); + }; + + /* + ## Basics + */ + var basic = { + // 返回一个随机的布尔值。 + boolean, + bool: boolean, + integer, + int: integer, + // 返回一个随机的自然数(大于等于 0 的整数)。 + natural, + + // 返回一个随机的浮点数。 + float, + // 返回一个随机字符。 + character, + char: character, + // 返回一个随机字符串。 + string, + str: string, + // 返回一个整型数组。 + range: range$1, + }; + + var _patternLetters = patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", + }; + + /* + ## Date + */ + const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + + var date = { + // 日期占位符集合。 + _patternLetters, + // 日期占位符正则。 + _rformat: reRule, + // 格式化日期。 + _formatDate: function (date, format) { + return format.replace( + this._rformat, + function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = patternLetters[flag]; + return typeof targetPattern === "function" + ? targetPattern(date) + : targetPattern in patternLetters + ? creatNewSubString($0, targetPattern) + : date[targetPattern](); + } + ); + }, + // 生成一个随机的 Date 对象。 + _randomDate: function (min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + }, + // 返回一个随机的日期字符串。 + date: function (format = "yyyy-MM-dd") { + return this._formatDate(this._randomDate(), format); + }, + // 返回一个随机的时间字符串。 + time: function (format = "HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + // 返回一个随机的日期和时间字符串。 + datetime: function (format = "yyyy-MM-dd HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + + // 返回当前的日期和时间字符串。 + now: function (unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } + + return this._formatDate(date, format); + }, + // KonghaYao 新增函数:生成固定时间段的时间戳 + timestamp: function (min, max) { + if (min instanceof Date && max instanceof Date) + return this._randomDate(min, max); + return this._randomDate(); + }, + }; + + /* global document */ + /* + ## Image + */ + var image = { + // 常见的广告宽高 + _adSize: [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600", + ], + // 常见的屏幕宽高 + _screenSize: [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600", + ], + // 常见的视频宽高 + _videoSize: ["720x480", "768x576", "1280x720", "1920x1080"], + /* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 + */ + image: function (...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = this.pick(this._adSize); + + if (background && ~background.indexOf("#")) + background = background.slice(1); + if (foreground && ~foreground.indexOf("#")) + foreground = foreground.slice(1); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return ( + "http://dummyimage.com/" + + size + + (background ? "/" + background : "") + + (foreground ? "/" + foreground : "") + + (format ? "." + format : "") + + (text ? "&text=" + text : "") + ); + }, + img: function () { + return this.image.apply(this, arguments); + }, + + /* + BrandColors + http://brandcolors.net/ + A collection of major brand color codes curated by Galen Gidman. + 大牌公司的颜色集合 + + // 获取品牌和颜色 + $('h2').each(function(index, item){ + item = $(item) + console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') + }) + */ + _brandColors: { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: "#ff6138", + Adobe: "#ff0000", + Aim: "#fcd20b", + Amazon: "#e47911", + Android: "#a4c639", + "Angie's List": "#7fbb00", + AOL: "#0060a3", + Atlassian: "#003366", + Behance: "#053eff", + "Big Cartel": "#97b538", + bitly: "#ee6123", + Blogger: "#fc4f08", + Boeing: "#0039a6", + "Booking.com": "#003580", + Carbonmade: "#613854", + Cheddar: "#ff7243", + "Code School": "#3d4944", + Delicious: "#205cc0", + Dell: "#3287c1", + Designmoo: "#e54a4f", + Deviantart: "#4e6252", + "Designer News": "#2d72da", + Devour: "#fd0001", + DEWALT: "#febd17", + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: "#ea4c89", + Dropbox: "#3d9ae8", + Drupal: "#0c76ab", + Dunked: "#2a323a", + eBay: "#89c507", + Ember: "#f05e1b", + Engadget: "#00bdf6", + Envato: "#528036", + Etsy: "#eb6d20", + Evernote: "#5ba525", + "Fab.com": "#dd0017", + Facebook: "#3b5998", + Firefox: "#e66000", + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: "#5b9a68", + Foursquare: "#25a0ca", + Garmin: "#007cc3", + GetGlue: "#2d75a2", + Gimmebar: "#f70078", + GitHub: "#171515", + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: "#f77f00", + Groupon: "#82b548", + "Hacker News": "#ff6600", + HelloWallet: "#0085ca", + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: "#003366", + Houzz: "#73ba37", + HTML5: "#ec6231", + IKEA: "#ffcc33", + IMDb: "#f3ce13", + Instagram: "#3f729b", + Intel: "#0071c5", + Intuit: "#365ebf", + Kickstarter: "#76cc1e", + kippt: "#e03500", + Kodery: "#00af81", + LastFM: "#c3000d", + LinkedIn: "#0e76a8", + Livestream: "#cf0005", + Lumo: "#576396", + Mixpanel: "#a086d3", + Meetup: "#e51937", + Nokia: "#183693", + NVIDIA: "#76b900", + Opera: "#cc0f16", + Path: "#e41f11", + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: "#0000e6", + Pinterest: "#c8232c", + PlayStation: "#665cbe", + Pocket: "#ee4056", + Prezi: "#318bff", + Pusha: "#0f71b4", + Quora: "#a82400", + "QUOTE.fm": "#66ceff", + Rdio: "#008fd5", + Readability: "#9c0000", + "Red Hat": "#cc0000", + Resource: "#7eb400", + Rockpack: "#0ba6ab", + Roon: "#62b0d9", + RSS: "#ee802f", + Salesforce: "#1798c1", + Samsung: "#0c4da2", + Shopify: "#96bf48", + Skype: "#00aff0", + Snagajob: "#f47a20", + Softonic: "#008ace", + SoundCloud: "#ff7700", + "Space Box": "#f86960", + Spotify: "#81b71a", + Sprint: "#fee100", + Squarespace: "#121212", + StackOverflow: "#ef8236", + Staples: "#cc0000", + "Status Chart": "#d7584f", + Stripe: "#008cdd", + StudyBlue: "#00afe1", + StumbleUpon: "#f74425", + "T-Mobile": "#ea0a8e", + Technorati: "#40a800", + "The Next Web": "#ef4423", + Treehouse: "#5cb868", + Trulia: "#5eab1f", + Tumblr: "#34526f", + "Twitch.tv": "#6441a5", + Twitter: "#00acee", + TYPO3: "#ff8700", + Ubuntu: "#dd4814", + Ustream: "#3388ff", + Verizon: "#ef1d1d", + Vimeo: "#86c9ef", + Vine: "#00a478", + Virb: "#06afd8", + "Virgin Media": "#cc0000", + Wooga: "#5b009c", + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: "#2b88d9", + XBOX: "#9bc848", + XING: "#126567", + "Yahoo!": "#720e9e", + Yandex: "#ffcc00", + Yelp: "#c41200", + YouTube: "#c4302b", + Zalongo: "#5498dc", + Zendesk: "#78a300", + Zerply: "#9dcc7a", + Zootool: "#5e8b1d", + }, + _brandNames: function () { + var brands = []; + for (var b in this._brandColors) { + brands.push(b); + } + return brands; + }, + /* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, + */ + dataImage: function (size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = this.pick(this._adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = this._brandColors[this.pick(this._brandNames())], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); + }, + }; + + /* + ## Color Convert + + http://blog.csdn.net/idfaya/article/details/6770414 + 颜色空间RGB与HSV(HSL)的转换 + */ + // https://github.com/harthur/color-convert/blob/master/conversions.js + var color_convert = { + rgb2hsl: function rgb2hsl(rgb) { + var r = rgb[0] / 255, + g = rgb[1] / 255, + b = rgb[2] / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, s, l; + + if (max == min) + h = 0; + else if (r == max) + h = (g - b) / delta; + else if (g == max) + h = 2 + (b - r) / delta; + else if (b == max) + h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) + h += 360; + + l = (min + max) / 2; + + if (max == min) + s = 0; + else if (l <= 0.5) + s = delta / (max + min); + else + s = delta / (2 - max - min); + + return [h, s * 100, l * 100]; + }, + rgb2hsv: function rgb2hsv(rgb) { + var r = rgb[0], + g = rgb[1], + b = rgb[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, s, v; + + if (max === 0) + s = 0; + else + s = (delta / max * 1000) / 10; + + if (max == min) + h = 0; + else if (r == max) + h = (g - b) / delta; + else if (g == max) + h = 2 + (b - r) / delta; + else if (b == max) + h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) + h += 360; + + v = ((max / 255) * 1000) / 10; + + return [h, s, v]; + }, + hsl2rgb: function hsl2rgb(hsl) { + var h = hsl[0] / 360, + s = hsl[1] / 100, + l = hsl[2] / 100, + t1, t2, t3, rgb, val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) + t2 = l * (1 + s); + else + t2 = l + s - l * s; + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) t3++; + if (t3 > 1) t3--; + + if (6 * t3 < 1) + val = t1 + (t2 - t1) * 6 * t3; + else if (2 * t3 < 1) + val = t2; + else if (3 * t3 < 2) + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + else + val = t1; + + rgb[i] = val * 255; + } + + return rgb; + }, + hsl2hsv: function hsl2hsv(hsl) { + var h = hsl[0], + s = hsl[1] / 100, + l = hsl[2] / 100, + sv, v; + l *= 2; + s *= (l <= 1) ? l : 2 - l; + v = (l + s) / 2; + sv = (2 * s) / (l + s); + return [h, sv * 100, v * 100]; + }, + hsv2rgb: function hsv2rgb(hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + + v = 255 * v; + + switch (hi) { + case 0: + return [v, t, p] + case 1: + return [q, v, p] + case 2: + return [p, v, t] + case 3: + return [p, q, v] + case 4: + return [t, p, v] + case 5: + return [v, p, q] + } + }, + hsv2hsl: function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, l; + + l = (2 - s) * v; + sl = s * v; + sl /= (l <= 1) ? l : 2 - l; + l /= 2; + return [h, sl * 100, l * 100]; + }, + // http://www.140byt.es/keywords/color + rgb2hex: function( + a, // red, as a number from 0 to 255 + b, // green, as a number from 0 to 255 + c // blue, as a number from 0 to 255 + ) { + return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) + }, + hex2rgb: function( + a // take a "#xxxxxx" hex string, + ) { + a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0; + return [a >> 16, a >> 8 & 255, a & 255] + } + }; + + /* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) + */ + var color_dict = { + // name value nicer + navy: { + value: '#000080', + nicer: '#001F3F' + }, + blue: { + value: '#0000ff', + nicer: '#0074D9' + }, + aqua: { + value: '#00ffff', + nicer: '#7FDBFF' + }, + teal: { + value: '#008080', + nicer: '#39CCCC' + }, + olive: { + value: '#008000', + nicer: '#3D9970' + }, + green: { + value: '#008000', + nicer: '#2ECC40' + }, + lime: { + value: '#00ff00', + nicer: '#01FF70' + }, + yellow: { + value: '#ffff00', + nicer: '#FFDC00' + }, + orange: { + value: '#ffa500', + nicer: '#FF851B' + }, + red: { + value: '#ff0000', + nicer: '#FF4136' + }, + maroon: { + value: '#800000', + nicer: '#85144B' + }, + fuchsia: { + value: '#ff00ff', + nicer: '#F012BE' + }, + purple: { + value: '#800080', + nicer: '#B10DC9' + }, + silver: { + value: '#c0c0c0', + nicer: '#DDDDDD' + }, + gray: { + value: '#808080', + nicer: '#AAAAAA' + }, + black: { + value: '#000000', + nicer: '#111111' + }, + white: { + value: '#FFFFFF', + nicer: '#FFFFFF' + } + }; + + /* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() + */ + + + + + var color = { + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 + color: function(name) { + if (name || color_dict[name]) return color_dict[name].nicer + return this.hex() + }, + // #DAC0DE + hex: function() { + var hsv = this._goldenRatioColor(); + var rgb = color_convert.hsv2rgb(hsv); + var hex = color_convert.rgb2hex(rgb[0], rgb[1], rgb[2]); + return hex + }, + // rgb(128,255,255) + rgb: function() { + var hsv = this._goldenRatioColor(); + var rgb = color_convert.hsv2rgb(hsv); + return 'rgb(' + + parseInt(rgb[0], 10) + ', ' + + parseInt(rgb[1], 10) + ', ' + + parseInt(rgb[2], 10) + ')' + }, + // rgba(128,255,255,0.3) + rgba: function() { + var hsv = this._goldenRatioColor(); + var rgb = color_convert.hsv2rgb(hsv); + return 'rgba(' + + parseInt(rgb[0], 10) + ', ' + + parseInt(rgb[1], 10) + ', ' + + parseInt(rgb[2], 10) + ', ' + + Math.random().toFixed(2) + ')' + }, + // hsl(300,80%,90%) + hsl: function() { + var hsv = this._goldenRatioColor(); + var hsl = color_convert.hsv2hsl(hsv); + return 'hsl(' + + parseInt(hsl[0], 10) + ', ' + + parseInt(hsl[1], 10) + ', ' + + parseInt(hsl[2], 10) + ')' + }, + // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + // https://github.com/devongovett/color-generator/blob/master/index.js + // 随机生成一个有吸引力的颜色。 + _goldenRatioColor: function(saturation, value) { + this._goldenRatio = 0.618033988749895; + this._hue = this._hue || Math.random(); + this._hue += this._goldenRatio; + this._hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return [ + this._hue * 360, + saturation * 100, + value * 100 + ] + } + }; + color.color; + color.hex; + color.rgb; + color.rgba; + color.hsl; + color._goldenRatioColor; + + /* + ## Helpers + */ + + var Util = require("../util"); + + var helper = { + // 把字符串的第一个字母转换为大写。 + capitalize: function (word) { + return (word + "").charAt(0).toUpperCase() + (word + "").substr(1); + }, + // 把字符串转换为大写。 + upper: function (str) { + return (str + "").toUpperCase(); + }, + // 把字符串转换为小写。 + lower: function (str) { + return (str + "").toLowerCase(); + }, + // 从数组中随机选取一个元素,并返回。 + pick: function pick(arr, min, max) { + // pick( item1, item2 ... ) + if (!Util.isArray(arr)) { + arr = [].slice.call(arguments); + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + + if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]; + + // pick( [ item1, item2 ... ], min, max ) + return this.shuffle(arr, min, max); + }, + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + + 其他的实现思路: + // https://code.google.com/p/jslibs/wiki/JavascriptTips + result = result.sort(function() { + return Math.random() - 0.5 + }) + */ + shuffle: function shuffle(arr, min, max) { + arr = arr || []; + var old = arr.slice(0), + result = [], + index = 0, + length = old.length; + for (var i = 0; i < length; i++) { + index = this.natural(0, old.length - 1); + result.push(old[index]); + old.splice(index, 1); + } + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; + /* falls through */ + case 3: + min = parseInt(min, 10); + max = parseInt(max, 10); + return result.slice(0, this.natural(min, max)); + } + }, + /* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ + order: function order(array) { + order.cache = order.cache || {}; + + if (arguments.length > 1) array = [].slice.call(arguments, 0); + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (order.cache[templatePath] = order.cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; + }, + }; + + /* + ## Text + + http://www.lipsum.com/ + */ + + + + function range(defaultMin, defaultMax, min, max) { + return min === undefined ? basic.natural(defaultMin, defaultMax) : // () + max === undefined ? min : // ( len ) + basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max ) + } + + var text = { + // 随机生成一段文本。 + paragraph: function(min, max) { + var len = range(3, 7, min, max); + var result = []; + for (var i = 0; i < len; i++) { + result.push(this.sentence()); + } + return result.join(' ') + }, + // + cparagraph: function(min, max) { + var len = range(3, 7, min, max); + var result = []; + for (var i = 0; i < len; i++) { + result.push(this.csentence()); + } + return result.join('') + }, + // 随机生成一个句子,第一个单词的首字母大写。 + sentence: function(min, max) { + var len = range(12, 18, min, max); + var result = []; + for (var i = 0; i < len; i++) { + result.push(this.word()); + } + return helper.capitalize(result.join(' ')) + '.' + }, + // 随机生成一个中文句子。 + csentence: function(min, max) { + var len = range(12, 18, min, max); + var result = []; + for (var i = 0; i < len; i++) { + result.push(this.cword()); + } + + return result.join('') + '。' + }, + // 随机生成一个单词。 + word: function(min, max) { + var len = range(3, 10, min, max); + var result = ''; + for (var i = 0; i < len; i++) { + result += basic.character('lower'); + } + return result + }, + // 随机生成一个或多个汉字。 + cword: function(pool, min, max) { + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; + + var len; + switch (arguments.length) { + case 0: // () + pool = DICT_KANZI; + len = 1; + break + case 1: // ( pool ) + if (typeof arguments[0] === 'string') { + len = 1; + } else { + // ( length ) + len = pool; + pool = DICT_KANZI; + } + break + case 2: + // ( pool, length ) + if (typeof arguments[0] === 'string') { + len = min; + } else { + // ( min, max ) + len = this.natural(pool, min); + pool = DICT_KANZI; + } + break + case 3: + len = this.natural(min, max); + break + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += pool.charAt(this.natural(0, pool.length - 1)); + } + return result + }, + // 随机生成一句标题,其中每个单词的首字母大写。 + title: function(min, max) { + var len = range(3, 7, min, max); + var result = []; + for (var i = 0; i < len; i++) { + result.push(this.capitalize(this.word())); + } + return result.join(' ') + }, + // 随机生成一句中文标题。 + ctitle: function(min, max) { + var len = range(3, 7, min, max); + var result = []; + for (var i = 0; i < len; i++) { + result.push(this.cword()); + } + return result.join('') + } + }; + text.paragraph; + text.cparagraph; + text.sentence; + text.csentence; + text.word; + text.cword; + text.title; + text.ctitle; + + /* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) + */ + var name = { + // 随机生成一个常见的英文名。 + first: function() { + var names = [ + // male + "James", "John", "Robert", "Michael", "William", + "David", "Richard", "Charles", "Joseph", "Thomas", + "Christopher", "Daniel", "Paul", "Mark", "Donald", + "George", "Kenneth", "Steven", "Edward", "Brian", + "Ronald", "Anthony", "Kevin", "Jason", "Matthew", + "Gary", "Timothy", "Jose", "Larry", "Jeffrey", + "Frank", "Scott", "Eric" + ].concat([ + // female + "Mary", "Patricia", "Linda", "Barbara", "Elizabeth", + "Jennifer", "Maria", "Susan", "Margaret", "Dorothy", + "Lisa", "Nancy", "Karen", "Betty", "Helen", + "Sandra", "Donna", "Carol", "Ruth", "Sharon", + "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", + "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", + "Brenda", "Amy", "Anna" + ]); + return this.pick(names) + // or this.capitalize(this.word()) + }, + // 随机生成一个常见的英文姓。 + last: function() { + var names = [ + "Smith", "Johnson", "Williams", "Brown", "Jones", + "Miller", "Davis", "Garcia", "Rodriguez", "Wilson", + "Martinez", "Anderson", "Taylor", "Thomas", "Hernandez", + "Moore", "Martin", "Jackson", "Thompson", "White", + "Lopez", "Lee", "Gonzalez", "Harris", "Clark", + "Lewis", "Robinson", "Walker", "Perez", "Hall", + "Young", "Allen" + ]; + return this.pick(names) + // or this.capitalize(this.word()) + }, + // 随机生成一个常见的英文姓名。 + name: function(middle) { + return this.first() + ' ' + + (middle ? this.first() + ' ' : '') + + this.last() + }, + /* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + */ + cfirst: function() { + var names = ( + '王 李 张 刘 陈 杨 赵 黄 周 吴 ' + + '徐 孙 胡 朱 高 林 何 郭 马 罗 ' + + '梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' + + '程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' + + '苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' + + '余 潘 杜 戴 夏 锺 汪 田 任 姜 ' + + '范 方 石 姚 谭 廖 邹 熊 金 陆 ' + + '郝 孔 白 崔 康 毛 邱 秦 江 史 ' + + '顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' + + '尹 黎 易 常 武 乔 贺 赖 龚 文' + ).split(' '); + return this.pick(names) + }, + /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + */ + clast: function() { + var names = ( + '伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' + + '洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' + + '平 刚 桂英' + ).split(' '); + return this.pick(names) + }, + // 随机生成一个常见的中文姓名。 + cname: function() { + return this.cfirst() + this.clast() + } + }; + name.first; + name.last; + name.name; + name.cfirst; + name.clast; + name.cname; + + /* + ## Web + */ + var web = { + /* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers + */ + url: function(protocol, host) { + return (protocol || this.protocol()) + '://' + // protocol? + (host || this.domain()) + // host? + '/' + this.word() + }, + // 随机生成一个 URL 协议。 + protocol: function() { + return this.pick( + // 协议簇 + 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ') + ) + }, + // 随机生成一个域名。 + domain: function(tld) { + return this.word() + '.' + (tld || this.tld()) + }, + /* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) + */ + tld: function() { // Top Level Domain + return this.pick( + ( + // 域名后缀 + 'com net org edu gov int mil cn ' + + // 国内域名 + 'com.cn net.cn gov.cn org.cn ' + + // 中文国内域名 + '中国 中国互联.公司 中国互联.网络 ' + + // 新国际域名 + 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + + // 世界各国域名后缀 + 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' + ).split(' ') + ) + }, + // 随机生成一个邮件地址。 + email: function(domain) { + return this.character('lower') + '.' + this.word() + '@' + + ( + domain || + (this.word() + '.' + this.tld()) + ) + // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld() + // return this.word() + '@' + (domain || this.domain()) + }, + // 随机生成一个 IP 地址。 + ip: function() { + return this.natural(0, 255) + '.' + + this.natural(0, 255) + '.' + + this.natural(0, 255) + '.' + + this.natural(0, 255) + } + }; + web.url; + web.protocol; + web.domain; + web.tld; + web.email; + web.ip; + + var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "471005": "其它区", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" + }; + + /* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 + */ + + // id pid/parentId name children + + // 将扁平数组转化为树状 + function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; + /* jshint -W041 */ + // undefined 时是一个顶级元素 + if (pid === undefined) { + result.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + if (!parent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; + } + // 转化数组内对象的表现形式 + const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = + id.slice(2, 6) === "0000" + ? undefined + : id.slice(4, 6) == "00" + ? id.slice(0, 2) + "0000" + : id.slice(0, 4) + "00"; + return { + id: id, + pid: pid, + name: value, + }; + }); + + const DICT_FIXED = createTree(fixed); + + /* + ## Address + */ + var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; + + var address = { + // 随机生成一个大区。 + region: function () { + return this.pick(REGION); + }, + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + province: function () { + return this.pick(DICT_FIXED).name; + }, + // 随机生成一个(中国)市。 + city: function (prefix) { + var province = this.pick(DICT_FIXED); + var city = this.pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; + }, + // 随机生成一个(中国)县。 + county: function (prefix) { + var province = this.pick(DICT_FIXED); + var city = this.pick(province.children); + var county = this.pick(city.children) || { + name: "-", + }; + return prefix + ? [province.name, city.name, county.name].join(" ") + : county.name; + }, + // 随机生成一个邮政编码(六位数字)。 + zip: function (len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9); + return zip; + }, + + // address: function() {}, + // phone: function() {}, + // areacode: function() {}, + // street: function() {}, + // street_suffixes: function() {}, + // street_suffix: function() {}, + // states: function() {}, + // state: function() {}, + }; + + /* + ## Miscellaneous + */ + + var misc = { + // Dice + d4: function() { + return this.natural(1, 4) + }, + d6: function() { + return this.natural(1, 6) + }, + d8: function() { + return this.natural(1, 8) + }, + d12: function() { + return this.natural(1, 12) + }, + d20: function() { + return this.natural(1, 20) + }, + d100: function() { + return this.natural(1, 100) + }, + /* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + */ + guid: function() { + var pool = "abcdefABCDEF1234567890", + guid = this.string(pool, 8) + '-' + + this.string(pool, 4) + '-' + + this.string(pool, 4) + '-' + + this.string(pool, 4) + '-' + + this.string(pool, 12); + return guid + }, + uuid: function() { + return this.guid() + }, + /* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) + */ + id: function() { + var id, + sum = 0, + rank = [ + "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" + ], + last = [ + "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" + ]; + + id = this.pick(DICT_FIXED).id + + this.date('yyyyMMdd') + + this.string('number', 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id + }, + + /* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 + */ + increment: function() { + var key = 0; + return function(step) { + return key += (+step || 1) // step? + } + }(), + inc: function(step) { + return this.increment(step) + } + }; + misc.d4; + misc.d6; + misc.d8; + misc.d12; + misc.d20; + misc.d100; + misc.guid; + misc.uuid; + misc.id; + misc.increment; + misc.inc; + + /* + ## Mock.Random + + 工具类,用于生成各种随机数据。 + */ + const Random = Object.assign( + {}, + basic, + date, + image, + color, + text, + name, + web, + address, + helper, + misc + ); + + /* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + + + + + /* jshint -W041 */ + var parser$1 = { + parse: function(name) { + name = name == undefined ? '' : (name + ''); + + var parameters = (name || '').match(constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 + var count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters: parameters, + // 1 min, 2 max + range: range, + min: min, + max: max, + // min-max + count: count, + // 是否有 decimal + decimal: decimal, + dmin: dmin, + dmax: dmax, + // dmin-dimax + dcount: dcount + }; + + for (var r in result) { + if (result[r] != undefined) return result + } + + return {} + } + }; + + // https://github.com/nuysoft/regexp + + function Token(n) { + this.type = n, this.offset = Token.offset(), this.text = Token.text(); + } + + function Alternate(n, l) { + Token.call(this, "alternate"), this.left = n, this.right = l; + } + + function Match(n) { + Token.call(this, "match"), this.body = n.filter(Boolean); + } + + function Group(n, l) { + Token.call(this, n), this.body = l; + } + + function CaptureGroup(n) { + Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), + this.body = n; + } + + function Quantified(n, l) { + Token.call(this, "quantified"), this.body = n, this.quantifier = l; + } + + function Quantifier(n, l) { + Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0; + } + + function CharSet(n, l) { + Token.call(this, "charset"), this.invert = n, this.body = l; + } + + function CharacterRange(n, l) { + Token.call(this, "range"), this.start = n, this.end = l; + } + + function Literal(n) { + Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text; + } + + function Unicode(n) { + Token.call(this, "unicode"), this.code = n.toUpperCase(); + } + + function Hex(n) { + Token.call(this, "hex"), this.code = n.toUpperCase(); + } + + function Octal(n) { + Token.call(this, "octal"), this.code = n.toUpperCase(); + } + + function BackReference(n) { + Token.call(this, "back-reference"), this.code = n.toUpperCase(); + } + + function ControlCharacter(n) { + Token.call(this, "control-character"), this.code = n.toUpperCase(); + } + + var parser = function() { + function n(n, l) { + function u() { + this.constructor = n; + } + u.prototype = l.prototype, n.prototype = new u(); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) { + return "\\x0" + l(n); + }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) { + return "\\x" + l(n); + }).replace(/[\u0180-\u0FFF]/g, function(n) { + return "\\u0" + l(n); + }).replace(/[\u1080-\uFFFF]/g, function(n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; + } + this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, + this.name = "SyntaxError", this.message = e(n, l); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, + l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, + l.seenCR = !0) : (l.column++, l.seenCR = !1); + } + return Mt !== l && (Mt > l && (Mt = 0, Dt = { + line: 1, + column: 1, + seenCR: !1 + }), u(Dt, Mt, l), Mt = l), Dt; + } + function e(n) { + Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, + qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], + t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, + u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, + l = il), l; + } + function i() { + var n, l, u, t, r; + if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), + Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), + null === r && (r = a()); + null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), + null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); + } else qt = n, n = il; else qt = n, n = il; + return n; + } + function a() { + var n; + return n = x(), null === n && (n = Q(), null === n && (n = B())), n; + } + function f() { + var l, u; + return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), + null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; + } + function s() { + var l, u; + return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), + null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; + } + function h() { + var n, l, u; + return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), + null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; + } + function d() { + var n, l, u; + return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, + l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, + n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; + } + function p() { + var n; + return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), + null === n && (n = g(), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), + null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, + 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, + qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, + l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function w() { + var l, u, t, r; + return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), + null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, + 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + } + function A() { + var l, u, t, r; + return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), + null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, + 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + } + function C() { + var l, u; + return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), + null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; + } + function g() { + var l, u; + return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), + null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; + } + function b() { + var l, u; + return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), + null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), + l; + } + function T() { + var l, u, t; + if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, + 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), + qt++) : (t = null, 0 === Wt && e(Il)); else u = il; + return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, + l; + } + function x() { + var l, u, t, r; + return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), + null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), + null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), + null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + } + function y() { + var n, l; + return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, + n = l) : n = l, n; + } + function m() { + var l, u, t; + return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), + null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function R() { + var l, u, t; + return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), + null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function F() { + var l, u, t; + return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), + null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function Q() { + var l, u, t, r, o; + if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), + null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), + null === t && (t = al), null !== t) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), + null === o && (o = U()); + null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), + null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il); + } else qt = l, l = il; else qt = l, l = il; + return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, + 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, + l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, + null === l && (u = null, 0 === Wt && e(du)), l; + } + function U() { + var n; + return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), + n; + } + function E() { + var l, u; + return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), + null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; + } + function G() { + var n; + return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), + null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), + null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), + null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), + null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; + } + function B() { + var n; + return n = j(), null === n && (n = q(), null === n && (n = $())), n; + } + function j() { + var l, u; + return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), + null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; + } + function $() { + var l, u; + return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, + 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, + Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; + } + function q() { + var n; + return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), + null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), + null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), + null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), + null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), + n; + } + function L() { + var l, u; + return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), + null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; + } + function M() { + var l, u; + return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), + null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; + } + function D() { + var l, u; + return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), + null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; + } + function H() { + var l, u; + return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), + null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; + } + function O() { + var l, u; + return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), + null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; + } + function W() { + var l, u; + return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), + null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; + } + function z() { + var l, u; + return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), + null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; + } + function I() { + var l, u; + return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), + null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; + } + function J() { + var l, u; + return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), + null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; + } + function K() { + var l, u; + return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), + null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; + } + function N() { + var l, u; + return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), + null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; + } + function P() { + var l, u; + return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), + null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; + } + function V() { + var l, u; + return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), + null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; + } + function X() { + var l, u; + return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), + null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; + } + function Y() { + var l, u, t; + return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), + null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), + null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function Z() { + var l, u, t; + return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), + null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), + null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function _() { + var l, u, t, r; + if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), + null !== u) { + if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), + null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), + qt++) : (r = null, 0 === Wt && e(mt)); else t = il; + null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il); + } else qt = l, l = il; + return l; + } + function nl() { + var l, u, t, r; + if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), + null !== u) { + if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), + null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), + qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; + null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il); + } else qt = l, l = il; + return l; + } + function ll() { + var l, u, t, r; + if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), + null !== u) { + if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), + null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), + qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; + null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il); + } else qt = l, l = il; + return l; + } + function ul() { + var l, u; + return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), + null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; + } + function tl() { + var l, u, t; + return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), + null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), + null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { + regexp: c + }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) { + return l ? new Alternate(n, l[1]) : n; + }, dl = function(n, l, u) { + return new Match([ n ].concat(l).concat([ u ])); + }, pl = "^", vl = '"^"', wl = function() { + return new Token("start"); + }, Al = "$", Cl = '"$"', gl = function() { + return new Token("end"); + }, bl = function(n, l) { + return new Quantified(n, l); + }, kl = "Quantifier", Tl = function(n, l) { + return l && (n.greedy = !1), n; + }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) { + return new Quantifier(n, l); + }, Ul = ",}", El = '",}"', Gl = function(n) { + return new Quantifier(n, 1/0); + }, Bl = function(n) { + return new Quantifier(n, n); + }, jl = "+", $l = '"+"', ql = function() { + return new Quantifier(1, 1/0); + }, Ll = "*", Ml = '"*"', Dl = function() { + return new Quantifier(0, 1/0); + }, Hl = "?", Ol = '"?"', Wl = function() { + return new Quantifier(0, 1); + }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) { + return +n.join(""); + }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) { + return n; + }, Yl = function(n) { + return new CaptureGroup(n); + }, Zl = "?:", _l = '"?:"', nu = function(n) { + return new Group("non-capture-group", n); + }, lu = "?=", uu = '"?="', tu = function(n) { + return new Group("positive-lookahead", n); + }, ru = "?!", eu = '"?!"', ou = function(n) { + return new Group("negative-lookahead", n); + }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) { + return new CharSet(!!n, l); + }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) { + return new CharacterRange(n, l); + }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) { + return new Literal(n); + }, ku = ".", Tu = '"."', xu = function() { + return new Token("any-character"); + }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() { + return new Token("backspace"); + }, Uu = function() { + return new Token("word-boundary"); + }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() { + return new Token("non-word-boundary"); + }, ju = "\\d", $u = '"\\\\d"', qu = function() { + return new Token("digit"); + }, Lu = "\\D", Mu = '"\\\\D"', Du = function() { + return new Token("non-digit"); + }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() { + return new Token("form-feed"); + }, zu = "\\n", Iu = '"\\\\n"', Ju = function() { + return new Token("line-feed"); + }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() { + return new Token("carriage-return"); + }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() { + return new Token("white-space"); + }, Zu = "\\S", _u = '"\\\\S"', nt = function() { + return new Token("non-white-space"); + }, lt = "\\t", ut = '"\\\\t"', tt = function() { + return new Token("tab"); + }, rt = "\\v", et = '"\\\\v"', ot = function() { + return new Token("vertical-tab"); + }, ct = "\\w", it = '"\\\\w"', at = function() { + return new Token("word"); + }, ft = "\\W", st = '"\\\\W"', ht = function() { + return new Token("non-word"); + }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) { + return new ControlCharacter(n); + }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) { + return new BackReference(n); + }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) { + return new Octal(n.join("")); + }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) { + return new Hex(n.join("")); + }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) { + return new Unicode(n.join("")); + }, $t = function() { + return new Token("null-character"); + }, qt = 0, Lt = 0, Mt = 0, Dt = { + line: 1, + column: 1, + seenCR: !1 + }, Ht = 0, Ot = [], Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl; + throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column); + } + return n(l, Error), { + SyntaxError: l, + parse: u + }; + }(), index = 1, cgs = {}; + + var parser_1 = parser; + + /* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } + + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ + + + + /* + + */ + var Handler$1 = { + extend: util.extend + }; + + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart + /*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] + }*/ + + // ASCII printable code chart + // var LOWER = 'abcdefghijklmnopqrstuvwxyz' + // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + // var NUMBER = '0123456789' + // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' + var LOWER = ascii(97, 122); + var UPPER = ascii(65, 90); + var NUMBER = ascii(48, 57); + var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) + var PRINTABLE = ascii(32, 126); + var SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; + var CHARACTER_CLASSES = { + '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) + '\\W': OTHER.replace('_', ''), + '\\s': SPACE, + '\\S': function() { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ''); + } + return result + }(), + '\\d': NUMBER, + '\\D': LOWER + UPPER + OTHER + }; + + function ascii(from, to) { + var result = ''; + for (var i = from; i <= to; i++) { + result += String.fromCharCode(i); + } + return result + } + + // var ast = RegExpParser.parse(regexp.source) + Handler$1.gen = function(node, result, cache) { + cache = cache || { + guid: 1 + }; + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : + Handler$1.token(node, result, cache) + }; + + Handler$1.extend({ + /* jshint unused:false */ + token: function(node, result, cache) { + switch (node.type) { + case 'start': + case 'end': + return '' + case 'any-character': + return Random.character() + case 'backspace': + return '' + case 'word-boundary': // TODO + return '' + case 'non-word-boundary': // TODO + break + case 'digit': + return Random.pick( + NUMBER.split('') + ) + case 'non-digit': + return Random.pick( + (LOWER + UPPER + OTHER).split('') + ) + case 'form-feed': + break + case 'line-feed': + return node.body || node.text + case 'carriage-return': + break + case 'white-space': + return Random.pick( + SPACE.split('') + ) + case 'non-white-space': + return Random.pick( + (LOWER + UPPER + NUMBER).split('') + ) + case 'tab': + break + case 'vertical-tab': + break + case 'word': // \w [a-zA-Z0-9] + return Random.pick( + (LOWER + UPPER + NUMBER).split('') + ) + case 'non-word': // \W [^a-zA-Z0-9] + return Random.pick( + OTHER.replace('_', '').split('') + ) + } + return node.body || node.text + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function(node, result, cache) { + // node.left/right {} + return this.gen( + Random.boolean() ? node.left : node.right, + result, + cache + ) + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function(node, result, cache) { + result = ''; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result + }, + // () + 'capture-group': function(node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result + }, + // (?:...) + 'non-capture-group': function(node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache) + }, + // (?=p) + 'positive-lookahead': function(node, result, cache) { + // node.body + return this.gen(node.body, result, cache) + }, + // (?!p) + 'negative-lookahead': function(node, result, cache) { + // node.body + return '' + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function(node, result, cache) { + result = ''; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function(node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : + min + Random.integer(3, 7); + return Random.integer(min, max) + }, + /* + + */ + charset: function(node, result, cache) { + // node.invert + if (node.invert) return this['invert-charset'](node, result, cache) + + // node.body [] + var literal = Random.pick(node.body); + return this.gen(literal, result, cache) + }, + 'invert-charset': function(node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case 'literal': + pool = pool.replace(item.body, ''); + break + case 'range': + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ''); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ''); + } + } + } + } + return Random.pick(pool.split('')) + }, + range: function(node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode( + Random.integer(min, max) + ) + }, + literal: function(node, result, cache) { + return node.escaped ? node.body : node.text + }, + // Unicode \u + unicode: function(node, result, cache) { + return String.fromCharCode( + parseInt(node.code, 16) + ) + }, + // 十六进制 \xFF + hex: function(node, result, cache) { + return String.fromCharCode( + parseInt(node.code, 16) + ) + }, + // 八进制 \0 + octal: function(node, result, cache) { + return String.fromCharCode( + parseInt(node.code, 8) + ) + }, + // 反向引用 + 'back-reference': function(node, result, cache) { + return cache[node.code] || '' + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: function() { + var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); + var CONTROL_CHARACTER_UNICODE = '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split(' '); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map + }(), + 'control-character': function(node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code] + } + }); + + var handler$1 = Handler$1; + + var regexp = { + Parser: parser_1, + Handler: handler$1 + }; + regexp.Parser; + regexp.Handler; + + /* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + + */ + + + + + + + + var Handler = { + extend: util.extend + }; + + /* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot + */ + Handler.gen = function(template, name, context) { + /* jshint -W041 */ + name = name == undefined ? '' : (name + ''); + + context = context || {}; + context = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [constant.GUID], + templatePath: context.templatePath || [constant.GUID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template + }; + // console.log('path:', context.path.join('.'), template) + + var rule = parser$1.parse(name); + var type = util.type(template); + var data; + + if (Handler[type]) { + data = Handler[type]({ + // 属性值类型 + type: type, + // 属性值模板 + template: template, + // 属性名 + 生成规则 + name: name, + // 属性名 + parsedName: name ? name.replace(constant.RE_KEY, '$1') : name, + + // 解析后的生成规则 + rule: rule, + // 相关上下文 + context: context + }); + + if (!context.root) context.root = data; + return data + } + + return template + }; + + Handler.extend({ + array: function(options) { + var result = [], + i, ii; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (options.template.length === 0) return result + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!options.rule.parameters) { + for (i = 0; i < options.template.length; i++) { + options.context.path.push(i); + options.context.templatePath.push(i); + result.push( + Handler.gen(options.template[i], i, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (options.rule.min === 1 && options.rule.max === undefined) { + // fix #17 + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = Random.pick( + Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } else { + // 'data|+1': [{}, {}] + if (options.rule.parameters[2]) { + options.template.__order_index = options.template.__order_index || 0; + + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template + })[ + options.template.__order_index % options.template.length + ]; + + options.template.__order_index += +options.rule.parameters[2]; + + options.context.path.pop(); + options.context.templatePath.pop(); + + } else { + // 'data|1-10': [{}] + for (i = 0; i < options.rule.count; i++) { + // 'data|1-10': [{}, {}] + for (ii = 0; ii < options.template.length; ii++) { + options.context.path.push(result.length); + options.context.templatePath.push(ii); + result.push( + Handler.gen(options.template[ii], result.length, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } + } + } + } + return result + }, + object: function(options) { + var result = {}, + keys, fnKeys, key, parsedKey, inc, i; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (options.rule.min != undefined) { + keys = util.keys(options.template); + keys = Random.shuffle(keys); + keys = keys.slice(0, options.rule.count); + for (i = 0; i < keys.length; i++) { + key = keys[i]; + parsedKey = key.replace(constant.RE_KEY, '$1'); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template + }); + options.context.path.pop(); + options.context.templatePath.pop(); + } + + } else { + // 'obj': {} + keys = []; + fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 + for (key in options.template) { + (typeof options.template[key] === 'function' ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Util.keys(options.template) + keys.sort(function(a, b) { + var afn = typeof options.template[a] === 'function' + var bfn = typeof options.template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + for (i = 0; i < keys.length; i++) { + key = keys[i]; + parsedKey = key.replace(constant.RE_KEY, '$1'); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template + }); + options.context.path.pop(); + options.context.templatePath.pop(); + // 'id|+1': 1 + inc = key.match(constant.RE_KEY); + if (inc && inc[2] && util.type(options.template[key]) === 'number') { + options.template[key] += parseInt(inc[2], 10); + } + } + } + return result + }, + number: function(options) { + var result, parts; + if (options.rule.decimal) { // float + options.template += ''; + parts = options.template.split('.'); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parts[0] = options.rule.range ? options.rule.count : parts[0]; + parts[1] = (parts[1] || '').slice(0, options.rule.dcount); + while (parts[1].length < options.rule.dcount) { + parts[1] += ( + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789') + ); + } + result = parseFloat(parts.join('.'), 10); + } else { // integer + // 'grade1|1-100': 1, + result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; + } + return result + }, + boolean: function(options) { + var result; + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template; + return result + }, + string: function(options) { + var result = '', + i, placeholders, ph, phed; + if (options.template.length) { + + // 'foo': '★', + /* jshint -W041 */ + if (options.rule.count == undefined) { + result += options.template; + } + + // 'star|1-5': '★', + for (i = 0; i < options.rule.count; i++) { + result += options.template; + } + // 'email|1-10': '@EMAIL, ', + placeholders = result.match(constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + for (i = 0; i < placeholders.length; i++) { + ph = placeholders[i]; + + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(i--, 1); + continue + } + + phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // + result = phed; + break + } + result = result.replace(ph, phed); + } + + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = options.rule.range ? Random.string(options.rule.count) : options.template; + } + return result + }, + 'function': function(options) { + // ( context, options ) + return options.template.call(options.context.currentContext, options) + }, + 'regexp': function(options) { + var source = ''; + + // 'name': /regexp/, + /* jshint -W041 */ + if (options.rule.count == undefined) { + source += options.template.source; // regexp.source + } + + // 'name|1-5': /regexp/, + for (var i = 0; i < options.rule.count; i++) { + source += options.template.source; + } + + return regexp.Handler.gen( + regexp.Parser.parse( + source + ) + ) + } + }); + + Handler.extend({ + _all: function() { + var re = {}; + for (var key in Random) re[key.toLowerCase()] = key; + return re + }, + // 处理占位符,转换为最终值 + placeholder: function(placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + constant.RE_PLACEHOLDER.exec(''); + var parts = constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = this._all()[lkey], + params = parts && parts[2] || ''; + var pathParts = this.splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')'); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } + + // 占位符优先引用数据模板中的属性 + if (obj && (key in obj)) return obj[key] + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if ( + key.charAt(0) === '/' || + pathParts.length > 1 + ) return this.getValueByKeyPath(key, options) + + // 递归引用数据模板中的属性 + if (templateContext && + (typeof templateContext === 'object') && + (key in templateContext) && + (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = Handler.gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext + }); + return templateContext[key] + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder + + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + constant.RE_PLACEHOLDER.exec(''); + if (constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = Handler.placeholder(params[i], obj, templateContext, options); + } + } + + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (util.type(handle)) { + case 'array': + // 自动从数组中取一个,例如 @areas + return Random.pick(handle) + case 'function': + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ''; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re + } + }, + getValueByKeyPath: function(key, options) { + var originalKey = key; + var keyPathParts = this.splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === '/') { + absolutePathParts = [options.context.path[0]].concat( + this.normalizePath(keyPathParts) + ); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = this.normalizePath( + absolutePathParts.concat(keyPathParts) + ); + + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && (key in currentContext)) return currentContext[key] + + // 尚未计算,递归引用数据模板中的属性 + if (templateCurrentContext && + (typeof templateCurrentContext === 'object') && + (key in templateCurrentContext) && + (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext + }); + return templateCurrentContext[key] + } + } catch(err) { } + + return '@' + keyPathParts.join('/') + }, + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + normalizePath: function(pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case '..': + newPathParts.pop(); + break + case '.': + break + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts + }, + splitPathToArray: function(path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + } + }); + + var handler = Handler; + + /* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + + + + + function toJSONSchema(template, name, path /* Internal Use Only */ ) { + // type rule properties items + path = path || []; + var result = { + name: typeof name === 'string' ? name.replace(constant.RE_KEY, '$1') : name, + template: template, + type: util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name) + }; + result.path = path.slice(0); + result.path.push(name === undefined ? 'ROOT' : result.name); + + switch (result.type) { + case 'array': + result.items = []; + util.each(template, function(value, index) { + result.items.push( + toJSONSchema(value, index, result.path) + ); + }); + break + case 'object': + result.properties = []; + util.each(template, function(value, name) { + result.properties.push( + toJSONSchema(value, name, result.path) + ); + }); + break + } + + return result + + } + + var schema$1 = toJSONSchema; + + var schema = schema$1; + + /* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) + */ + + + + + function valid$1(template, data) { + var schema$1 = schema(template); + var result = Diff.diff(schema$1, data); + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result + } + + /* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 + */ + var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */ ) { + var result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if ( + this.name(schema, data, name, result) && + this.type(schema, data, name, result) + ) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result + }, + /* jshint unused:false */ + name: function(schema, data, name, result) { + var length = result.length; + + Assert.equal('name', schema.path, name + '', schema.name + '', result); + + return result.length === length + }, + type: function(schema, data, name, result) { + var length = result.length; + + switch (schema.type) { + case 'string': + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(constant.RE_PLACEHOLDER)) return true + break + case 'array': + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true + } + break + case 'function': + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true + } + + Assert.equal('type', schema.path, util.type(data), schema.type, result); + + return result.length === length + }, + value: function(schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var templateType = schema.type; + if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case 'regexp': + Assert.match('value', schema.path, data, schema.template, result); + return result.length === length + case 'string': + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(constant.RE_PLACEHOLDER)) return result.length === length + break + } + Assert.equal('value', schema.path, data, schema.template, result); + return result.length === length + } + + // 有生成规则 + var actualRepeatCount; + switch (templateType) { + case 'number': + var parts = (data + '').split('.'); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); + } + } + + break + + case 'boolean': + break + + case 'string': + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + + break + + case 'regexp': + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + break + } + + return result.length === length + }, + properties: function(schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var keys = util.keys(data); + if (!schema.properties) return + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result); + } + } + + if (result.length !== length) return false + + for (var i = 0; i < keys.length; i++) { + result.push.apply( + result, + this.diff( + function() { + var property; + util.each(schema.properties, function(item /*, index*/ ) { + if (item.name === keys[i]) property = item; + }); + return property || schema.properties[i] + }(), + data[keys[i]], + keys[i] + ) + ); + } + + return result.length === length + }, + items: function(schema, data, name, result) { + var length = result.length; + + if (!schema.items) return + + var rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('items length', schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result, + '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements'); + Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result, + '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements'); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length + else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result); + } + // |+inc + if (rule.parameters[2]) return result.length === length + } + + if (result.length !== length) return false + + for (var i = 0; i < data.length; i++) { + result.push.apply( + result, + this.diff( + schema.items[i % schema.items.length], + data[i], + i % schema.items.length + ) + ); + } + + return result.length === length + } + }; + + /* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + + */ + var Assert = { + message: function(item) { + return (item.message || + '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}') + .replace('{utype}', item.type.toUpperCase()) + .replace('{ltype}', item.type.toLowerCase()) + .replace('{path}', util.isArray(item.path) && item.path.join('.') || item.path) + .replace('{action}', item.action) + .replace('{expected}', item.expected) + .replace('{actual}', item.actual) + }, + equal: function(type, path, actual, expected, result, message) { + if (actual === expected) return true + switch (type) { + case 'type': + // 正则模板 === 字符串最终值 + if (expected === 'regexp' && actual === 'string') return true + break + } + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is equal to', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + }, + // actual matches expected + match: function(type, path, actual, expected, result, message) { + if (expected.test(actual)) return true + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'matches', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + }, + notEqual: function(type, path, actual, expected, result, message) { + if (actual !== expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is not equal to', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + }, + greaterThan: function(type, path, actual, expected, result, message) { + if (actual > expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + }, + lessThan: function(type, path, actual, expected, result, message) { + if (actual < expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less to', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + }, + greaterThanOrEqualTo: function(type, path, actual, expected, result, message) { + if (actual >= expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than or equal to', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + }, + lessThanOrEqualTo: function(type, path, actual, expected, result, message) { + if (actual <= expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less than or equal to', + message: message + }; + item.message = Assert.message(item); + result.push(item); + return false + } + }; + + valid$1.Diff = Diff; + valid$1.Assert = Assert; + + var valid_1 = valid$1; + + var valid = valid_1; + + /* global window, document, location, Event, setTimeout */ + /* + ## MockXMLHttpRequest + + 期望的功能: + 1. 完整地覆盖原生 XHR 的行为 + 2. 完整地模拟原生 XHR 的行为 + 3. 在发起请求时,自动检测是否需要拦截 + 4. 如果不必拦截,则执行原生 XHR 的行为 + 5. 如果需要拦截,则执行虚拟 XHR 的行为 + 6. 兼容 XMLHttpRequest 和 ActiveXObject + new window.XMLHttpRequest() + new window.ActiveXObject("Microsoft.XMLHTTP") + + 关键方法的逻辑: + * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。 + * open 此时可以取到 URL,可以决定是否进行拦截。 + * send 此时已经确定了请求方式。 + + 规范: + http://xhr.spec.whatwg.org/ + http://www.w3.org/TR/XMLHttpRequest2/ + + 参考实现: + https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js + https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js + https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js + https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js + https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js + + **需不需要全面重写 XMLHttpRequest?** + http://xhr.spec.whatwg.org/#interface-xmlhttprequest + 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。 + 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。 + + // Event handlers + onloadstart loadstart + onprogress progress + onabort abort + onerror error + onload load + ontimeout timeout + onloadend loadend + onreadystatechange readystatechange + */ + + + + // 备份原生 XMLHttpRequest + window._XMLHttpRequest = window.XMLHttpRequest; + window._ActiveXObject = window.ActiveXObject; + + /* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 + */ + try { + new window.Event('custom'); + } catch (exception) { + window.Event = function(type, bubbles, cancelable, detail) { + var event = document.createEvent('CustomEvent'); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event + }; + } + + var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4 + }; + + var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' '); + var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' '); + var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' '); + + // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 + var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" + }; + + /* + MockXMLHttpRequest + */ + + function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {} + }; + } + + MockXMLHttpRequest._settings = { + timeout: '10-100', + /* + timeout: 50, + timeout: '10-100', + */ + }; + + MockXMLHttpRequest.setup = function(settings) { + util.extend(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings + }; + + util.extend(MockXMLHttpRequest, XHR_STATES); + util.extend(MockXMLHttpRequest.prototype, XHR_STATES); + + // 标记当前对象为 MockXMLHttpRequest + MockXMLHttpRequest.prototype.mock = true; + + // 是否拦截 Ajax 请求 + MockXMLHttpRequest.prototype.match = false; + + // 初始化 Request 相关的属性和方法 + util.extend(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function(method, url, async, username, password) { + var that = this; + + util.extend(this.custom, { + method: method, + url: url, + async: typeof async === 'boolean' ? async : true, + username: username, + password: password, + options: { + url: url, + type: method + } + }); + + this.custom.timeout = function(timeout) { + if (typeof timeout === 'number') return timeout + if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10) + if (typeof timeout === 'string' && ~timeout.indexOf('-')) { + var tmp = timeout.split('-'); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min + } + }(MockXMLHttpRequest._settings.timeout); + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options); + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/ )); + } + + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; + + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle); + } + + // xhr.open() + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); + + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; + } catch (e) {} + } + + return + } + + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ )); + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function(name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value); + return + } + + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += ',' + value; + else requestHeaders[name] = value; + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this; + this.custom.options.body = data; + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data); + return + } + + // 拦截 XHR + + // X-Requested-With header + this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest'); + + // loadstart The fetch initiates. + this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ )); + + if (this.custom.async) setTimeout(done, this.custom.timeout); // 异步 + else done(); // 同步 + + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )); + + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; + + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify( + convert(that.custom.template, that.custom.options), + null, 4 + ); + + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )); + that.dispatchEvent(new Event('load' /*, false, false, that*/ )); + that.dispatchEvent(new Event('loadend' /*, false, false, that*/ )); + } + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort(); + return + } + + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event('abort', false, false, this)); + this.dispatchEvent(new Event('error', false, false, this)); + } + }); + + // 初始化 Response 相关的属性和方法 + util.extend(MockXMLHttpRequest.prototype, { + responseURL: '', + status: MockXMLHttpRequest.UNSENT, + statusText: '', + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function(name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name) + } + + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()] + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function() { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders() + } + + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders; + var headers = ''; + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue + headers += h + ': ' + responseHeaders[h] + '\r\n'; + } + return headers + }, + overrideMimeType: function( /*mime*/ ) {}, + responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: '', + responseXML: null + }); + + // EventTarget + util.extend(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || []; + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1); + } + } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || []; + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event); + } + + var ontype = 'on' + event.type; + if (this[ontype]) this[ontype](event); + } + }); + + // Inspired by jQuery + function createNativeXMLHttpRequest() { + var isLocal = function() { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]) + }(); + + return window.ActiveXObject ? + (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR() + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} + } + + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } + } + + + // 查找与请求参数匹配的数据模板:URL,Type + function find(options) { + + for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { + var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; + if ( + (!item.rurl || match(item.rurl, options.url)) && + (!item.rtype || match(item.rtype, options.type.toLowerCase())) + ) { + // console.log('[mock]', options.url, '>', item.rurl) + return item + } + } + + function match(expected, actual) { + if (util.type(expected) === 'string') { + return expected === actual + } + if (util.type(expected) === 'regexp') { + return expected.test(actual) + } + } + + } + + // 数据模板 => 响应数据 + function convert(item, options) { + return util.isFunction(item.template) ? + item.template(options) : MockXMLHttpRequest.Mock.mock(item.template) + } + + var xhr$1 = MockXMLHttpRequest; + + var xhr = xhr$1; + + /* global require, module, window */ + + + + + + + + var XHR; + if (typeof window !== 'undefined') XHR = xhr; + + /*! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + */ + var Mock = { + Handler: handler, + Random: Random, + Util: util, + XHR: XHR, + RE: regexp, + toJSONSchema: schema, + valid: valid, + heredoc: util.heredoc, + setup: function(settings) { + return XHR.setup(settings) + }, + _mocked: {} + }; + + Mock.version = '1.0.1-beta3'; + + // 避免循环依赖 + if (XHR) XHR.Mock = Mock; + + /* + * Mock.mock( template ) + * Mock.mock( function() ) + * Mock.mock( rurl, template ) + * Mock.mock( rurl, function(options) ) + * Mock.mock( rurl, rtype, template ) + * Mock.mock( rurl, rtype, function(options) ) + + 根据数据模板生成模拟数据。 + */ + Mock.mock = function(rurl, rtype, template) { + // Mock.mock(template) + if (arguments.length === 1) { + return handler.gen(rurl) + } + // Mock.mock(rurl, template) + if (arguments.length === 2) { + template = rtype; + rtype = undefined; + } + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + (rtype || '')] = { + rurl: rurl, + rtype: rtype, + template: template + }; + return Mock + }; + + var mock = Mock; + + return mock; + +}()); diff --git a/package.json b/package.json new file mode 100644 index 00000000..ec636b4b --- /dev/null +++ b/package.json @@ -0,0 +1,55 @@ +{ + "name": "mockjs", + "title": "Mock.js", + "description": "模拟请求 & 模拟数据", + "version": "0.1.11", + "homepage": "http://mockjs.com/", + "keywords": [ + "mock", + "mockJSON", + "mockAjax", + "mockTempalte" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nuysoft/Mock/blob/master/MIT-LICENSE.txt" + } + ], + "author": "nuysoft@gmail.com", + "repository": { + "type": "git", + "url": "git://github.com/nuysoft/Mock.git" + }, + "main": "./dist/mock.js", + "spm": { + "main": "dist/mock.js" + }, + "scripts": { + "dev": "rollup --config rollup.config.dev.js -w", + "build": "rollup --config rollup.config.build.js", + "docs": "docsify serve docs" + }, + + "dependencies": { + "lodash-es": "^4.17.21" + }, + "devDependencies": { + "@babel/core": "^7.14.3", + "@babel/preset-env": "^7.14.4", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.0.0", + "@rollup/plugin-replace": "^2.4.2", + "rollup": "^2.50.5", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-delete": "^2.0.0", + "rollup-plugin-license": "^2.4.0", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-multi-input": "^1.3.1", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-serve": "^1.1.0", + "rollup-plugin-terser": "^7.0.2" + } +} diff --git a/rollup.config.dev.js b/rollup.config.dev.js new file mode 100644 index 00000000..9b50e560 --- /dev/null +++ b/rollup.config.dev.js @@ -0,0 +1,28 @@ +import resolve from "rollup-plugin-node-resolve"; // 帮助寻找node_modules里的包 +import commonjs from "rollup-plugin-commonjs"; // 将非ES6语法的包转为ES6可用 + +import json from "@rollup/plugin-json"; + +export default { + input: "./src/mock.js", // 打包入口 + output: [ + { + // 打包出口 + dir: "./dist", + format: "es", + }, + { + // 打包出口 + dir: "./dist", + format: "iife", + name: "Mock", + }, + ], + plugins: [ + json(), + resolve({ + browser: true, + }), + commonjs(), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 + ], +}; diff --git a/src/dependencies.png b/src/dependencies.png new file mode 100644 index 0000000000000000000000000000000000000000..0c5d7d88c6345fb3630169cf3ea37778f2f3f843 GIT binary patch literal 344355 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

hZN;D- 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

`&Cj0o_(?<8*Qy?+0OU9$t-i?O4# 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

X=q8yf`0PTPn1hu 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 + + + + + + + + + + + + + + + Created with Snapgroup #1any character|+group #2digitgroup #3One of:+-digit-One of:+-digit.group #4digit-digit \ No newline at end of file diff --git a/src/mock/constant.js b/src/mock/constant.js new file mode 100644 index 00000000..3a83fa55 --- /dev/null +++ b/src/mock/constant.js @@ -0,0 +1,33 @@ +/* + ## Constant + + 常量集合。 + */ +/* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 +*/ +module.exports = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ +} \ No newline at end of file diff --git a/src/mock/handler.js b/src/mock/handler.js new file mode 100644 index 00000000..a661e6b4 --- /dev/null +++ b/src/mock/handler.js @@ -0,0 +1,537 @@ +/* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + +*/ + +var Constant = require("./constant"); +var Util = require("./util"); +var Parser = require("./parser"); +var Random = require("./random"); +var RE = require("./regexp"); + +var Handler = { + extend: Util.extend, +}; + +/* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot +*/ +Handler.gen = function (template, name, context) { + /* jshint -W041 */ + name = name == undefined ? "" : name + ""; + + context = context || {}; + context = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [Constant.GUID], + templatePath: context.templatePath || [Constant.GUID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + var rule = Parser.parse(name); + var type = Util.type(template); + var data; + + if (Handler[type]) { + data = Handler[type]({ + // 属性值类型 + type: type, + // 属性值模板 + template: template, + // 属性名 + 生成规则 + name: name, + // 属性名 + parsedName: name ? name.replace(Constant.RE_KEY, "$1") : name, + + // 解析后的生成规则 + rule: rule, + // 相关上下文 + context: context, + }); + + if (!context.root) context.root = data; + return data; + } + + return template; +}; + +Handler.extend({ + array: function (options) { + var result = [], + i, + ii; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (options.template.length === 0) return result; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!options.rule.parameters) { + for (i = 0; i < options.template.length; i++) { + options.context.path.push(i); + options.context.templatePath.push(i); + result.push( + Handler.gen(options.template[i], i, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (options.rule.min === 1 && options.rule.max === undefined) { + // fix #17 + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = Random.pick( + Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } else { + // 'data|+1': [{}, {}] + if (options.rule.parameters[2]) { + options.template.__order_index = options.template.__order_index || 0; + + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + })[options.template.__order_index % options.template.length]; + + options.template.__order_index += +options.rule.parameters[2]; + + options.context.path.pop(); + options.context.templatePath.pop(); + } else { + // 'data|1-10': [{}] + for (i = 0; i < options.rule.count; i++) { + // 'data|1-10': [{}, {}] + for (ii = 0; ii < options.template.length; ii++) { + options.context.path.push(result.length); + options.context.templatePath.push(ii); + result.push( + Handler.gen(options.template[ii], result.length, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } + } + } + } + return result; + }, + object: function (options) { + var result = {}, + keys, + fnKeys, + key, + parsedKey, + inc, + i; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (options.rule.min != undefined) { + keys = Util.keys(options.template); + keys = Random.shuffle(keys); + keys = keys.slice(0, options.rule.count); + for (i = 0; i < keys.length; i++) { + key = keys[i]; + parsedKey = key.replace(Constant.RE_KEY, "$1"); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'obj': {} + keys = []; + fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 + for (key in options.template) { + (typeof options.template[key] === "function" ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Util.keys(options.template) + keys.sort(function(a, b) { + var afn = typeof options.template[a] === 'function' + var bfn = typeof options.template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + for (i = 0; i < keys.length; i++) { + key = keys[i]; + parsedKey = key.replace(Constant.RE_KEY, "$1"); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }); + options.context.path.pop(); + options.context.templatePath.pop(); + // 'id|+1': 1 + inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && Util.type(options.template[key]) === "number") { + options.template[key] += parseInt(inc[2], 10); + } + } + } + return result; + }, + number: function (options) { + var result, parts; + if (options.rule.decimal) { + // float + options.template += ""; + parts = options.template.split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parts[0] = options.rule.range ? options.rule.count : parts[0]; + parts[1] = (parts[1] || "").slice(0, options.rule.dcount); + while (parts[1].length < options.rule.dcount) { + parts[1] += + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + parts[1].length < options.rule.dcount - 1 ? Random.character("number") : Random.character("123456789"); + } + result = parseFloat(parts.join("."), 10); + } else { + // integer + // 'grade1|1-100': 1, + result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; + } + return result; + }, + boolean: function (options) { + var result; + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template; + return result; + }, + string: function (options) { + var result = "", + i, + placeholders, + ph, + phed; + if (options.template.length) { + // 'foo': '★', + /* jshint -W041 */ + if (options.rule.count == undefined) { + result += options.template; + } + + // 'star|1-5': '★', + for (i = 0; i < options.rule.count; i++) { + result += options.template; + } + // 'email|1-10': '@EMAIL, ', + placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + for (i = 0; i < placeholders.length; i++) { + ph = placeholders[i]; + + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(i--, 1); + continue; + } + + phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // + result = phed; + break; + + if (Util.isNumeric(phed)) { + result = parseFloat(phed, 10); + break; + } + if (/^(true|false)$/.test(phed)) { + result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 + break; + } + } + result = result.replace(ph, phed); + } + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = options.rule.range ? Random.string(options.rule.count) : options.template; + } + return result; + }, + function: function (options) { + // ( context, options ) + return options.template.call(options.context.currentContext, options); + }, + regexp: function (options) { + var source = ""; + + // 'name': /regexp/, + /* jshint -W041 */ + if (options.rule.count == undefined) { + source += options.template.source; // regexp.source + } + + // 'name|1-5': /regexp/, + for (var i = 0; i < options.rule.count; i++) { + source += options.template.source; + } + + return RE.Handler.gen(RE.Parser.parse(source)); + }, +}); + +Handler.extend({ + _all: function () { + var re = {}; + for (var key in Random) re[key.toLowerCase()] = key; + return re; + }, + // 处理占位符,转换为最终值 + placeholder: function (placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var parts = Constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = this._all()[lkey], + params = (parts && parts[2]) || ""; + var pathParts = this.splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = Handler.gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = Handler.placeholder(params[i], obj, templateContext, options); + } + } + + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (Util.type(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return Random.pick(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + }, + getValueByKeyPath: function (key, options) { + var originalKey = key; + var keyPathParts = this.splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); + }, + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + normalizePath: function (pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; + }, + splitPathToArray: function (path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + }, +}); + +module.exports = Handler; diff --git a/src/mock/parser.js b/src/mock/parser.js new file mode 100644 index 00000000..1615ad59 --- /dev/null +++ b/src/mock/parser.js @@ -0,0 +1,71 @@ +/* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + +var Constant = require("./constant"); +var Random = require("./random"); + +/* jshint -W041 */ +module.exports = { + parse: function (name) { + name = name == undefined ? "" : name + ""; + + var parameters = (name || "").match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : Random.integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || Random.integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters: parameters, + // 1 min, 2 max + range: range, + min: min, + max: max, + // min-max + count: count, + // 是否有 decimal + decimal: decimal, + dmin: dmin, + dmax: dmax, + // dmin-dimax + dcount: dcount, + }; + + for (var r in result) { + if (result[r] != undefined) return result; + } + + return {}; + }, +}; diff --git a/src/mock/random/address.js b/src/mock/random/address.js new file mode 100644 index 00000000..eb2c2f19 --- /dev/null +++ b/src/mock/random/address.js @@ -0,0 +1,48 @@ +/* + ## Address +*/ +import DICT from "./address_dict"; +var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; + +export default { + // 随机生成一个大区。 + region: function () { + return this.pick(REGION); + }, + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + province: function () { + return this.pick(DICT).name; + }, + // 随机生成一个(中国)市。 + city: function (prefix) { + var province = this.pick(DICT); + var city = this.pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; + }, + // 随机生成一个(中国)县。 + county: function (prefix) { + var province = this.pick(DICT); + var city = this.pick(province.children); + var county = this.pick(city.children) || { + name: "-", + }; + return prefix + ? [province.name, city.name, county.name].join(" ") + : county.name; + }, + // 随机生成一个邮政编码(六位数字)。 + zip: function (len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9); + return zip; + }, + + // address: function() {}, + // phone: function() {}, + // areacode: function() {}, + // street: function() {}, + // street_suffixes: function() {}, + // street_suffix: function() {}, + // states: function() {}, + // state: function() {}, +}; diff --git a/src/mock/random/address_ch.json b/src/mock/random/address_ch.json new file mode 100644 index 00000000..fdc833b1 --- /dev/null +++ b/src/mock/random/address_ch.json @@ -0,0 +1,3998 @@ +{ + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "471005": "其它区", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" +} \ No newline at end of file diff --git a/src/mock/random/address_dict.js b/src/mock/random/address_dict.js new file mode 100644 index 00000000..a1562cd6 --- /dev/null +++ b/src/mock/random/address_dict.js @@ -0,0 +1,78 @@ +/* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 +*/ + +// DICT = { id : Name } +// id 的表示方式是 110100 +// 11 表示 省级, 01 表示 市, 00 表示 区 +// 大致是上面这样分类的 + +import DICT from "./address_ch.json"; + +// id pid/parentId name children + +// 将扁平数组转化为树状 +function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; + /* jshint -W041 */ + // undefined 时是一个顶级元素 + if (pid === undefined) { + result.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + if (!parent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; +} +// 转化数组内对象的表现形式 +const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = + id.slice(2, 6) === "0000" + ? undefined + : id.slice(4, 6) == "00" + ? id.slice(0, 2) + "0000" + : id.slice(0, 4) + "00"; + return { + id: id, + pid: pid, + name: value, + }; +}); + +const DICT_FIXED = createTree(fixed); + +export default DICT_FIXED; diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js new file mode 100644 index 00000000..64958143 --- /dev/null +++ b/src/mock/random/basic.js @@ -0,0 +1,29 @@ +/* + ## Basics +*/ +import { integer, natural } from "./basic/number.js"; +import { boolean } from "./basic/boolean.js"; +import { character } from "./basic/character.js"; +import { string } from "./basic/string.js"; +import { range } from "./basic/range.js"; +import { float } from "./basic/float.js"; +export default { + // 返回一个随机的布尔值。 + boolean, + bool: boolean, + integer, + int: integer, + // 返回一个随机的自然数(大于等于 0 的整数)。 + natural, + + // 返回一个随机的浮点数。 + float, + // 返回一个随机字符。 + character, + char: character, + // 返回一个随机字符串。 + string, + str: string, + // 返回一个整型数组。 + range, +}; diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js new file mode 100644 index 00000000..195130b0 --- /dev/null +++ b/src/mock/random/basic/boolean.js @@ -0,0 +1,10 @@ +import { isNumber } from "./number.js"; +const boolean = function (min, max, cur) { + if (cur) { + min = isNumber(min) ? parseInt(min, 10) : 1; + max = isNumber(max) ? parseInt(max, 10) : 1; + return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + } + return Math.random() >= 0.5; +}; +export { boolean }; diff --git a/src/mock/random/basic/character.js b/src/mock/random/basic/character.js new file mode 100644 index 00000000..af0ccb21 --- /dev/null +++ b/src/mock/random/basic/character.js @@ -0,0 +1,17 @@ +import { natural } from "./number.js"; +const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", +}; +pools.alpha = pools.lower + pools.upper; +pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + +const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); +}; +export { character }; diff --git a/src/mock/random/basic/float.js b/src/mock/random/basic/float.js new file mode 100644 index 00000000..b334ac10 --- /dev/null +++ b/src/mock/random/basic/float.js @@ -0,0 +1,19 @@ +import { integer, isNumber, natural } from "./number.js"; +const float = function (min, max, dmin, dmax) { + dmin = isNumber(dmin) ? dmin : 0; + dmax = isNumber(dmax) ? dmax : 17; + dmin = Math.max(Math.min(dmin, 17), 0); + dmax = Math.max(Math.min(dmax, 17), 0); + let dcount = natural(dmin, dmax); + var ret = + integer(min, max) + + "." + + [...Array(dcount).keys()] + .map((i) => { + // 最后一位不能为 0,所以必须进行处理 + return i < dcount - 1 ? this.character("number") : this.character("123456789"); + }) + .join(""); + return parseFloat(ret, 10); +}; +export { float }; diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js new file mode 100644 index 00000000..c1e44ab7 --- /dev/null +++ b/src/mock/random/basic/number.js @@ -0,0 +1,17 @@ +const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); +}; +const random = function (min, max) { + return Math.random() * (max - min) + min; +}; + +// 返回一个随机的整数。 +const integer = function (min, max) { + min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; + max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 + return Math.round(random(min, max)); +}; +const natural = function (min, max) { + return Math.abs(integer(min, max)); +}; +export { integer, isNumber, random, natural }; diff --git a/src/mock/random/basic/range.js b/src/mock/random/basic/range.js new file mode 100644 index 00000000..4115fcdb --- /dev/null +++ b/src/mock/random/basic/range.js @@ -0,0 +1,17 @@ +const range = function (...args) { + // range( stop ) + let start, stop, step; + if (arguments.length <= 1) { + [stop] = args; + return [...Array(stop).keys()]; + } + + // range( start, stop ,step=1) + // range(10,20,3) = [10,13,16,19] + [start, stop, step = 1] = args; + let arrayLength = Math.ceil((stop - start) / step); + return [...Array(arrayLength).keys()].map((index) => { + return start + index * step; + }); +}; +export { range }; diff --git a/src/mock/random/basic/string.js b/src/mock/random/basic/string.js new file mode 100644 index 00000000..de54d7c2 --- /dev/null +++ b/src/mock/random/basic/string.js @@ -0,0 +1,30 @@ +import { natural } from "./number.js"; +import { character } from "./character.js"; +const string = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map((i) => character(pool)).join(""); +}; +export { string }; diff --git a/src/mock/random/color.js b/src/mock/random/color.js new file mode 100644 index 00000000..a2630488 --- /dev/null +++ b/src/mock/random/color.js @@ -0,0 +1,137 @@ +/* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() +*/ + +var Convert = require('./color_convert') +var DICT = require('./color_dict') + +module.exports = { + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 + color: function(name) { + if (name || DICT[name]) return DICT[name].nicer + return this.hex() + }, + // #DAC0DE + hex: function() { + var hsv = this._goldenRatioColor() + var rgb = Convert.hsv2rgb(hsv) + var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2]) + return hex + }, + // rgb(128,255,255) + rgb: function() { + var hsv = this._goldenRatioColor() + var rgb = Convert.hsv2rgb(hsv) + return 'rgb(' + + parseInt(rgb[0], 10) + ', ' + + parseInt(rgb[1], 10) + ', ' + + parseInt(rgb[2], 10) + ')' + }, + // rgba(128,255,255,0.3) + rgba: function() { + var hsv = this._goldenRatioColor() + var rgb = Convert.hsv2rgb(hsv) + return 'rgba(' + + parseInt(rgb[0], 10) + ', ' + + parseInt(rgb[1], 10) + ', ' + + parseInt(rgb[2], 10) + ', ' + + Math.random().toFixed(2) + ')' + }, + // hsl(300,80%,90%) + hsl: function() { + var hsv = this._goldenRatioColor() + var hsl = Convert.hsv2hsl(hsv) + return 'hsl(' + + parseInt(hsl[0], 10) + ', ' + + parseInt(hsl[1], 10) + ', ' + + parseInt(hsl[2], 10) + ')' + }, + // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + // https://github.com/devongovett/color-generator/blob/master/index.js + // 随机生成一个有吸引力的颜色。 + _goldenRatioColor: function(saturation, value) { + this._goldenRatio = 0.618033988749895 + this._hue = this._hue || Math.random() + this._hue += this._goldenRatio + this._hue %= 1 + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return [ + this._hue * 360, + saturation * 100, + value * 100 + ] + } +} \ No newline at end of file diff --git a/src/mock/random/color_convert.js b/src/mock/random/color_convert.js new file mode 100644 index 00000000..333d6ff0 --- /dev/null +++ b/src/mock/random/color_convert.js @@ -0,0 +1,177 @@ +/* + ## Color Convert + + http://blog.csdn.net/idfaya/article/details/6770414 + 颜色空间RGB与HSV(HSL)的转换 +*/ +// https://github.com/harthur/color-convert/blob/master/conversions.js +module.exports = { + rgb2hsl: function rgb2hsl(rgb) { + var r = rgb[0] / 255, + g = rgb[1] / 255, + b = rgb[2] / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, s, l; + + if (max == min) + h = 0; + else if (r == max) + h = (g - b) / delta; + else if (g == max) + h = 2 + (b - r) / delta; + else if (b == max) + h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) + h += 360; + + l = (min + max) / 2; + + if (max == min) + s = 0; + else if (l <= 0.5) + s = delta / (max + min); + else + s = delta / (2 - max - min); + + return [h, s * 100, l * 100]; + }, + rgb2hsv: function rgb2hsv(rgb) { + var r = rgb[0], + g = rgb[1], + b = rgb[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, s, v; + + if (max === 0) + s = 0; + else + s = (delta / max * 1000) / 10; + + if (max == min) + h = 0; + else if (r == max) + h = (g - b) / delta; + else if (g == max) + h = 2 + (b - r) / delta; + else if (b == max) + h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) + h += 360; + + v = ((max / 255) * 1000) / 10; + + return [h, s, v]; + }, + hsl2rgb: function hsl2rgb(hsl) { + var h = hsl[0] / 360, + s = hsl[1] / 100, + l = hsl[2] / 100, + t1, t2, t3, rgb, val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) + t2 = l * (1 + s); + else + t2 = l + s - l * s; + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) t3++; + if (t3 > 1) t3--; + + if (6 * t3 < 1) + val = t1 + (t2 - t1) * 6 * t3; + else if (2 * t3 < 1) + val = t2; + else if (3 * t3 < 2) + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + else + val = t1; + + rgb[i] = val * 255; + } + + return rgb; + }, + hsl2hsv: function hsl2hsv(hsl) { + var h = hsl[0], + s = hsl[1] / 100, + l = hsl[2] / 100, + sv, v; + l *= 2; + s *= (l <= 1) ? l : 2 - l; + v = (l + s) / 2; + sv = (2 * s) / (l + s); + return [h, sv * 100, v * 100]; + }, + hsv2rgb: function hsv2rgb(hsv) { + var h = hsv[0] / 60 + var s = hsv[1] / 100 + var v = hsv[2] / 100 + var hi = Math.floor(h) % 6 + + var f = h - Math.floor(h) + var p = 255 * v * (1 - s) + var q = 255 * v * (1 - (s * f)) + var t = 255 * v * (1 - (s * (1 - f))) + + v = 255 * v + + switch (hi) { + case 0: + return [v, t, p] + case 1: + return [q, v, p] + case 2: + return [p, v, t] + case 3: + return [p, q, v] + case 4: + return [t, p, v] + case 5: + return [v, p, q] + } + }, + hsv2hsl: function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, l; + + l = (2 - s) * v; + sl = s * v; + sl /= (l <= 1) ? l : 2 - l; + l /= 2; + return [h, sl * 100, l * 100]; + }, + // http://www.140byt.es/keywords/color + rgb2hex: function( + a, // red, as a number from 0 to 255 + b, // green, as a number from 0 to 255 + c // blue, as a number from 0 to 255 + ) { + return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) + }, + hex2rgb: function( + a // take a "#xxxxxx" hex string, + ) { + a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0; + return [a >> 16, a >> 8 & 255, a & 255] + } +} \ No newline at end of file diff --git a/src/mock/random/color_dict.js b/src/mock/random/color_dict.js new file mode 100644 index 00000000..daa2f608 --- /dev/null +++ b/src/mock/random/color_dict.js @@ -0,0 +1,76 @@ +/* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) +*/ +module.exports = { + // name value nicer + navy: { + value: '#000080', + nicer: '#001F3F' + }, + blue: { + value: '#0000ff', + nicer: '#0074D9' + }, + aqua: { + value: '#00ffff', + nicer: '#7FDBFF' + }, + teal: { + value: '#008080', + nicer: '#39CCCC' + }, + olive: { + value: '#008000', + nicer: '#3D9970' + }, + green: { + value: '#008000', + nicer: '#2ECC40' + }, + lime: { + value: '#00ff00', + nicer: '#01FF70' + }, + yellow: { + value: '#ffff00', + nicer: '#FFDC00' + }, + orange: { + value: '#ffa500', + nicer: '#FF851B' + }, + red: { + value: '#ff0000', + nicer: '#FF4136' + }, + maroon: { + value: '#800000', + nicer: '#85144B' + }, + fuchsia: { + value: '#ff00ff', + nicer: '#F012BE' + }, + purple: { + value: '#800080', + nicer: '#B10DC9' + }, + silver: { + value: '#c0c0c0', + nicer: '#DDDDDD' + }, + gray: { + value: '#808080', + nicer: '#AAAAAA' + }, + black: { + value: '#000000', + nicer: '#111111' + }, + white: { + value: '#FFFFFF', + nicer: '#FFFFFF' + } +} \ No newline at end of file diff --git a/src/mock/random/date.js b/src/mock/random/date.js new file mode 100644 index 00000000..9d32bb9e --- /dev/null +++ b/src/mock/random/date.js @@ -0,0 +1,90 @@ +/* + ## Date +*/ +import { integer } from "./basic/number.js"; // 随机生成整数的函数 +import _patternLetters from "./date/_patternLetters.js"; +const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + +export default { + // 日期占位符集合。 + _patternLetters, + // 日期占位符正则。 + _rformat: reRule, + // 格式化日期。 + _formatDate: function (date, format) { + return format.replace( + this._rformat, + function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = patternLetters[flag]; + return typeof targetPattern === "function" + ? targetPattern(date) + : targetPattern in patternLetters + ? creatNewSubString($0, targetPattern) + : date[targetPattern](); + } + ); + }, + // 生成一个随机的 Date 对象。 + _randomDate: function (min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + }, + // 返回一个随机的日期字符串。 + date: function (format = "yyyy-MM-dd") { + return this._formatDate(this._randomDate(), format); + }, + // 返回一个随机的时间字符串。 + time: function (format = "HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + // 返回一个随机的日期和时间字符串。 + datetime: function (format = "yyyy-MM-dd HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + + // 返回当前的日期和时间字符串。 + now: function (unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } + + return this._formatDate(date, format); + }, + // KonghaYao 新增函数:生成固定时间段的时间戳 + timestamp: function (min, max) { + if (min instanceof Date && max instanceof Date) + return this._randomDate(min, max); + return this._randomDate(); + }, +}; diff --git a/src/mock/random/date/_patternLetters.js b/src/mock/random/date/_patternLetters.js new file mode 100644 index 00000000..0f31aa74 --- /dev/null +++ b/src/mock/random/date/_patternLetters.js @@ -0,0 +1,60 @@ +export default patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", +}; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js new file mode 100644 index 00000000..5bbeb92c --- /dev/null +++ b/src/mock/random/helper.js @@ -0,0 +1,100 @@ +/* + ## Helpers +*/ + +var Util = require("../util"); + +export default { + // 把字符串的第一个字母转换为大写。 + capitalize: function (word) { + return (word + "").charAt(0).toUpperCase() + (word + "").substr(1); + }, + // 把字符串转换为大写。 + upper: function (str) { + return (str + "").toUpperCase(); + }, + // 把字符串转换为小写。 + lower: function (str) { + return (str + "").toLowerCase(); + }, + // 从数组中随机选取一个元素,并返回。 + pick: function pick(arr, min, max) { + // pick( item1, item2 ... ) + if (!Util.isArray(arr)) { + arr = [].slice.call(arguments); + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + + if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]; + + // pick( [ item1, item2 ... ], min, max ) + return this.shuffle(arr, min, max); + }, + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + + 其他的实现思路: + // https://code.google.com/p/jslibs/wiki/JavascriptTips + result = result.sort(function() { + return Math.random() - 0.5 + }) + */ + shuffle: function shuffle(arr, min, max) { + arr = arr || []; + var old = arr.slice(0), + result = [], + index = 0, + length = old.length; + for (var i = 0; i < length; i++) { + index = this.natural(0, old.length - 1); + result.push(old[index]); + old.splice(index, 1); + } + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; + /* falls through */ + case 3: + min = parseInt(min, 10); + max = parseInt(max, 10); + return result.slice(0, this.natural(min, max)); + } + }, + /* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ + order: function order(array) { + order.cache = order.cache || {}; + + if (arguments.length > 1) array = [].slice.call(arguments, 0); + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (order.cache[templatePath] = order.cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; + }, +}; diff --git a/src/mock/random/helper/pick.js b/src/mock/random/helper/pick.js new file mode 100644 index 00000000..e69de29b diff --git a/src/mock/random/image.js b/src/mock/random/image.js new file mode 100644 index 00000000..7001ceaf --- /dev/null +++ b/src/mock/random/image.js @@ -0,0 +1,310 @@ +/* global document */ +/* + ## Image +*/ +export default { + // 常见的广告宽高 + _adSize: [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600", + ], + // 常见的屏幕宽高 + _screenSize: [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600", + ], + // 常见的视频宽高 + _videoSize: ["720x480", "768x576", "1280x720", "1920x1080"], + /* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 + */ + image: function (...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = this.pick(this._adSize); + + if (background && ~background.indexOf("#")) + background = background.slice(1); + if (foreground && ~foreground.indexOf("#")) + foreground = foreground.slice(1); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return ( + "http://dummyimage.com/" + + size + + (background ? "/" + background : "") + + (foreground ? "/" + foreground : "") + + (format ? "." + format : "") + + (text ? "&text=" + text : "") + ); + }, + img: function () { + return this.image.apply(this, arguments); + }, + + /* + BrandColors + http://brandcolors.net/ + A collection of major brand color codes curated by Galen Gidman. + 大牌公司的颜色集合 + + // 获取品牌和颜色 + $('h2').each(function(index, item){ + item = $(item) + console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') + }) + */ + _brandColors: { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: "#ff6138", + Adobe: "#ff0000", + Aim: "#fcd20b", + Amazon: "#e47911", + Android: "#a4c639", + "Angie's List": "#7fbb00", + AOL: "#0060a3", + Atlassian: "#003366", + Behance: "#053eff", + "Big Cartel": "#97b538", + bitly: "#ee6123", + Blogger: "#fc4f08", + Boeing: "#0039a6", + "Booking.com": "#003580", + Carbonmade: "#613854", + Cheddar: "#ff7243", + "Code School": "#3d4944", + Delicious: "#205cc0", + Dell: "#3287c1", + Designmoo: "#e54a4f", + Deviantart: "#4e6252", + "Designer News": "#2d72da", + Devour: "#fd0001", + DEWALT: "#febd17", + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: "#ea4c89", + Dropbox: "#3d9ae8", + Drupal: "#0c76ab", + Dunked: "#2a323a", + eBay: "#89c507", + Ember: "#f05e1b", + Engadget: "#00bdf6", + Envato: "#528036", + Etsy: "#eb6d20", + Evernote: "#5ba525", + "Fab.com": "#dd0017", + Facebook: "#3b5998", + Firefox: "#e66000", + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: "#5b9a68", + Foursquare: "#25a0ca", + Garmin: "#007cc3", + GetGlue: "#2d75a2", + Gimmebar: "#f70078", + GitHub: "#171515", + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: "#f77f00", + Groupon: "#82b548", + "Hacker News": "#ff6600", + HelloWallet: "#0085ca", + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: "#003366", + Houzz: "#73ba37", + HTML5: "#ec6231", + IKEA: "#ffcc33", + IMDb: "#f3ce13", + Instagram: "#3f729b", + Intel: "#0071c5", + Intuit: "#365ebf", + Kickstarter: "#76cc1e", + kippt: "#e03500", + Kodery: "#00af81", + LastFM: "#c3000d", + LinkedIn: "#0e76a8", + Livestream: "#cf0005", + Lumo: "#576396", + Mixpanel: "#a086d3", + Meetup: "#e51937", + Nokia: "#183693", + NVIDIA: "#76b900", + Opera: "#cc0f16", + Path: "#e41f11", + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: "#0000e6", + Pinterest: "#c8232c", + PlayStation: "#665cbe", + Pocket: "#ee4056", + Prezi: "#318bff", + Pusha: "#0f71b4", + Quora: "#a82400", + "QUOTE.fm": "#66ceff", + Rdio: "#008fd5", + Readability: "#9c0000", + "Red Hat": "#cc0000", + Resource: "#7eb400", + Rockpack: "#0ba6ab", + Roon: "#62b0d9", + RSS: "#ee802f", + Salesforce: "#1798c1", + Samsung: "#0c4da2", + Shopify: "#96bf48", + Skype: "#00aff0", + Snagajob: "#f47a20", + Softonic: "#008ace", + SoundCloud: "#ff7700", + "Space Box": "#f86960", + Spotify: "#81b71a", + Sprint: "#fee100", + Squarespace: "#121212", + StackOverflow: "#ef8236", + Staples: "#cc0000", + "Status Chart": "#d7584f", + Stripe: "#008cdd", + StudyBlue: "#00afe1", + StumbleUpon: "#f74425", + "T-Mobile": "#ea0a8e", + Technorati: "#40a800", + "The Next Web": "#ef4423", + Treehouse: "#5cb868", + Trulia: "#5eab1f", + Tumblr: "#34526f", + "Twitch.tv": "#6441a5", + Twitter: "#00acee", + TYPO3: "#ff8700", + Ubuntu: "#dd4814", + Ustream: "#3388ff", + Verizon: "#ef1d1d", + Vimeo: "#86c9ef", + Vine: "#00a478", + Virb: "#06afd8", + "Virgin Media": "#cc0000", + Wooga: "#5b009c", + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: "#2b88d9", + XBOX: "#9bc848", + XING: "#126567", + "Yahoo!": "#720e9e", + Yandex: "#ffcc00", + Yelp: "#c41200", + YouTube: "#c4302b", + Zalongo: "#5498dc", + Zendesk: "#78a300", + Zerply: "#9dcc7a", + Zootool: "#5e8b1d", + }, + _brandNames: function () { + var brands = []; + for (var b in this._brandColors) { + brands.push(b); + } + return brands; + }, + /* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, + */ + dataImage: function (size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = this.pick(this._adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = this._brandColors[this.pick(this._brandNames())], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); + }, +}; diff --git a/src/mock/random/index.js b/src/mock/random/index.js new file mode 100644 index 00000000..9bd03621 --- /dev/null +++ b/src/mock/random/index.js @@ -0,0 +1,31 @@ +/* + ## Mock.Random + + 工具类,用于生成各种随机数据。 +*/ + +import basic from "./basic"; +import date from "./date"; +import image from "./image"; +import color from "./color"; +import text from "./text"; +import name from "./name"; +import web from "./web"; +import address from "./address"; +import helper from "./helper"; +import mise from "./misc"; +const Random = Object.assign( + {}, + basic, + date, + image, + color, + text, + name, + web, + address, + helper, + mise +); +export default Random; +export { Random }; diff --git a/src/mock/random/misc.js b/src/mock/random/misc.js new file mode 100644 index 00000000..3763dae2 --- /dev/null +++ b/src/mock/random/misc.js @@ -0,0 +1,105 @@ +/* + ## Miscellaneous +*/ +var DICT = require('./address_dict') +module.exports = { + // Dice + d4: function() { + return this.natural(1, 4) + }, + d6: function() { + return this.natural(1, 6) + }, + d8: function() { + return this.natural(1, 8) + }, + d12: function() { + return this.natural(1, 12) + }, + d20: function() { + return this.natural(1, 20) + }, + d100: function() { + return this.natural(1, 100) + }, + /* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + */ + guid: function() { + var pool = "abcdefABCDEF1234567890", + guid = this.string(pool, 8) + '-' + + this.string(pool, 4) + '-' + + this.string(pool, 4) + '-' + + this.string(pool, 4) + '-' + + this.string(pool, 12); + return guid + }, + uuid: function() { + return this.guid() + }, + /* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) + */ + id: function() { + var id, + sum = 0, + rank = [ + "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" + ], + last = [ + "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" + ] + + id = this.pick(DICT).id + + this.date('yyyyMMdd') + + this.string('number', 3) + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id + }, + + /* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 + */ + increment: function() { + var key = 0 + return function(step) { + return key += (+step || 1) // step? + } + }(), + inc: function(step) { + return this.increment(step) + } +} \ No newline at end of file diff --git a/src/mock/random/name.js b/src/mock/random/name.js new file mode 100644 index 00000000..e4989f45 --- /dev/null +++ b/src/mock/random/name.js @@ -0,0 +1,87 @@ +/* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) +*/ +module.exports = { + // 随机生成一个常见的英文名。 + first: function() { + var names = [ + // male + "James", "John", "Robert", "Michael", "William", + "David", "Richard", "Charles", "Joseph", "Thomas", + "Christopher", "Daniel", "Paul", "Mark", "Donald", + "George", "Kenneth", "Steven", "Edward", "Brian", + "Ronald", "Anthony", "Kevin", "Jason", "Matthew", + "Gary", "Timothy", "Jose", "Larry", "Jeffrey", + "Frank", "Scott", "Eric" + ].concat([ + // female + "Mary", "Patricia", "Linda", "Barbara", "Elizabeth", + "Jennifer", "Maria", "Susan", "Margaret", "Dorothy", + "Lisa", "Nancy", "Karen", "Betty", "Helen", + "Sandra", "Donna", "Carol", "Ruth", "Sharon", + "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", + "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", + "Brenda", "Amy", "Anna" + ]) + return this.pick(names) + // or this.capitalize(this.word()) + }, + // 随机生成一个常见的英文姓。 + last: function() { + var names = [ + "Smith", "Johnson", "Williams", "Brown", "Jones", + "Miller", "Davis", "Garcia", "Rodriguez", "Wilson", + "Martinez", "Anderson", "Taylor", "Thomas", "Hernandez", + "Moore", "Martin", "Jackson", "Thompson", "White", + "Lopez", "Lee", "Gonzalez", "Harris", "Clark", + "Lewis", "Robinson", "Walker", "Perez", "Hall", + "Young", "Allen" + ] + return this.pick(names) + // or this.capitalize(this.word()) + }, + // 随机生成一个常见的英文姓名。 + name: function(middle) { + return this.first() + ' ' + + (middle ? this.first() + ' ' : '') + + this.last() + }, + /* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + */ + cfirst: function() { + var names = ( + '王 李 张 刘 陈 杨 赵 黄 周 吴 ' + + '徐 孙 胡 朱 高 林 何 郭 马 罗 ' + + '梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' + + '程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' + + '苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' + + '余 潘 杜 戴 夏 锺 汪 田 任 姜 ' + + '范 方 石 姚 谭 廖 邹 熊 金 陆 ' + + '郝 孔 白 崔 康 毛 邱 秦 江 史 ' + + '顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' + + '尹 黎 易 常 武 乔 贺 赖 龚 文' + ).split(' ') + return this.pick(names) + }, + /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + */ + clast: function() { + var names = ( + '伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' + + '洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' + + '平 刚 桂英' + ).split(' ') + return this.pick(names) + }, + // 随机生成一个常见的中文姓名。 + cname: function() { + return this.cfirst() + this.clast() + } +} \ No newline at end of file diff --git a/src/mock/random/text.js b/src/mock/random/text.js new file mode 100644 index 00000000..98fb5974 --- /dev/null +++ b/src/mock/random/text.js @@ -0,0 +1,121 @@ +/* + ## Text + + http://www.lipsum.com/ +*/ +var Basic = require('./basic') +var Helper = require('./helper') + +function range(defaultMin, defaultMax, min, max) { + return min === undefined ? Basic.natural(defaultMin, defaultMax) : // () + max === undefined ? min : // ( len ) + Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max ) +} + +module.exports = { + // 随机生成一段文本。 + paragraph: function(min, max) { + var len = range(3, 7, min, max) + var result = [] + for (var i = 0; i < len; i++) { + result.push(this.sentence()) + } + return result.join(' ') + }, + // + cparagraph: function(min, max) { + var len = range(3, 7, min, max) + var result = [] + for (var i = 0; i < len; i++) { + result.push(this.csentence()) + } + return result.join('') + }, + // 随机生成一个句子,第一个单词的首字母大写。 + sentence: function(min, max) { + var len = range(12, 18, min, max) + var result = [] + for (var i = 0; i < len; i++) { + result.push(this.word()) + } + return Helper.capitalize(result.join(' ')) + '.' + }, + // 随机生成一个中文句子。 + csentence: function(min, max) { + var len = range(12, 18, min, max) + var result = [] + for (var i = 0; i < len; i++) { + result.push(this.cword()) + } + + return result.join('') + '。' + }, + // 随机生成一个单词。 + word: function(min, max) { + var len = range(3, 10, min, max) + var result = ''; + for (var i = 0; i < len; i++) { + result += Basic.character('lower') + } + return result + }, + // 随机生成一个或多个汉字。 + cword: function(pool, min, max) { + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞' + + var len + switch (arguments.length) { + case 0: // () + pool = DICT_KANZI + len = 1 + break + case 1: // ( pool ) + if (typeof arguments[0] === 'string') { + len = 1 + } else { + // ( length ) + len = pool + pool = DICT_KANZI + } + break + case 2: + // ( pool, length ) + if (typeof arguments[0] === 'string') { + len = min + } else { + // ( min, max ) + len = this.natural(pool, min) + pool = DICT_KANZI + } + break + case 3: + len = this.natural(min, max) + break + } + + var result = '' + for (var i = 0; i < len; i++) { + result += pool.charAt(this.natural(0, pool.length - 1)) + } + return result + }, + // 随机生成一句标题,其中每个单词的首字母大写。 + title: function(min, max) { + var len = range(3, 7, min, max) + var result = [] + for (var i = 0; i < len; i++) { + result.push(this.capitalize(this.word())) + } + return result.join(' ') + }, + // 随机生成一句中文标题。 + ctitle: function(min, max) { + var len = range(3, 7, min, max) + var result = [] + for (var i = 0; i < len; i++) { + result.push(this.cword()) + } + return result.join('') + } +} \ No newline at end of file diff --git a/src/mock/random/web.js b/src/mock/random/web.js new file mode 100644 index 00000000..d02943d8 --- /dev/null +++ b/src/mock/random/web.js @@ -0,0 +1,76 @@ +/* + ## Web +*/ +module.exports = { + /* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers + */ + url: function(protocol, host) { + return (protocol || this.protocol()) + '://' + // protocol? + (host || this.domain()) + // host? + '/' + this.word() + }, + // 随机生成一个 URL 协议。 + protocol: function() { + return this.pick( + // 协议簇 + 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ') + ) + }, + // 随机生成一个域名。 + domain: function(tld) { + return this.word() + '.' + (tld || this.tld()) + }, + /* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) + */ + tld: function() { // Top Level Domain + return this.pick( + ( + // 域名后缀 + 'com net org edu gov int mil cn ' + + // 国内域名 + 'com.cn net.cn gov.cn org.cn ' + + // 中文国内域名 + '中国 中国互联.公司 中国互联.网络 ' + + // 新国际域名 + 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + + // 世界各国域名后缀 + 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' + ).split(' ') + ) + }, + // 随机生成一个邮件地址。 + email: function(domain) { + return this.character('lower') + '.' + this.word() + '@' + + ( + domain || + (this.word() + '.' + this.tld()) + ) + // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld() + // return this.word() + '@' + (domain || this.domain()) + }, + // 随机生成一个 IP 地址。 + ip: function() { + return this.natural(0, 255) + '.' + + this.natural(0, 255) + '.' + + this.natural(0, 255) + '.' + + this.natural(0, 255) + } +} \ No newline at end of file diff --git a/src/mock/regexp/handler.js b/src/mock/regexp/handler.js new file mode 100644 index 00000000..3671047d --- /dev/null +++ b/src/mock/regexp/handler.js @@ -0,0 +1,369 @@ +/* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } + + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ + +var Util = require("../util"); +var Random = require("../random"); +/* + + */ +var Handler = { + extend: Util.extend, +}; + +// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +/*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] +}*/ + +// ASCII printable code chart +// var LOWER = 'abcdefghijklmnopqrstuvwxyz' +// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +// var NUMBER = '0123456789' +// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' +var LOWER = ascii(97, 122); +var UPPER = ascii(65, 90); +var NUMBER = ascii(48, 57); +var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) +var PRINTABLE = ascii(32, 126); +var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; +var CHARACTER_CLASSES = { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ""); + } + return result; + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, +}; + +function ascii(from, to) { + var result = ""; + for (var i = from; i <= to; i++) { + result += String.fromCharCode(i); + } + return result; +} + +// var ast = RegExpParser.parse(regexp.source) +Handler.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler[node.type] ? Handler[node.type](node, result, cache) : Handler.token(node, result, cache); +}; + +Handler.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case "start": + case "end": + return ""; + case "any-character": + return Random.character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return Random.pick(NUMBER.split("")); + case "non-digit": + return Random.pick((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return Random.pick(SPACE.split("")); + case "non-white-space": + return Random.pick((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return Random.pick((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return Random.pick(OTHER.replace("_", "").split("")); + case "null-character": + break; + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(Random.boolean() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ""; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + "capture-group": function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + "non-capture-group": function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + "positive-lookahead": function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + "negative-lookahead": function (node, result, cache) { + // node.body + return ""; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : min + Random.integer(3, 7); + return Random.integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this["invert-charset"](node, result, cache); + + // node.body [] + var literal = Random.pick(node.body); + return this.gen(literal, result, cache); + }, + "invert-charset": function (node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ""); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ""); + } + } + } + } + return Random.pick(pool.split("")); + }, + range: function (node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(Random.integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, +}); + +module.exports = Handler; diff --git a/src/mock/regexp/index.js b/src/mock/regexp/index.js new file mode 100644 index 00000000..4d2d02e0 --- /dev/null +++ b/src/mock/regexp/index.js @@ -0,0 +1,6 @@ +var Parser = require('./parser') +var Handler = require('./handler') +module.exports = { + Parser: Parser, + Handler: Handler +} \ No newline at end of file diff --git a/src/mock/regexp/parser.js b/src/mock/regexp/parser.js new file mode 100644 index 00000000..03906dd1 --- /dev/null +++ b/src/mock/regexp/parser.js @@ -0,0 +1,570 @@ +// https://github.com/nuysoft/regexp +// forked from https://github.com/ForbesLindesay/regexp + +function parse(n) { + if ("string" != typeof n) { + var l = new TypeError("The regexp to parse must be represented as a string."); + throw l; + } + return index = 1, cgs = {}, parser.parse(n); +} + +function Token(n) { + this.type = n, this.offset = Token.offset(), this.text = Token.text(); +} + +function Alternate(n, l) { + Token.call(this, "alternate"), this.left = n, this.right = l; +} + +function Match(n) { + Token.call(this, "match"), this.body = n.filter(Boolean); +} + +function Group(n, l) { + Token.call(this, n), this.body = l; +} + +function CaptureGroup(n) { + Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), + this.body = n; +} + +function Quantified(n, l) { + Token.call(this, "quantified"), this.body = n, this.quantifier = l; +} + +function Quantifier(n, l) { + Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0; +} + +function CharSet(n, l) { + Token.call(this, "charset"), this.invert = n, this.body = l; +} + +function CharacterRange(n, l) { + Token.call(this, "range"), this.start = n, this.end = l; +} + +function Literal(n) { + Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text; +} + +function Unicode(n) { + Token.call(this, "unicode"), this.code = n.toUpperCase(); +} + +function Hex(n) { + Token.call(this, "hex"), this.code = n.toUpperCase(); +} + +function Octal(n) { + Token.call(this, "octal"), this.code = n.toUpperCase(); +} + +function BackReference(n) { + Token.call(this, "back-reference"), this.code = n.toUpperCase(); +} + +function ControlCharacter(n) { + Token.call(this, "control-character"), this.code = n.toUpperCase(); +} + +var parser = function() { + function n(n, l) { + function u() { + this.constructor = n; + } + u.prototype = l.prototype, n.prototype = new u(); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) { + return "\\x0" + l(n); + }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) { + return "\\x" + l(n); + }).replace(/[\u0180-\u0FFF]/g, function(n) { + return "\\u0" + l(n); + }).replace(/[\u1080-\uFFFF]/g, function(n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; + } + this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, + this.name = "SyntaxError", this.message = e(n, l); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, + l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, + l.seenCR = !0) : (l.column++, l.seenCR = !1); + } + return Mt !== l && (Mt > l && (Mt = 0, Dt = { + line: 1, + column: 1, + seenCR: !1 + }), u(Dt, Mt, l), Mt = l), Dt; + } + function e(n) { + Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, + qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], + t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, + u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, + l = il), l; + } + function i() { + var n, l, u, t, r; + if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), + Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), + null === r && (r = a()); + null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), + null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); + } else qt = n, n = il; else qt = n, n = il; + return n; + } + function a() { + var n; + return n = x(), null === n && (n = Q(), null === n && (n = B())), n; + } + function f() { + var l, u; + return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), + null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; + } + function s() { + var l, u; + return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), + null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; + } + function h() { + var n, l, u; + return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), + null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; + } + function d() { + var n, l, u; + return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, + l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, + n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; + } + function p() { + var n; + return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), + null === n && (n = g(), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), + null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, + 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, + qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, + l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function w() { + var l, u, t, r; + return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), + null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, + 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + } + function A() { + var l, u, t, r; + return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), + null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, + 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + } + function C() { + var l, u; + return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), + null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; + } + function g() { + var l, u; + return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), + null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; + } + function b() { + var l, u; + return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), + null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), + l; + } + function T() { + var l, u, t; + if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, + 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), + qt++) : (t = null, 0 === Wt && e(Il)); else u = il; + return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, + l; + } + function x() { + var l, u, t, r; + return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), + null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), + null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), + null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + } + function y() { + var n, l; + return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, + n = l) : n = l, n; + } + function m() { + var l, u, t; + return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), + null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function R() { + var l, u, t; + return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), + null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function F() { + var l, u, t; + return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), + null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function Q() { + var l, u, t, r, o; + if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), + null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), + null === t && (t = al), null !== t) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), + null === o && (o = U()); + null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), + null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il); + } else qt = l, l = il; else qt = l, l = il; + return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, + 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, + l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, + null === l && (u = null, 0 === Wt && e(du)), l; + } + function U() { + var n, l; + return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), + n; + } + function E() { + var l, u; + return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), + null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; + } + function G() { + var n; + return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), + null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), + null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), + null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), + null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; + } + function B() { + var n; + return n = j(), null === n && (n = q(), null === n && (n = $())), n; + } + function j() { + var l, u; + return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), + null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; + } + function $() { + var l, u; + return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, + 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, + Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; + } + function q() { + var n; + return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), + null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), + null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), + null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), + null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), + n; + } + function L() { + var l, u; + return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), + null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; + } + function M() { + var l, u; + return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), + null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; + } + function D() { + var l, u; + return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), + null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; + } + function H() { + var l, u; + return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), + null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; + } + function O() { + var l, u; + return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), + null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; + } + function W() { + var l, u; + return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), + null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; + } + function z() { + var l, u; + return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), + null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; + } + function I() { + var l, u; + return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), + null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; + } + function J() { + var l, u; + return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), + null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; + } + function K() { + var l, u; + return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), + null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; + } + function N() { + var l, u; + return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), + null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; + } + function P() { + var l, u; + return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), + null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; + } + function V() { + var l, u; + return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), + null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; + } + function X() { + var l, u; + return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), + null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; + } + function Y() { + var l, u, t; + return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), + null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), + null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function Z() { + var l, u, t; + return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), + null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), + null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + function _() { + var l, u, t, r; + if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), + null !== u) { + if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), + null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), + qt++) : (r = null, 0 === Wt && e(mt)); else t = il; + null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il); + } else qt = l, l = il; + return l; + } + function nl() { + var l, u, t, r; + if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), + null !== u) { + if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), + null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), + qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; + null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il); + } else qt = l, l = il; + return l; + } + function ll() { + var l, u, t, r; + if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), + null !== u) { + if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), + null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), + qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; + null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il); + } else qt = l, l = il; + return l; + } + function ul() { + var l, u; + return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), + null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; + } + function tl() { + var l, u, t; + return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), + null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), + null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, + l = il)) : (qt = l, l = il), l; + } + var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { + regexp: c + }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) { + return l ? new Alternate(n, l[1]) : n; + }, dl = function(n, l, u) { + return new Match([ n ].concat(l).concat([ u ])); + }, pl = "^", vl = '"^"', wl = function() { + return new Token("start"); + }, Al = "$", Cl = '"$"', gl = function() { + return new Token("end"); + }, bl = function(n, l) { + return new Quantified(n, l); + }, kl = "Quantifier", Tl = function(n, l) { + return l && (n.greedy = !1), n; + }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) { + return new Quantifier(n, l); + }, Ul = ",}", El = '",}"', Gl = function(n) { + return new Quantifier(n, 1/0); + }, Bl = function(n) { + return new Quantifier(n, n); + }, jl = "+", $l = '"+"', ql = function() { + return new Quantifier(1, 1/0); + }, Ll = "*", Ml = '"*"', Dl = function() { + return new Quantifier(0, 1/0); + }, Hl = "?", Ol = '"?"', Wl = function() { + return new Quantifier(0, 1); + }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) { + return +n.join(""); + }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) { + return n; + }, Yl = function(n) { + return new CaptureGroup(n); + }, Zl = "?:", _l = '"?:"', nu = function(n) { + return new Group("non-capture-group", n); + }, lu = "?=", uu = '"?="', tu = function(n) { + return new Group("positive-lookahead", n); + }, ru = "?!", eu = '"?!"', ou = function(n) { + return new Group("negative-lookahead", n); + }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) { + return new CharSet(!!n, l); + }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) { + return new CharacterRange(n, l); + }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) { + return new Literal(n); + }, ku = ".", Tu = '"."', xu = function() { + return new Token("any-character"); + }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() { + return new Token("backspace"); + }, Uu = function() { + return new Token("word-boundary"); + }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() { + return new Token("non-word-boundary"); + }, ju = "\\d", $u = '"\\\\d"', qu = function() { + return new Token("digit"); + }, Lu = "\\D", Mu = '"\\\\D"', Du = function() { + return new Token("non-digit"); + }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() { + return new Token("form-feed"); + }, zu = "\\n", Iu = '"\\\\n"', Ju = function() { + return new Token("line-feed"); + }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() { + return new Token("carriage-return"); + }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() { + return new Token("white-space"); + }, Zu = "\\S", _u = '"\\\\S"', nt = function() { + return new Token("non-white-space"); + }, lt = "\\t", ut = '"\\\\t"', tt = function() { + return new Token("tab"); + }, rt = "\\v", et = '"\\\\v"', ot = function() { + return new Token("vertical-tab"); + }, ct = "\\w", it = '"\\\\w"', at = function() { + return new Token("word"); + }, ft = "\\W", st = '"\\\\W"', ht = function() { + return new Token("non-word"); + }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) { + return new ControlCharacter(n); + }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) { + return new BackReference(n); + }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) { + return new Octal(n.join("")); + }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) { + return new Hex(n.join("")); + }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) { + return new Unicode(n.join("")); + }, $t = function() { + return new Token("null-character"); + }, qt = 0, Lt = 0, Mt = 0, Dt = { + line: 1, + column: 1, + seenCR: !1 + }, Ht = 0, Ot = [], Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl; + throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column); + } + return n(l, Error), { + SyntaxError: l, + parse: u + }; +}(), index = 1, cgs = {}; + +module.exports = parser \ No newline at end of file diff --git a/src/mock/schema/index.js b/src/mock/schema/index.js new file mode 100644 index 00000000..24f823bd --- /dev/null +++ b/src/mock/schema/index.js @@ -0,0 +1 @@ +module.exports = require('./schema') \ No newline at end of file diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js new file mode 100644 index 00000000..a78b2584 --- /dev/null +++ b/src/mock/schema/schema.js @@ -0,0 +1,47 @@ +/* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ +var Constant = require('../constant') +var Util = require('../util') +var Parser = require('../parser') + +function toJSONSchema(template, name, path /* Internal Use Only */ ) { + // type rule properties items + path = path || [] + var result = { + name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, + template: template, + type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: Parser.parse(name) + } + result.path = path.slice(0) + result.path.push(name === undefined ? 'ROOT' : result.name) + + switch (result.type) { + case 'array': + result.items = [] + Util.each(template, function(value, index) { + result.items.push( + toJSONSchema(value, index, result.path) + ) + }) + break + case 'object': + result.properties = [] + Util.each(template, function(value, name) { + result.properties.push( + toJSONSchema(value, name, result.path) + ) + }) + break + } + + return result + +} + +module.exports = toJSONSchema diff --git a/src/mock/util.js b/src/mock/util.js new file mode 100644 index 00000000..bd36d50b --- /dev/null +++ b/src/mock/util.js @@ -0,0 +1,126 @@ +/* + ## Utilities +*/ +var Util = {} + +Util.extend = function extend() { + var target = arguments[0] || {}, + i = 1, + length = arguments.length, + options, name, src, copy, clone + + if (length === 1) { + target = this + i = 0 + } + + for (; i < length; i++) { + options = arguments[i] + if (!options) continue + + for (name in options) { + src = target[name] + copy = options[name] + + if (target === copy) continue + if (copy === undefined) continue + + if (Util.isArray(copy) || Util.isObject(copy)) { + if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : [] + if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {} + + target[name] = Util.extend(clone, copy) + } else { + target[name] = copy + } + } + } + + return target +} + +Util.each = function each(obj, iterator, context) { + var i, key + if (this.type(obj) === 'number') { + for (i = 0; i < obj; i++) { + iterator(i, i) + } + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break + } + } +} + +Util.type = function type(obj) { + return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase() +} + +Util.each('String Object Array RegExp Function'.split(' '), function(value) { + Util['is' + value] = function(obj) { + return Util.type(obj) === value.toLowerCase() + } +}) + +Util.isObjectOrArray = function(value) { + return Util.isObject(value) || Util.isArray(value) +} + +Util.isNumeric = function(value) { + return !isNaN(parseFloat(value)) && isFinite(value) +} + +Util.keys = function(obj) { + var keys = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) keys.push(key) + } + return keys; +} +Util.values = function(obj) { + var values = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) values.push(obj[key]) + } + return values; +} + +/* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 +*/ +Util.heredoc = function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn.toString() + .replace(/^[^\/]+\/\*!?/, '') + .replace(/\*\/[^\/]+$/, '') + .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim() +} + +Util.noop = function() {} + +module.exports = Util \ No newline at end of file diff --git a/src/mock/valid/index.js b/src/mock/valid/index.js new file mode 100644 index 00000000..ea476661 --- /dev/null +++ b/src/mock/valid/index.js @@ -0,0 +1 @@ +module.exports = require('./valid') \ No newline at end of file diff --git a/src/mock/valid/valid.js b/src/mock/valid/valid.js new file mode 100644 index 00000000..f785ac19 --- /dev/null +++ b/src/mock/valid/valid.js @@ -0,0 +1,445 @@ +/* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) +*/ +var Constant = require('../constant') +var Util = require('../util') +var toJSONSchema = require('../schema') + +function valid(template, data) { + var schema = toJSONSchema(template) + var result = Diff.diff(schema, data) + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result +} + +/* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 +*/ +var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */ ) { + var result = [] + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if ( + this.name(schema, data, name, result) && + this.type(schema, data, name, result) + ) { + this.value(schema, data, name, result) + this.properties(schema, data, name, result) + this.items(schema, data, name, result) + } + + return result + }, + /* jshint unused:false */ + name: function(schema, data, name, result) { + var length = result.length + + Assert.equal('name', schema.path, name + '', schema.name + '', result) + + return result.length === length + }, + type: function(schema, data, name, result) { + var length = result.length + + switch (schema.type) { + case 'string': + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true + break + case 'array': + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true + } + break + case 'function': + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true + } + + Assert.equal('type', schema.path, Util.type(data), schema.type, result) + + return result.length === length + }, + value: function(schema, data, name, result) { + var length = result.length + + var rule = schema.rule + var templateType = schema.type + if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case 'regexp': + Assert.match('value', schema.path, data, schema.template, result) + return result.length === length + case 'string': + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length + break + } + Assert.equal('value', schema.path, data, schema.template, result) + return result.length === length + } + + // 有生成规则 + var actualRepeatCount + switch (templateType) { + case 'number': + var parts = (data + '').split('.') + parts[0] = +parts[0] + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result) + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result) + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name) + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result) + Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result) + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal('value', schema.path, parts[1].length, rule.dmin, result) + } + } + + break + + case 'boolean': + break + + case 'string': + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, 'g')) + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) + } + + break + + case 'regexp': + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')) + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) + } + break + } + + return result.length === length + }, + properties: function(schema, data, name, result) { + var length = result.length + + var rule = schema.rule + var keys = Util.keys(data) + if (!schema.properties) return + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result) + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result) + Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result) + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result) + } + } + + if (result.length !== length) return false + + for (var i = 0; i < keys.length; i++) { + result.push.apply( + result, + this.diff( + function() { + var property + Util.each(schema.properties, function(item /*, index*/ ) { + if (item.name === keys[i]) property = item + }) + return property || schema.properties[i] + }(), + data[keys[i]], + keys[i] + ) + ) + } + + return result.length === length + }, + items: function(schema, data, name, result) { + var length = result.length + + if (!schema.items) return + + var rule = schema.rule + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('items length', schema.path, data.length, schema.items.length, result) + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result, + '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements') + Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result, + '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements') + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length + else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result) + } + // |+inc + if (rule.parameters[2]) return result.length === length + } + + if (result.length !== length) return false + + for (var i = 0; i < data.length; i++) { + result.push.apply( + result, + this.diff( + schema.items[i % schema.items.length], + data[i], + i % schema.items.length + ) + ) + } + + return result.length === length + } +} + +/* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + +*/ +var Assert = { + message: function(item) { + return (item.message || + '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}') + .replace('{utype}', item.type.toUpperCase()) + .replace('{ltype}', item.type.toLowerCase()) + .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path) + .replace('{action}', item.action) + .replace('{expected}', item.expected) + .replace('{actual}', item.actual) + }, + equal: function(type, path, actual, expected, result, message) { + if (actual === expected) return true + switch (type) { + case 'type': + // 正则模板 === 字符串最终值 + if (expected === 'regexp' && actual === 'string') return true + break + } + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is equal to', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + }, + // actual matches expected + match: function(type, path, actual, expected, result, message) { + if (expected.test(actual)) return true + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'matches', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + }, + notEqual: function(type, path, actual, expected, result, message) { + if (actual !== expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is not equal to', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + }, + greaterThan: function(type, path, actual, expected, result, message) { + if (actual > expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + }, + lessThan: function(type, path, actual, expected, result, message) { + if (actual < expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less to', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + }, + greaterThanOrEqualTo: function(type, path, actual, expected, result, message) { + if (actual >= expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than or equal to', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + }, + lessThanOrEqualTo: function(type, path, actual, expected, result, message) { + if (actual <= expected) return true + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less than or equal to', + message: message + } + item.message = Assert.message(item) + result.push(item) + return false + } +} + +valid.Diff = Diff +valid.Assert = Assert + +module.exports = valid \ No newline at end of file diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js new file mode 100644 index 00000000..edf84ff5 --- /dev/null +++ b/src/mock/xhr/index.js @@ -0,0 +1 @@ +module.exports = require('./xhr') \ No newline at end of file diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/xhr.js new file mode 100644 index 00000000..daf2af4b --- /dev/null +++ b/src/mock/xhr/xhr.js @@ -0,0 +1,442 @@ +/* global window, document, location, Event, setTimeout */ +/* + ## MockXMLHttpRequest + + 期望的功能: + 1. 完整地覆盖原生 XHR 的行为 + 2. 完整地模拟原生 XHR 的行为 + 3. 在发起请求时,自动检测是否需要拦截 + 4. 如果不必拦截,则执行原生 XHR 的行为 + 5. 如果需要拦截,则执行虚拟 XHR 的行为 + 6. 兼容 XMLHttpRequest 和 ActiveXObject + new window.XMLHttpRequest() + new window.ActiveXObject("Microsoft.XMLHTTP") + + 关键方法的逻辑: + * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。 + * open 此时可以取到 URL,可以决定是否进行拦截。 + * send 此时已经确定了请求方式。 + + 规范: + http://xhr.spec.whatwg.org/ + http://www.w3.org/TR/XMLHttpRequest2/ + + 参考实现: + https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js + https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js + https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js + https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js + https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js + + **需不需要全面重写 XMLHttpRequest?** + http://xhr.spec.whatwg.org/#interface-xmlhttprequest + 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。 + 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。 + + // Event handlers + onloadstart loadstart + onprogress progress + onabort abort + onerror error + onload load + ontimeout timeout + onloadend loadend + onreadystatechange readystatechange + */ + +var Util = require('../util') + +// 备份原生 XMLHttpRequest +window._XMLHttpRequest = window.XMLHttpRequest +window._ActiveXObject = window.ActiveXObject + +/* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 +*/ +try { + new window.Event('custom') +} catch (exception) { + window.Event = function(type, bubbles, cancelable, detail) { + var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail) + return event + } +} + +var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4 +} + +var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ') +var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ') +var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ') + +// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 +var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported" +} + +/* + MockXMLHttpRequest +*/ + +function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {} + } +} + +MockXMLHttpRequest._settings = { + timeout: '10-100', + /* + timeout: 50, + timeout: '10-100', + */ +} + +MockXMLHttpRequest.setup = function(settings) { + Util.extend(MockXMLHttpRequest._settings, settings) + return MockXMLHttpRequest._settings +} + +Util.extend(MockXMLHttpRequest, XHR_STATES) +Util.extend(MockXMLHttpRequest.prototype, XHR_STATES) + +// 标记当前对象为 MockXMLHttpRequest +MockXMLHttpRequest.prototype.mock = true + +// 是否拦截 Ajax 请求 +MockXMLHttpRequest.prototype.match = false + +// 初始化 Request 相关的属性和方法 +Util.extend(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function(method, url, async, username, password) { + var that = this + + Util.extend(this.custom, { + method: method, + url: url, + async: typeof async === 'boolean' ? async : true, + username: username, + password: password, + options: { + url: url, + type: method + } + }) + + this.custom.timeout = function(timeout) { + if (typeof timeout === 'number') return timeout + if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10) + if (typeof timeout === 'string' && ~timeout.indexOf('-')) { + var tmp = timeout.split('-') + var min = parseInt(tmp[0], 10) + var max = parseInt(tmp[1], 10) + return Math.round(Math.random() * (max - min)) + min + } + }(MockXMLHttpRequest._settings.timeout) + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options) + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]] + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/ )) + } + + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest() + this.custom.xhr = xhr + + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle) + } + + // xhr.open() + if (username) xhr.open(method, url, async, username, password) + else xhr.open(method, url, async) + + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]] + } catch (e) {} + } + + return + } + + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true + this.custom.template = item + this.readyState = MockXMLHttpRequest.OPENED + this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ )) + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function(name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value) + return + } + + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders + if (requestHeaders[name]) requestHeaders[name] += ',' + value + else requestHeaders[name] = value + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this + this.custom.options.body = data + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data) + return + } + + // 拦截 XHR + + // X-Requested-With header + this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest') + + // loadstart The fetch initiates. + this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ )) + + if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步 + else done() // 同步 + + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED + that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) + that.readyState = MockXMLHttpRequest.LOADING + that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) + + that.status = 200 + that.statusText = HTTP_STATUS_CODES[200] + + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify( + convert(that.custom.template, that.custom.options), + null, 4 + ) + + that.readyState = MockXMLHttpRequest.DONE + that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) + that.dispatchEvent(new Event('load' /*, false, false, that*/ )); + that.dispatchEvent(new Event('loadend' /*, false, false, that*/ )); + } + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort() + return + } + + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT + this.dispatchEvent(new Event('abort', false, false, this)) + this.dispatchEvent(new Event('error', false, false, this)) + } +}) + +// 初始化 Response 相关的属性和方法 +Util.extend(MockXMLHttpRequest.prototype, { + responseURL: '', + status: MockXMLHttpRequest.UNSENT, + statusText: '', + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function(name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name) + } + + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()] + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function() { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders() + } + + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders + var headers = '' + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue + headers += h + ': ' + responseHeaders[h] + '\r\n' + } + return headers + }, + overrideMimeType: function( /*mime*/ ) {}, + responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: '', + responseXML: null +}) + +// EventTarget +Util.extend(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events + if (!events[type]) events[type] = [] + events[type].push(handle) + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || [] + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1) + } + } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || [] + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event) + } + + var ontype = 'on' + event.type + if (this[ontype]) this[ontype](event) + } +}) + +// Inspired by jQuery +function createNativeXMLHttpRequest() { + var isLocal = function() { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ + var ajaxLocation = location.href + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [] + return rlocalProtocol.test(ajaxLocParts[1]) + }() + + return window.ActiveXObject ? + (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR() + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} + } + + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } +} + + +// 查找与请求参数匹配的数据模板:URL,Type +function find(options) { + + for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { + var item = MockXMLHttpRequest.Mock._mocked[sUrlType] + if ( + (!item.rurl || match(item.rurl, options.url)) && + (!item.rtype || match(item.rtype, options.type.toLowerCase())) + ) { + // console.log('[mock]', options.url, '>', item.rurl) + return item + } + } + + function match(expected, actual) { + if (Util.type(expected) === 'string') { + return expected === actual + } + if (Util.type(expected) === 'regexp') { + return expected.test(actual) + } + } + +} + +// 数据模板 => 响应数据 +function convert(item, options) { + return Util.isFunction(item.template) ? + item.template(options) : MockXMLHttpRequest.Mock.mock(item.template) +} + +module.exports = MockXMLHttpRequest \ No newline at end of file diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..16d4db66 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2005 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" + integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + dependencies: + "@babel/highlight" "^7.12.13" + +"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" + integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== + +"@babel/core@^7.14.3": + version "7.14.3" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" + integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.3" + "@babel/helper-compilation-targets" "^7.13.16" + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helpers" "^7.14.0" + "@babel/parser" "^7.14.3" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.1.2" + semver "^6.3.0" + source-map "^0.5.0" + +"@babel/generator@^7.14.2", "@babel/generator@^7.14.3": + version "7.14.3" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" + integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== + dependencies: + "@babel/types" "^7.14.2" + jsesc "^2.5.1" + source-map "^0.5.0" + +"@babel/helper-annotate-as-pure@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" + integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" + integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" + integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-validator-option" "^7.12.17" + browserslist "^4.16.6" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" + integrity sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-replace-supers" "^7.14.4" + "@babel/helper-split-export-declaration" "^7.12.13" + +"@babel/helper-create-regexp-features-plugin@^7.12.13": + version "7.14.3" + resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688" + integrity sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + regexpu-core "^4.7.1" + +"@babel/helper-define-polyfill-provider@^0.2.2": + version "0.2.3" + resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" + integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== + dependencies: + "@babel/helper-compilation-targets" "^7.13.0" + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/traverse" "^7.13.0" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-explode-assignable-expression@^7.12.13": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" + integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== + dependencies: + "@babel/types" "^7.13.0" + +"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" + integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== + dependencies: + "@babel/helper-get-function-arity" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/types" "^7.14.2" + +"@babel/helper-get-function-arity@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" + integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-hoist-variables@^7.13.0": + version "7.13.16" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" + integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== + dependencies: + "@babel/traverse" "^7.13.15" + "@babel/types" "^7.13.16" + +"@babel/helper-member-expression-to-functions@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" + integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" + integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" + integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== + dependencies: + "@babel/helper-module-imports" "^7.13.12" + "@babel/helper-replace-supers" "^7.13.12" + "@babel/helper-simple-access" "^7.13.12" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/helper-validator-identifier" "^7.14.0" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.2" + +"@babel/helper-optimise-call-expression@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" + integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" + integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== + +"@babel/helper-remap-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" + integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-wrap-function" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz#b2ab16875deecfff3ddfcd539bc315f72998d836" + integrity sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.13.12" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/traverse" "^7.14.2" + "@babel/types" "^7.14.4" + +"@babel/helper-simple-access@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" + integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== + dependencies: + "@babel/types" "^7.13.12" + +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + +"@babel/helper-split-export-declaration@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" + integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== + dependencies: + "@babel/types" "^7.12.13" + +"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" + integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== + +"@babel/helper-validator-option@^7.12.17": + version "7.12.17" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" + integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== + +"@babel/helper-wrap-function@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" + integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.13.0" + "@babel/types" "^7.13.0" + +"@babel/helpers@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" + integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== + dependencies: + "@babel/template" "^7.12.13" + "@babel/traverse" "^7.14.0" + "@babel/types" "^7.14.0" + +"@babel/highlight@^7.12.13": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" + integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" + integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": + version "7.13.12" + resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" + integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.13.12" + +"@babel/plugin-proposal-async-generator-functions@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" + integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" + integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-class-static-block@^7.14.3": + version "7.14.3" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" + integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.14.3" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-class-static-block" "^7.12.13" + +"@babel/plugin-proposal-dynamic-import@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" + integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" + integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" + integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" + integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" + integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" + integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz#0e2b4de419915dc0b409378e829412e2031777c4" + integrity sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.14.2" + +"@babel/plugin-proposal-optional-catch-binding@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" + integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" + integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" + integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-proposal-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" + integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-create-class-features-plugin" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" + integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" + integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" + integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-syntax-top-level-await@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" + integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-arrow-functions@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" + integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-async-to-generator@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" + integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== + dependencies: + "@babel/helper-module-imports" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-remap-async-to-generator" "^7.13.0" + +"@babel/plugin-transform-block-scoped-functions@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" + integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-block-scoping@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz#caf140b0b2e2462c509553d140e6d0abefb61ed8" + integrity sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-classes@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz#a83c15503fc71a0f99e876fdce7dadbc6575ec3a" + integrity sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.12.13" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-optimise-call-expression" "^7.12.13" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-replace-supers" "^7.14.4" + "@babel/helper-split-export-declaration" "^7.12.13" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" + integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-destructuring@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz#acbec502e9951f30f4441eaca1d2f29efade59ed" + integrity sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" + integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-duplicate-keys@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" + integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-exponentiation-operator@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" + integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-for-of@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" + integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-function-name@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" + integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== + dependencies: + "@babel/helper-function-name" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" + integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-member-expression-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" + integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-modules-amd@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" + integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== + dependencies: + "@babel/helper-module-transforms" "^7.14.2" + "@babel/helper-plugin-utils" "^7.13.0" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-commonjs@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" + integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== + dependencies: + "@babel/helper-module-transforms" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-simple-access" "^7.13.12" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-systemjs@^7.13.8": + version "7.13.8" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" + integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== + dependencies: + "@babel/helper-hoist-variables" "^7.13.0" + "@babel/helper-module-transforms" "^7.13.0" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-identifier" "^7.12.11" + babel-plugin-dynamic-import-node "^2.3.3" + +"@babel/plugin-transform-modules-umd@^7.14.0": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" + integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== + dependencies: + "@babel/helper-module-transforms" "^7.14.0" + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" + integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + +"@babel/plugin-transform-new-target@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" + integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-object-super@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" + integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + "@babel/helper-replace-supers" "^7.12.13" + +"@babel/plugin-transform-parameters@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" + integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-property-literals@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" + integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-regenerator@^7.13.15": + version "7.13.15" + resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" + integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" + integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-shorthand-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" + integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-spread@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" + integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + +"@babel/plugin-transform-sticky-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" + integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-template-literals@^7.13.0": + version "7.13.0" + resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" + integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== + dependencies: + "@babel/helper-plugin-utils" "^7.13.0" + +"@babel/plugin-transform-typeof-symbol@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" + integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-escapes@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" + integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-transform-unicode-regex@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" + integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.13" + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/preset-env@^7.14.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz#73fc3228c59727e5e974319156f304f0d6685a2d" + integrity sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA== + dependencies: + "@babel/compat-data" "^7.14.4" + "@babel/helper-compilation-targets" "^7.14.4" + "@babel/helper-plugin-utils" "^7.13.0" + "@babel/helper-validator-option" "^7.12.17" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" + "@babel/plugin-proposal-async-generator-functions" "^7.14.2" + "@babel/plugin-proposal-class-properties" "^7.13.0" + "@babel/plugin-proposal-class-static-block" "^7.14.3" + "@babel/plugin-proposal-dynamic-import" "^7.14.2" + "@babel/plugin-proposal-export-namespace-from" "^7.14.2" + "@babel/plugin-proposal-json-strings" "^7.14.2" + "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" + "@babel/plugin-proposal-numeric-separator" "^7.14.2" + "@babel/plugin-proposal-object-rest-spread" "^7.14.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" + "@babel/plugin-proposal-optional-chaining" "^7.14.2" + "@babel/plugin-proposal-private-methods" "^7.13.0" + "@babel/plugin-proposal-private-property-in-object" "^7.14.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.12.13" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.0" + "@babel/plugin-syntax-top-level-await" "^7.12.13" + "@babel/plugin-transform-arrow-functions" "^7.13.0" + "@babel/plugin-transform-async-to-generator" "^7.13.0" + "@babel/plugin-transform-block-scoped-functions" "^7.12.13" + "@babel/plugin-transform-block-scoping" "^7.14.4" + "@babel/plugin-transform-classes" "^7.14.4" + "@babel/plugin-transform-computed-properties" "^7.13.0" + "@babel/plugin-transform-destructuring" "^7.14.4" + "@babel/plugin-transform-dotall-regex" "^7.12.13" + "@babel/plugin-transform-duplicate-keys" "^7.12.13" + "@babel/plugin-transform-exponentiation-operator" "^7.12.13" + "@babel/plugin-transform-for-of" "^7.13.0" + "@babel/plugin-transform-function-name" "^7.12.13" + "@babel/plugin-transform-literals" "^7.12.13" + "@babel/plugin-transform-member-expression-literals" "^7.12.13" + "@babel/plugin-transform-modules-amd" "^7.14.2" + "@babel/plugin-transform-modules-commonjs" "^7.14.0" + "@babel/plugin-transform-modules-systemjs" "^7.13.8" + "@babel/plugin-transform-modules-umd" "^7.14.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" + "@babel/plugin-transform-new-target" "^7.12.13" + "@babel/plugin-transform-object-super" "^7.12.13" + "@babel/plugin-transform-parameters" "^7.14.2" + "@babel/plugin-transform-property-literals" "^7.12.13" + "@babel/plugin-transform-regenerator" "^7.13.15" + "@babel/plugin-transform-reserved-words" "^7.12.13" + "@babel/plugin-transform-shorthand-properties" "^7.12.13" + "@babel/plugin-transform-spread" "^7.13.0" + "@babel/plugin-transform-sticky-regex" "^7.12.13" + "@babel/plugin-transform-template-literals" "^7.13.0" + "@babel/plugin-transform-typeof-symbol" "^7.12.13" + "@babel/plugin-transform-unicode-escapes" "^7.12.13" + "@babel/plugin-transform-unicode-regex" "^7.12.13" + "@babel/preset-modules" "^0.1.4" + "@babel/types" "^7.14.4" + babel-plugin-polyfill-corejs2 "^0.2.0" + babel-plugin-polyfill-corejs3 "^0.2.0" + babel-plugin-polyfill-regenerator "^0.2.0" + core-js-compat "^3.9.0" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.4": + version "0.1.4" + resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" + integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/runtime@^7.8.4": + version "7.14.0" + resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" + integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== + dependencies: + regenerator-runtime "^0.13.4" + +"@babel/template@^7.12.13": + version "7.12.13" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" + integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/parser" "^7.12.13" + "@babel/types" "^7.12.13" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": + version "7.14.2" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" + integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== + dependencies: + "@babel/code-frame" "^7.12.13" + "@babel/generator" "^7.14.2" + "@babel/helper-function-name" "^7.14.2" + "@babel/helper-split-export-declaration" "^7.12.13" + "@babel/parser" "^7.14.2" + "@babel/types" "^7.14.2" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.4.4": + version "7.14.4" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" + integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== + dependencies: + "@babel/helper-validator-identifier" "^7.14.0" + to-fast-properties "^2.0.0" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.7" + resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" + integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rollup/plugin-babel@^5.3.0": + version "5.3.0" + resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" + integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-json@^4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" + integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== + dependencies: + "@rollup/pluginutils" "^3.0.8" + +"@rollup/plugin-multi-entry@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@rollup/plugin-multi-entry/-/plugin-multi-entry-4.0.0.tgz#8e105f16ec1bb26639eb3302c8db5665f44b9939" + integrity sha512-1Sw86rwFxrNS7ECY3iSZ7T940xKnruNGpmQDgSDVTp+VTa1g5cPXNzBgp+IoOer41CiVeGFLwYwvicVoJLHEDQ== + dependencies: + "@rollup/plugin-virtual" "^2.0.3" + matched "^5.0.0" + +"@rollup/plugin-replace@^2.4.2": + version "2.4.2" + resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" + integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== + dependencies: + "@rollup/pluginutils" "^3.1.0" + magic-string "^0.25.7" + +"@rollup/plugin-virtual@^2.0.3": + version "2.0.3" + resolved "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz#0afc88d75c1e1378ab290b8e9898d4edb5be0d74" + integrity sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw== + +"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@types/estree@*": + version "0.0.48" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" + integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/glob@^7.1.1": + version "7.1.3" + resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" + integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" + integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + +"@types/node@*": + version "15.12.2" + resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" + integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +anymatch@~3.1.1: + version "3.1.2" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +array-find-index@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-polyfill-corejs2@^0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" + integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== + dependencies: + "@babel/compat-data" "^7.13.11" + "@babel/helper-define-polyfill-provider" "^0.2.2" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" + integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + core-js-compat "^3.9.1" + +babel-plugin-polyfill-regenerator@^0.2.0: + version "0.2.2" + resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" + integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.2.2" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.1, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.16.6: + version "4.16.6" + resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" + integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== + dependencies: + caniuse-lite "^1.0.30001219" + colorette "^1.2.2" + electron-to-chromium "^1.3.723" + escalade "^3.1.1" + node-releases "^1.1.71" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" + integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== + +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +caniuse-lite@^1.0.30001219: + version "1.0.30001236" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" + integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^3.5.0: + version "3.5.1" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commenting@1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz#fae14345c6437b8554f30bc6aa6c1e1633033590" + integrity sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +convert-source-map@^1.7.0: + version "1.7.0" + resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +core-js-compat@^3.9.0, core-js-compat@^3.9.1: + version "3.14.0" + resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" + integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== + dependencies: + browserslist "^4.16.6" + semver "7.0.0" + +core-js@^3.1.3: + version "3.14.0" + resolved "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c" + integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA== + +debug@^4.1.0, debug@^4.1.1: + version "4.3.1" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" + integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== + dependencies: + ms "2.1.2" + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +del@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" + integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== + dependencies: + globby "^10.0.1" + graceful-fs "^4.2.2" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.1" + p-map "^3.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +electron-to-chromium@^1.3.723: + version "1.3.750" + resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz#7e5ef6f478316b0bd656af5942fe502610e97eaf" + integrity sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A== + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +estree-walker@^0.6.1: + version "0.6.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" + integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-glob@^3.0.0, fast-glob@^3.0.3: + version "3.2.5" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" + integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.0" + merge2 "^1.3.0" + micromatch "^4.0.2" + picomatch "^2.2.1" + +fastq@^1.6.0: + version "1.11.0" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" + integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2: + version "1.1.1" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + +glob-parent@^5.1.0, glob-parent@~5.1.0: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.7, glob@^7.1.3, glob@^7.1.6: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +graceful-fs@^4.2.2: + version "4.2.6" + resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" + integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +ignore@^5.1.1: + version "5.1.8" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" + integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.2.0: + version "2.4.0" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" + integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== + dependencies: + has "^1.0.3" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.1: + version "3.0.3" + resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-reference@^1.1.2: + version "1.2.1" + resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +jest-worker@^26.2.1: + version "26.6.2" + resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" + integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^7.0.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json5@^2.1.2: + version "2.2.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" + integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== + dependencies: + minimist "^1.2.5" + +livereload-js@^3.3.1: + version "3.3.2" + resolved "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz#c88b009c6e466b15b91faa26fd7c99d620e12651" + integrity sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA== + +livereload@^0.9.1: + version "0.9.3" + resolved "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz#a714816375ed52471408bede8b49b2ee6a0c55b1" + integrity sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw== + dependencies: + chokidar "^3.5.0" + livereload-js "^3.3.1" + opts ">= 1.2.0" + ws "^7.4.3" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= + +lodash@4.17.21, lodash@^4.17.11: + version "4.17.21" + resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +magic-string@0.25.7, magic-string@^0.25.2, magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +matched@^5.0.0: + version "5.0.1" + resolved "https://registry.npmjs.org/matched/-/matched-5.0.1.tgz#620606d9dac6b7f4e955354b82e02ef4e3a62dc3" + integrity sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw== + dependencies: + glob "^7.1.6" + picomatch "^2.2.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.2: + version "4.0.4" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + +mime@>=2.4.6: + version "2.5.2" + resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" + integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +moment@2.29.1: + version "2.29.1" + resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" + integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +node-releases@^1.1.71: + version "1.1.73" + resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" + integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.2" + resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + +once@^1.3.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +opener@1: + version "1.5.2" + resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +"opts@>= 1.2.0": + version "2.0.2" + resolved "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz#a17e189fbbfee171da559edd8a42423bc5993ce1" + integrity sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg== + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +package-name-regex@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.1.tgz#69e5e5412a7d5367d3cb965da6c4e480e5e9ffa4" + integrity sha512-U+K6/cuwHwr/8pUQrpNpKOIFSdS/EluTRSmtn92mug1UiPcff4t9AHs36e2xXJtpEtRfbg+JOj3Y/GLX+mzT6w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.7" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.2" + resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.4: + version "0.13.7" + resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" + integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== + +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== + dependencies: + "@babel/runtime" "^7.8.4" + +regexpu-core@^4.7.1: + version "4.7.1" + resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== + +regjsparser@^0.6.4: + version "0.6.9" + resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" + integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== + dependencies: + jsesc "~0.5.0" + +resolve@^1.11.0, resolve@^1.11.1, resolve@^1.14.2: + version "1.20.0" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== + dependencies: + is-core-module "^2.2.0" + path-parse "^1.0.6" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-babel@^4.4.0: + version "4.4.0" + resolved "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" + integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-commonjs@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" + integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== + dependencies: + estree-walker "^0.6.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + rollup-pluginutils "^2.8.1" + +rollup-plugin-delete@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/rollup-plugin-delete/-/rollup-plugin-delete-2.0.0.tgz#262acf80660d48c3b167fb0baabd0c3ab985c153" + integrity sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA== + dependencies: + del "^5.1.0" + +rollup-plugin-license@^2.4.0: + version "2.5.0" + resolved "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-2.5.0.tgz#9c0ba9b3562564c555b48142c420af80a9909f32" + integrity sha512-HUjGV+i1tRxi/zL4WpeNCLJZfEJBbCcDmwGJCjKBvcLDIK6VNW1JmYKjSJJOqJjNqRIvKt6/BLSQB9RwNDLtQw== + dependencies: + commenting "1.1.0" + glob "7.1.7" + lodash "4.17.21" + magic-string "0.25.7" + mkdirp "1.0.4" + moment "2.29.1" + package-name-regex "2.0.1" + spdx-expression-validate "2.0.0" + spdx-satisfies "5.0.1" + +rollup-plugin-livereload@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.0.tgz#d3928d74e8cf2ae4286c5dd46b770fd3f3b82313" + integrity sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A== + dependencies: + livereload "^0.9.1" + +rollup-plugin-multi-input@^1.3.1: + version "1.3.1" + resolved "https://registry.npmjs.org/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.3.1.tgz#07b903b618c005871fea1bd0c4efae7d1aac4fa1" + integrity sha512-bPsxHR6dUney7zsCAAlfkq7lbuy5xph2CvUstSv88oqhtRiLWXwVjiA1Gb4HVjC6I9sJI2eZeQlozXa+GXJKDA== + dependencies: + core-js "^3.1.3" + fast-glob "^3.0.0" + lodash "^4.17.11" + +rollup-plugin-node-resolve@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" + integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== + dependencies: + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.11.1" + rollup-pluginutils "^2.8.1" + +rollup-plugin-serve@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-1.1.0.tgz#0654a57021a21b903340c69940f7463706e8288d" + integrity sha512-pYkSsuA0/psKqhhictkJw1c2klya5b+LlCvipWqI9OE1aG2M97mRumZCbBlry5CMEOzYBBgSDgd1694sNbmyIw== + dependencies: + mime ">=2.4.6" + opener "1" + +rollup-plugin-terser@^7.0.2: + version "7.0.2" + resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" + integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== + dependencies: + "@babel/code-frame" "^7.10.4" + jest-worker "^26.2.1" + serialize-javascript "^4.0.0" + terser "^5.0.0" + +rollup-pluginutils@^2.8.1: + version "2.8.2" + resolved "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" + integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== + dependencies: + estree-walker "^0.6.1" + +rollup@^2.50.5: + version "2.51.1" + resolved "https://registry.npmjs.org/rollup/-/rollup-2.51.1.tgz#87bcd4095fe79b14c9bec0edc7ffa44e4827f793" + integrity sha512-8xfDbAtBleXotb6qKEHWuo/jkn94a9dVqGc7Rwl3sqspCVlnCfbRek7ldhCARSi7h32H0xR4QThm1t9zHN+3uw== + optionalDependencies: + fsevents "~2.3.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.1.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver@7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + +semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +serialize-javascript@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" + integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== + dependencies: + randombytes "^2.1.0" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +source-map-support@~0.5.19: + version "0.5.19" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.7.2: + version "0.7.3" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz#2c55f117362078d7409e6d7b08ce70a857cd3ed7" + integrity sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A== + dependencies: + array-find-index "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-ranges "^2.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-expression-validate@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz#25c9408e1c63fad94fff5517bb7101ffcd23350b" + integrity sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg== + dependencies: + spdx-expression-parse "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.9" + resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" + integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== + +spdx-ranges@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz#87573927ba51e92b3f4550ab60bfc83dd07bac20" + integrity sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA== + +spdx-satisfies@5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz#9feeb2524686c08e5f7933c16248d4fdf07ed6a6" + integrity sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw== + dependencies: + spdx-compare "^1.0.0" + spdx-expression-parse "^3.0.0" + spdx-ranges "^2.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.0.0: + version "7.2.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +terser@^5.0.0: + version "5.7.0" + resolved "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" + integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== + dependencies: + commander "^2.20.0" + source-map "~0.7.2" + source-map-support "~0.5.19" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +ws@^7.4.3: + version "7.4.6" + resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== From b809aa224f8dc07c31fc227cd106772f06ea61f2 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 9 Jun 2021 23:03:59 +0800 Subject: [PATCH 03/65] =?UTF-8?q?=E5=A4=A7=E9=83=A8=E5=88=86=20Random=20?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E7=9A=84=20esm=20=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/mock.js | 591 +++++++++++------------- index.html | 16 + src/mock/random/address.js | 23 +- src/mock/random/basic.js | 37 +- src/mock/random/color.js | 117 +++-- src/mock/random/color_convert.js | 321 ++++++------- src/mock/random/color_dict.js | 74 +-- src/mock/random/date/_patternLetters.js | 2 +- src/mock/random/helper.js | 144 +++--- src/mock/random/index.js | 25 +- src/mock/random/misc.js | 132 ++---- src/mock/random/misc/guid.js | 34 ++ src/mock/random/misc/id.js | 26 ++ src/mock/random/name.js | 118 ++--- src/mock/random/name.json | 233 ++++++++++ 15 files changed, 989 insertions(+), 904 deletions(-) create mode 100644 index.html create mode 100644 src/mock/random/misc/guid.js create mode 100644 src/mock/random/misc/id.js create mode 100644 src/mock/random/name.json diff --git a/dist/mock.js b/dist/mock.js index ad4eb4f0..451ed9b2 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -193,9 +193,10 @@ var Mock = (function () { upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", number: "0123456789", symbol: "!@#$%^&*()[]", - alpha: undefined.lower + undefined.upper, - default: undefined.lower + undefined.upper + undefined.number + undefined.symbol, }; + pools.alpha = pools.lower + pools.upper; + pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + const character = function (pool = "default") { if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { pool = pools[pool.toLowerCase()]; @@ -290,7 +291,7 @@ var Mock = (function () { range: range$1, }; - var _patternLetters = patternLetters = { + var _patternLetters = { yyyy: "getFullYear", yy: function (date) { return ("" + date.getFullYear()).slice(2); @@ -1155,7 +1156,6 @@ var Mock = (function () { */ var Util = require("../util"); - var helper = { // 把字符串的第一个字母转换为大写。 capitalize: function (word) { @@ -1200,16 +1200,7 @@ var Mock = (function () { }) */ shuffle: function shuffle(arr, min, max) { - arr = arr || []; - var old = arr.slice(0), - result = [], - index = 0, - length = old.length; - for (var i = 0; i < length; i++) { - index = this.natural(0, old.length - 1); - result.push(old[index]); - old.splice(index, 1); - } + let result = shuffle(arr); switch (arguments.length) { case 0: case 1: @@ -5840,47 +5831,47 @@ var Mock = (function () { /* jshint -W041 */ var parser$1 = { - parse: function(name) { - name = name == undefined ? '' : (name + ''); - - var parameters = (name || '').match(constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 - var count = range ? !range[2] ? parseInt(range[1], 10) : Random.integer(min, max) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? !decimal[2] && parseInt(decimal[1], 10) || Random.integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters: parameters, - // 1 min, 2 max - range: range, - min: min, - max: max, - // min-max - count: count, - // 是否有 decimal - decimal: decimal, - dmin: dmin, - dmax: dmax, - // dmin-dimax - dcount: dcount - }; + parse: function (name) { + name = name == undefined ? "" : name + ""; + + var parameters = (name || "").match(constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : Random.integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || Random.integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters: parameters, + // 1 min, 2 max + range: range, + min: min, + max: max, + // min-max + count: count, + // 是否有 decimal + decimal: decimal, + dmin: dmin, + dmax: dmax, + // dmin-dimax + dcount: dcount, + }; - for (var r in result) { - if (result[r] != undefined) return result - } + for (var r in result) { + if (result[r] != undefined) return result; + } - return {} - } + return {}; + }, }; // https://github.com/nuysoft/regexp @@ -6502,11 +6493,11 @@ var Mock = (function () { - /* + /* */ var Handler$1 = { - extend: util.extend + extend: util.extend, }; // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart @@ -6555,90 +6546,77 @@ var Mock = (function () { var NUMBER = ascii(48, 57); var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) var PRINTABLE = ascii(32, 126); - var SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; + var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; var CHARACTER_CLASSES = { - '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) - '\\W': OTHER.replace('_', ''), - '\\s': SPACE, - '\\S': function() { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { var result = PRINTABLE; for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ''); + result = result.replace(SPACE[i], ""); } - return result - }(), - '\\d': NUMBER, - '\\D': LOWER + UPPER + OTHER + return result; + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, }; function ascii(from, to) { - var result = ''; + var result = ""; for (var i = from; i <= to; i++) { result += String.fromCharCode(i); } - return result + return result; } // var ast = RegExpParser.parse(regexp.source) - Handler$1.gen = function(node, result, cache) { + Handler$1.gen = function (node, result, cache) { cache = cache || { - guid: 1 + guid: 1, }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : - Handler$1.token(node, result, cache) + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); }; Handler$1.extend({ /* jshint unused:false */ - token: function(node, result, cache) { + token: function (node, result, cache) { switch (node.type) { - case 'start': - case 'end': - return '' - case 'any-character': - return Random.character() - case 'backspace': - return '' - case 'word-boundary': // TODO - return '' - case 'non-word-boundary': // TODO - break - case 'digit': - return Random.pick( - NUMBER.split('') - ) - case 'non-digit': - return Random.pick( - (LOWER + UPPER + OTHER).split('') - ) - case 'form-feed': - break - case 'line-feed': - return node.body || node.text - case 'carriage-return': - break - case 'white-space': - return Random.pick( - SPACE.split('') - ) - case 'non-white-space': - return Random.pick( - (LOWER + UPPER + NUMBER).split('') - ) - case 'tab': - break - case 'vertical-tab': - break - case 'word': // \w [a-zA-Z0-9] - return Random.pick( - (LOWER + UPPER + NUMBER).split('') - ) - case 'non-word': // \W [^a-zA-Z0-9] - return Random.pick( - OTHER.replace('_', '').split('') - ) + case "start": + case "end": + return ""; + case "any-character": + return Random.character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return Random.pick(NUMBER.split("")); + case "non-digit": + return Random.pick((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return Random.pick(SPACE.split("")); + case "non-white-space": + return Random.pick((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return Random.pick((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return Random.pick(OTHER.replace("_", "").split("")); } - return node.body || node.text + return node.body || node.text; }, /* { @@ -6653,13 +6631,9 @@ var Mock = (function () { } } */ - alternate: function(node, result, cache) { + alternate: function (node, result, cache) { // node.left/right {} - return this.gen( - Random.boolean() ? node.left : node.right, - result, - cache - ) + return this.gen(Random.boolean() ? node.left : node.right, result, cache); }, /* { @@ -6669,35 +6643,35 @@ var Mock = (function () { body: [] } */ - match: function(node, result, cache) { - result = ''; - // node.body [] + match: function (node, result, cache) { + result = ""; + // node.body [] for (var i = 0; i < node.body.length; i++) { result += this.gen(node.body[i], result, cache); } - return result + return result; }, // () - 'capture-group': function(node, result, cache) { + "capture-group": function (node, result, cache) { // node.body {} result = this.gen(node.body, result, cache); cache[cache.guid++] = result; - return result + return result; }, // (?:...) - 'non-capture-group': function(node, result, cache) { + "non-capture-group": function (node, result, cache) { // node.body {} - return this.gen(node.body, result, cache) + return this.gen(node.body, result, cache); }, // (?=p) - 'positive-lookahead': function(node, result, cache) { + "positive-lookahead": function (node, result, cache) { // node.body - return this.gen(node.body, result, cache) + return this.gen(node.body, result, cache); }, // (?!p) - 'negative-lookahead': function(node, result, cache) { + "negative-lookahead": function (node, result, cache) { // node.body - return '' + return ""; }, /* { @@ -6721,15 +6695,15 @@ var Mock = (function () { } } */ - quantified: function(node, result, cache) { - result = ''; - // node.quantifier {} + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} var count = this.quantifier(node.quantifier); // node.body {} for (var i = 0; i < count; i++) { result += this.gen(node.body, result, cache); } - return result + return result; }, /* quantifier: { @@ -6741,97 +6715,91 @@ var Mock = (function () { greedy: true } */ - quantifier: function(node, result, cache) { + quantifier: function (node, result, cache) { var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : - min + Random.integer(3, 7); - return Random.integer(min, max) + var max = isFinite(node.max) ? node.max : min + Random.integer(3, 7); + return Random.integer(min, max); }, /* */ - charset: function(node, result, cache) { + charset: function (node, result, cache) { // node.invert - if (node.invert) return this['invert-charset'](node, result, cache) + if (node.invert) return this["invert-charset"](node, result, cache); // node.body [] var literal = Random.pick(node.body); - return this.gen(literal, result, cache) + return this.gen(literal, result, cache); }, - 'invert-charset': function(node, result, cache) { + "invert-charset": function (node, result, cache) { var pool = PRINTABLE; for (var i = 0, item; i < node.body.length; i++) { item = node.body[i]; switch (item.type) { - case 'literal': - pool = pool.replace(item.body, ''); - break - case 'range': + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": var min = this.gen(item.start, result, cache).charCodeAt(); var max = this.gen(item.end, result, cache).charCodeAt(); for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ''); + pool = pool.replace(String.fromCharCode(ii), ""); } - /* falls through */ + /* falls through */ default: var characters = CHARACTER_CLASSES[item.text]; if (characters) { for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ''); + pool = pool.replace(characters[iii], ""); } } } } - return Random.pick(pool.split('')) + return Random.pick(pool.split("")); }, - range: function(node, result, cache) { + range: function (node, result, cache) { // node.start, node.end var min = this.gen(node.start, result, cache).charCodeAt(); var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode( - Random.integer(min, max) - ) + return String.fromCharCode(Random.integer(min, max)); }, - literal: function(node, result, cache) { - return node.escaped ? node.body : node.text + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; }, // Unicode \u - unicode: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 16) - ) + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); }, // 十六进制 \xFF - hex: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 16) - ) + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); }, // 八进制 \0 - octal: function(node, result, cache) { - return String.fromCharCode( - parseInt(node.code, 8) - ) + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); }, // 反向引用 - 'back-reference': function(node, result, cache) { - return cache[node.code] || '' + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; }, /* http://en.wikipedia.org/wiki/C0_and_C1_control_codes */ - CONTROL_CHARACTER_MAP: function() { - var CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); - var CONTROL_CHARACTER_UNICODE = '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split(' '); + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); var map = {}; for (var i = 0; i < CONTROL_CHARACTER.length; i++) { map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; } - return map - }(), - 'control-character': function(node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code] - } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, }); var handler$1 = Handler$1; @@ -6883,7 +6851,7 @@ var Mock = (function () { var Handler = { - extend: util.extend + extend: util.extend, }; /* @@ -6898,25 +6866,25 @@ var Mock = (function () { path, templatePath root, templateRoot */ - Handler.gen = function(template, name, context) { + Handler.gen = function (template, name, context) { /* jshint -W041 */ - name = name == undefined ? '' : (name + ''); + name = name == undefined ? "" : name + ""; context = context || {}; context = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [constant.GUID], - templatePath: context.templatePath || [constant.GUID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template - }; - // console.log('path:', context.path.join('.'), template) + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [constant.GUID], + templatePath: context.templatePath || [constant.GUID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) var rule = parser$1.parse(name); var type = util.type(template); @@ -6931,30 +6899,31 @@ var Mock = (function () { // 属性名 + 生成规则 name: name, // 属性名 - parsedName: name ? name.replace(constant.RE_KEY, '$1') : name, + parsedName: name ? name.replace(constant.RE_KEY, "$1") : name, // 解析后的生成规则 rule: rule, // 相关上下文 - context: context + context: context, }); if (!context.root) context.root = data; - return data + return data; } - return template + return template; }; Handler.extend({ - array: function(options) { + array: function (options) { var result = [], - i, ii; + i, + ii; // 'name|1': [] // 'name|count': [] // 'name|min-max': [] - if (options.template.length === 0) return result + if (options.template.length === 0) return result; // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] if (!options.rule.parameters) { @@ -6968,7 +6937,7 @@ var Mock = (function () { currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template + templateRoot: options.context.templateRoot || options.template, }) ); options.context.path.pop(); @@ -6987,7 +6956,7 @@ var Mock = (function () { currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template + templateRoot: options.context.templateRoot || options.template, }) ); options.context.path.pop(); @@ -7005,16 +6974,13 @@ var Mock = (function () { currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template - })[ - options.template.__order_index % options.template.length - ]; + templateRoot: options.context.templateRoot || options.template, + })[options.template.__order_index % options.template.length]; options.template.__order_index += +options.rule.parameters[2]; options.context.path.pop(); options.context.templatePath.pop(); - } else { // 'data|1-10': [{}] for (i = 0; i < options.rule.count; i++) { @@ -7029,7 +6995,7 @@ var Mock = (function () { currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template + templateRoot: options.context.templateRoot || options.template, }) ); options.context.path.pop(); @@ -7039,11 +7005,16 @@ var Mock = (function () { } } } - return result + return result; }, - object: function(options) { + object: function (options) { var result = {}, - keys, fnKeys, key, parsedKey, inc, i; + keys, + fnKeys, + key, + parsedKey, + inc, + i; // 'obj|min-max': {} /* jshint -W041 */ @@ -7053,7 +7024,7 @@ var Mock = (function () { keys = keys.slice(0, options.rule.count); for (i = 0; i < keys.length; i++) { key = keys[i]; - parsedKey = key.replace(constant.RE_KEY, '$1'); + parsedKey = key.replace(constant.RE_KEY, "$1"); options.context.path.push(parsedKey); options.context.templatePath.push(key); result[parsedKey] = Handler.gen(options.template[key], key, { @@ -7062,18 +7033,17 @@ var Mock = (function () { currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template + templateRoot: options.context.templateRoot || options.template, }); options.context.path.pop(); options.context.templatePath.pop(); } - } else { // 'obj': {} keys = []; fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 for (key in options.template) { - (typeof options.template[key] === 'function' ? fnKeys : keys).push(key); + (typeof options.template[key] === "function" ? fnKeys : keys).push(key); } keys = keys.concat(fnKeys); @@ -7091,7 +7061,7 @@ var Mock = (function () { for (i = 0; i < keys.length; i++) { key = keys[i]; - parsedKey = key.replace(constant.RE_KEY, '$1'); + parsedKey = key.replace(constant.RE_KEY, "$1"); options.context.path.push(parsedKey); options.context.templatePath.push(key); result[parsedKey] = Handler.gen(options.template[key], key, { @@ -7100,55 +7070,58 @@ var Mock = (function () { currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template + templateRoot: options.context.templateRoot || options.template, }); options.context.path.pop(); options.context.templatePath.pop(); - // 'id|+1': 1 + // 'id|+1': 1 inc = key.match(constant.RE_KEY); - if (inc && inc[2] && util.type(options.template[key]) === 'number') { + if (inc && inc[2] && util.type(options.template[key]) === "number") { options.template[key] += parseInt(inc[2], 10); } } } - return result + return result; }, - number: function(options) { + number: function (options) { var result, parts; - if (options.rule.decimal) { // float - options.template += ''; - parts = options.template.split('.'); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, + if (options.rule.decimal) { + // float + options.template += ""; + parts = options.template.split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, parts[0] = options.rule.range ? options.rule.count : parts[0]; - parts[1] = (parts[1] || '').slice(0, options.rule.dcount); + parts[1] = (parts[1] || "").slice(0, options.rule.dcount); while (parts[1].length < options.rule.dcount) { - parts[1] += ( + parts[1] += // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - (parts[1].length < options.rule.dcount - 1) ? Random.character('number') : Random.character('123456789') - ); + parts[1].length < options.rule.dcount - 1 ? Random.character("number") : Random.character("123456789"); } - result = parseFloat(parts.join('.'), 10); - } else { // integer + result = parseFloat(parts.join("."), 10); + } else { + // integer // 'grade1|1-100': 1, result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; } - return result + return result; }, - boolean: function(options) { + boolean: function (options) { var result; // 'prop|multiple': false, 当前值是相反值的概率倍数 // 'prop|probability-probability': false, 当前值与相反值的概率 result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template; - return result + return result; }, - string: function(options) { - var result = '', - i, placeholders, ph, phed; + string: function (options) { + var result = "", + i, + placeholders, + ph, + phed; if (options.template.length) { - // 'foo': '★', /* jshint -W041 */ if (options.rule.count == undefined) { @@ -7167,32 +7140,32 @@ var Mock = (function () { // 遇到转义斜杠,不需要解析占位符 if (/^\\/.test(ph)) { placeholders.splice(i--, 1); - continue + continue; } phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { // + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // result = phed; - break + break; } result = result.replace(ph, phed); } - } else { // 'ASCII|1-10': '', // 'ASCII': '', result = options.rule.range ? Random.string(options.rule.count) : options.template; } - return result + return result; }, - 'function': function(options) { + function: function (options) { // ( context, options ) - return options.template.call(options.context.currentContext, options) + return options.template.call(options.context.currentContext, options); }, - 'regexp': function(options) { - var source = ''; + regexp: function (options) { + var source = ""; // 'name': /regexp/, /* jshint -W041 */ @@ -7205,30 +7178,26 @@ var Mock = (function () { source += options.template.source; } - return regexp.Handler.gen( - regexp.Parser.parse( - source - ) - ) - } + return regexp.Handler.gen(regexp.Parser.parse(source)); + }, }); Handler.extend({ - _all: function() { + _all: function () { var re = {}; for (var key in Random) re[key.toLowerCase()] = key; - return re + return re; }, // 处理占位符,转换为最终值 - placeholder: function(placeholder, obj, templateContext, options) { + placeholder: function (placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params - constant.RE_PLACEHOLDER.exec(''); + constant.RE_PLACEHOLDER.exec(""); var parts = constant.RE_PLACEHOLDER.exec(placeholder), key = parts && parts[1], lkey = key && key.toLowerCase(), okey = this._all()[lkey], - params = parts && parts[2] || ''; + params = (parts && parts[2]) || ""; var pathParts = this.splitPathToArray(key); // 解析占位符的参数 @@ -7240,7 +7209,7 @@ var Mock = (function () { 应该属于 Window Firefox 30.0 的 BUG */ /* jshint -W061 */ - params = eval('(function(){ return [].splice.call(arguments, 0 ) })(' + params + ')'); + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); } catch (error) { // 2. 如果失败,只能解析为字符串 // console.error(error) @@ -7250,38 +7219,36 @@ var Mock = (function () { } // 占位符优先引用数据模板中的属性 - if (obj && (key in obj)) return obj[key] + if (obj && key in obj) return obj[key]; // @index @key // if (Constant.RE_INDEX.test(key)) return +options.name // if (Constant.RE_KEY.test(key)) return options.name // 绝对路径 or 相对路径 - if ( - key.charAt(0) === '/' || - pathParts.length > 1 - ) return this.getValueByKeyPath(key, options) + if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); // 递归引用数据模板中的属性 - if (templateContext && - (typeof templateContext === 'object') && - (key in templateContext) && - (placeholder !== templateContext[key]) // fix #15 避免自己依赖自己 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 ) { // 先计算被引用的属性值 templateContext[key] = Handler.gen(templateContext[key], key, { currentContext: obj, - templateCurrentContext: templateContext + templateCurrentContext: templateContext, }); - return templateContext[key] + return templateContext[key]; } // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; // 递归解析参数中的占位符 for (var i = 0; i < params.length; i++) { - constant.RE_PLACEHOLDER.exec(''); + constant.RE_PLACEHOLDER.exec(""); if (constant.RE_PLACEHOLDER.test(params[i])) { params[i] = Handler.placeholder(params[i], obj, templateContext, options); } @@ -7289,37 +7256,32 @@ var Mock = (function () { var handle = Random[key] || Random[lkey] || Random[okey]; switch (util.type(handle)) { - case 'array': + case "array": // 自动从数组中取一个,例如 @areas - return Random.pick(handle) - case 'function': + return Random.pick(handle); + case "function": // 执行占位符方法(大多数情况) handle.options = options; var re = handle.apply(Random, params); - if (re === undefined) re = ''; // 因为是在字符串中,所以默认为空字符串。 + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 delete handle.options; - return re + return re; } }, - getValueByKeyPath: function(key, options) { + getValueByKeyPath: function (key, options) { var originalKey = key; var keyPathParts = this.splitPathToArray(key); var absolutePathParts = []; // 绝对路径 - if (key.charAt(0) === '/') { - absolutePathParts = [options.context.path[0]].concat( - this.normalizePath(keyPathParts) - ); + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); } else { // 相对路径 if (keyPathParts.length > 1) { absolutePathParts = options.context.path.slice(0); absolutePathParts.pop(); - absolutePathParts = this.normalizePath( - absolutePathParts.concat(keyPathParts) - ); - + absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); } } @@ -7332,47 +7294,48 @@ var Mock = (function () { templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; } // 引用的值已经计算好 - if (currentContext && (key in currentContext)) return currentContext[key] - + if (currentContext && key in currentContext) return currentContext[key]; + // 尚未计算,递归引用数据模板中的属性 - if (templateCurrentContext && - (typeof templateCurrentContext === 'object') && - (key in templateCurrentContext) && - (originalKey !== templateCurrentContext[key]) // fix #15 避免自己依赖自己 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 ) { // 先计算被引用的属性值 templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { currentContext: currentContext, - templateCurrentContext: templateCurrentContext + templateCurrentContext: templateCurrentContext, }); - return templateCurrentContext[key] + return templateCurrentContext[key]; } - } catch(err) { } + } catch (err) {} - return '@' + keyPathParts.join('/') + return "@" + keyPathParts.join("/"); }, // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function(pathParts) { + normalizePath: function (pathParts) { var newPathParts = []; for (var i = 0; i < pathParts.length; i++) { switch (pathParts[i]) { - case '..': + case "..": newPathParts.pop(); - break - case '.': - break + break; + case ".": + break; default: newPathParts.push(pathParts[i]); } } - return newPathParts + return newPathParts; }, - splitPathToArray: function(path) { + splitPathToArray: function (path) { var parts = path.split(/\/+/); if (!parts[parts.length - 1]) parts = parts.slice(0, -1); if (!parts[0]) parts = parts.slice(1); return parts; - } + }, }); var handler = Handler; diff --git a/index.html b/index.html new file mode 100644 index 00000000..3a3bcbbf --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + + + Document + + + + + + + + \ No newline at end of file diff --git a/src/mock/random/address.js b/src/mock/random/address.js index eb2c2f19..225fd9b4 100644 --- a/src/mock/random/address.js +++ b/src/mock/random/address.js @@ -3,37 +3,36 @@ */ import DICT from "./address_dict"; var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - +import { pick } from "./helper.js"; +import { natural } from "./basic/number.js"; export default { // 随机生成一个大区。 region: function () { - return this.pick(REGION); + return pick(REGION); }, // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 province: function () { - return this.pick(DICT).name; + return pick(DICT).name; }, // 随机生成一个(中国)市。 city: function (prefix) { - var province = this.pick(DICT); - var city = this.pick(province.children); + var province = pick(DICT); + var city = pick(province.children); return prefix ? [province.name, city.name].join(" ") : city.name; }, // 随机生成一个(中国)县。 county: function (prefix) { - var province = this.pick(DICT); - var city = this.pick(province.children); - var county = this.pick(city.children) || { + var province = pick(DICT); + var city = pick(province.children); + var county = pick(city.children) || { name: "-", }; - return prefix - ? [province.name, city.name, county.name].join(" ") - : county.name; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; }, // 随机生成一个邮政编码(六位数字)。 zip: function (len) { var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9); + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); return zip; }, diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js index 64958143..70688465 100644 --- a/src/mock/random/basic.js +++ b/src/mock/random/basic.js @@ -1,29 +1,14 @@ /* ## Basics */ -import { integer, natural } from "./basic/number.js"; -import { boolean } from "./basic/boolean.js"; -import { character } from "./basic/character.js"; -import { string } from "./basic/string.js"; -import { range } from "./basic/range.js"; -import { float } from "./basic/float.js"; -export default { - // 返回一个随机的布尔值。 - boolean, - bool: boolean, - integer, - int: integer, - // 返回一个随机的自然数(大于等于 0 的整数)。 - natural, - - // 返回一个随机的浮点数。 - float, - // 返回一个随机字符。 - character, - char: character, - // 返回一个随机字符串。 - string, - str: string, - // 返回一个整型数组。 - range, -}; +export { integer, natural } from "./basic/number.js"; +export { boolean } from "./basic/boolean.js"; +export { character } from "./basic/character.js"; +export { string } from "./basic/string.js"; +export { range } from "./basic/range.js"; +export { float } from "./basic/float.js"; +const bool = boolean; +const int = integer; +const char = character; +const str = string; +export { bool, int, char, str }; diff --git a/src/mock/random/color.js b/src/mock/random/color.js index a2630488..9bb97087 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -72,66 +72,57 @@ return color.toUpperCase() */ -var Convert = require('./color_convert') -var DICT = require('./color_dict') - -module.exports = { - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 - color: function(name) { - if (name || DICT[name]) return DICT[name].nicer - return this.hex() - }, - // #DAC0DE - hex: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - var hex = Convert.rgb2hex(rgb[0], rgb[1], rgb[2]) - return hex - }, - // rgb(128,255,255) - rgb: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - return 'rgb(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ')' - }, - // rgba(128,255,255,0.3) - rgba: function() { - var hsv = this._goldenRatioColor() - var rgb = Convert.hsv2rgb(hsv) - return 'rgba(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ', ' + - Math.random().toFixed(2) + ')' - }, - // hsl(300,80%,90%) - hsl: function() { - var hsv = this._goldenRatioColor() - var hsl = Convert.hsv2hsl(hsv) - return 'hsl(' + - parseInt(hsl[0], 10) + ', ' + - parseInt(hsl[1], 10) + ', ' + - parseInt(hsl[2], 10) + ')' - }, - // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - // https://github.com/devongovett/color-generator/blob/master/index.js - // 随机生成一个有吸引力的颜色。 - _goldenRatioColor: function(saturation, value) { - this._goldenRatio = 0.618033988749895 - this._hue = this._hue || Math.random() - this._hue += this._goldenRatio - this._hue %= 1 - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return [ - this._hue * 360, - saturation * 100, - value * 100 - ] - } -} \ No newline at end of file +import { hsv2hsl, hsv2rgb, rgb2hex } from "./color_convert.js"; +import DICT from "./color_dict.js"; + +// http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ +// https://github.com/devongovett/color-generator/blob/master/index.js +// 随机生成一个有吸引力的颜色。 + +let _hue; +function _goldenRatioColor(saturation, value) { + let _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return [_hue * 360, saturation * 100, value * 100]; +} + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 +function color(name) { + if (name || DICT[name]) return DICT[name].nicer; + return hex(); +} + +// #DAC0DE +function hex() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); + return hex; +} + +// rgb(128,255,255) +function rgb() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; +} +// rgba(128,255,255,0.3) +function rgba() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; +} + +// hsl(300,80%,90%) +function hsl() { + var hsv = _goldenRatioColor(); + var hsl = hsv2hsl(hsv); + return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; +} +export { color, hex, rgb, rgba, hsl, _goldenRatioColor }; diff --git a/src/mock/random/color_convert.js b/src/mock/random/color_convert.js index 333d6ff0..7cda9dbc 100644 --- a/src/mock/random/color_convert.js +++ b/src/mock/random/color_convert.js @@ -5,173 +5,154 @@ 颜色空间RGB与HSV(HSL)的转换 */ // https://github.com/harthur/color-convert/blob/master/conversions.js -module.exports = { - rgb2hsl: function rgb2hsl(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, l; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - l = (min + max) / 2; - - if (max == min) - s = 0; - else if (l <= 0.5) - s = delta / (max + min); - else - s = delta / (2 - max - min); - - return [h, s * 100, l * 100]; - }, - rgb2hsv: function rgb2hsv(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, v; - - if (max === 0) - s = 0; - else - s = (delta / max * 1000) / 10; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - v = ((max / 255) * 1000) / 10; - - return [h, s, v]; - }, - hsl2rgb: function hsl2rgb(hsl) { - var h = hsl[0] / 360, - s = hsl[1] / 100, - l = hsl[2] / 100, - t1, t2, t3, rgb, val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) - t2 = l * (1 + s); - else - t2 = l + s - l * s; - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) t3++; - if (t3 > 1) t3--; - - if (6 * t3 < 1) - val = t1 + (t2 - t1) * 6 * t3; - else if (2 * t3 < 1) - val = t2; - else if (3 * t3 < 2) - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - else - val = t1; - - rgb[i] = val * 255; - } - - return rgb; - }, - hsl2hsv: function hsl2hsv(hsl) { - var h = hsl[0], - s = hsl[1] / 100, - l = hsl[2] / 100, - sv, v; - l *= 2; - s *= (l <= 1) ? l : 2 - l; - v = (l + s) / 2; - sv = (2 * s) / (l + s); - return [h, sv * 100, v * 100]; - }, - hsv2rgb: function hsv2rgb(hsv) { - var h = hsv[0] / 60 - var s = hsv[1] / 100 - var v = hsv[2] / 100 - var hi = Math.floor(h) % 6 - - var f = h - Math.floor(h) - var p = 255 * v * (1 - s) - var q = 255 * v * (1 - (s * f)) - var t = 255 * v * (1 - (s * (1 - f))) - - v = 255 * v - - switch (hi) { - case 0: - return [v, t, p] - case 1: - return [q, v, p] - case 2: - return [p, v, t] - case 3: - return [p, q, v] - case 4: - return [t, p, v] - case 5: - return [v, p, q] - } - }, - hsv2hsl: function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, l; - - l = (2 - s) * v; - sl = s * v; - sl /= (l <= 1) ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; - }, - // http://www.140byt.es/keywords/color - rgb2hex: function( - a, // red, as a number from 0 to 255 - b, // green, as a number from 0 to 255 - c // blue, as a number from 0 to 255 - ) { - return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) - }, - hex2rgb: function( - a // take a "#xxxxxx" hex string, - ) { - a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0; - return [a >> 16, a >> 8 & 255, a & 255] - } -} \ No newline at end of file +function rgb2hsl(rgb) { + var r = rgb[0] / 255, + g = rgb[1] / 255, + b = rgb[2] / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, + s, + l; + + if (max == min) h = 0; + else if (r == max) h = (g - b) / delta; + else if (g == max) h = 2 + (b - r) / delta; + else if (b == max) h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) h += 360; + + l = (min + max) / 2; + + if (max == min) s = 0; + else if (l <= 0.5) s = delta / (max + min); + else s = delta / (2 - max - min); + + return [h, s * 100, l * 100]; +} +function rgb2hsv(rgb) { + var r = rgb[0], + g = rgb[1], + b = rgb[2], + min = Math.min(r, g, b), + max = Math.max(r, g, b), + delta = max - min, + h, + s, + v; + + if (max === 0) s = 0; + else s = ((delta / max) * 1000) / 10; + + if (max == min) h = 0; + else if (r == max) h = (g - b) / delta; + else if (g == max) h = 2 + (b - r) / delta; + else if (b == max) h = 4 + (r - g) / delta; + + h = Math.min(h * 60, 360); + + if (h < 0) h += 360; + + v = ((max / 255) * 1000) / 10; + + return [h, s, v]; +} +function hsl2rgb(hsl) { + var h = hsl[0] / 360, + s = hsl[1] / 100, + l = hsl[2] / 100, + t1, + t2, + t3, + rgb, + val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) t2 = l * (1 + s); + else t2 = l + s - l * s; + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + (1 / 3) * -(i - 1); + if (t3 < 0) t3++; + if (t3 > 1) t3--; + + if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3; + else if (2 * t3 < 1) val = t2; + else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + else val = t1; + + rgb[i] = val * 255; + } + + return rgb; +} +function hsl2hsv(hsl) { + var h = hsl[0], + s = hsl[1] / 100, + l = hsl[2] / 100, + sv, + v; + l *= 2; + s *= l <= 1 ? l : 2 - l; + v = (l + s) / 2; + sv = (2 * s) / (l + s); + return [h, sv * 100, v * 100]; +} +function hsv2rgb(hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - s * f); + var t = 255 * v * (1 - s * (1 - f)); + + v = 255 * v; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +} +function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, + l; + l = (2 - s) * v; + sl = s * v; + sl /= l <= 1 ? l : 2 - l; + l /= 2; + return [h, sl * 100, l * 100]; +} +// http://www.140byt.es/keywords/color +function rgb2hex(a, b, c) { + return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); +} +function hex2rgb(a) { + a = ("0x" + a.slice(1).replace(a.length > 4 ? a : /./g, "$&$&")) | 0; + return [a >> 16, (a >> 8) & 255, a & 255]; +} +export { rgb2hsl, rgb2hsv, hsl2rgb, hsl2hsv, hsv2hsl, hsv2rgb, rgb2hex, hex2rgb }; diff --git a/src/mock/random/color_dict.js b/src/mock/random/color_dict.js index daa2f608..01b5e66d 100644 --- a/src/mock/random/color_dict.js +++ b/src/mock/random/color_dict.js @@ -3,74 +3,74 @@ 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) */ -module.exports = { +export default { // name value nicer navy: { - value: '#000080', - nicer: '#001F3F' + value: "#000080", + nicer: "#001F3F", }, blue: { - value: '#0000ff', - nicer: '#0074D9' + value: "#0000ff", + nicer: "#0074D9", }, aqua: { - value: '#00ffff', - nicer: '#7FDBFF' + value: "#00ffff", + nicer: "#7FDBFF", }, teal: { - value: '#008080', - nicer: '#39CCCC' + value: "#008080", + nicer: "#39CCCC", }, olive: { - value: '#008000', - nicer: '#3D9970' + value: "#008000", + nicer: "#3D9970", }, green: { - value: '#008000', - nicer: '#2ECC40' + value: "#008000", + nicer: "#2ECC40", }, lime: { - value: '#00ff00', - nicer: '#01FF70' + value: "#00ff00", + nicer: "#01FF70", }, yellow: { - value: '#ffff00', - nicer: '#FFDC00' + value: "#ffff00", + nicer: "#FFDC00", }, orange: { - value: '#ffa500', - nicer: '#FF851B' + value: "#ffa500", + nicer: "#FF851B", }, red: { - value: '#ff0000', - nicer: '#FF4136' + value: "#ff0000", + nicer: "#FF4136", }, maroon: { - value: '#800000', - nicer: '#85144B' + value: "#800000", + nicer: "#85144B", }, fuchsia: { - value: '#ff00ff', - nicer: '#F012BE' + value: "#ff00ff", + nicer: "#F012BE", }, purple: { - value: '#800080', - nicer: '#B10DC9' + value: "#800080", + nicer: "#B10DC9", }, silver: { - value: '#c0c0c0', - nicer: '#DDDDDD' + value: "#c0c0c0", + nicer: "#DDDDDD", }, gray: { - value: '#808080', - nicer: '#AAAAAA' + value: "#808080", + nicer: "#AAAAAA", }, black: { - value: '#000000', - nicer: '#111111' + value: "#000000", + nicer: "#111111", }, white: { - value: '#FFFFFF', - nicer: '#FFFFFF' - } -} \ No newline at end of file + value: "#FFFFFF", + nicer: "#FFFFFF", + }, +}; diff --git a/src/mock/random/date/_patternLetters.js b/src/mock/random/date/_patternLetters.js index 0f31aa74..799998bc 100644 --- a/src/mock/random/date/_patternLetters.js +++ b/src/mock/random/date/_patternLetters.js @@ -1,4 +1,4 @@ -export default patternLetters = { +export default { yyyy: "getFullYear", yy: function (date) { return ("" + date.getFullYear()).slice(2); diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index 5bbeb92c..db500466 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -2,76 +2,58 @@ ## Helpers */ -var Util = require("../util"); - -export default { - // 把字符串的第一个字母转换为大写。 - capitalize: function (word) { - return (word + "").charAt(0).toUpperCase() + (word + "").substr(1); - }, - // 把字符串转换为大写。 - upper: function (str) { - return (str + "").toUpperCase(); - }, - // 把字符串转换为小写。 - lower: function (str) { - return (str + "").toLowerCase(); - }, - // 从数组中随机选取一个元素,并返回。 - pick: function pick(arr, min, max) { - // pick( item1, item2 ... ) - if (!Util.isArray(arr)) { - arr = [].slice.call(arguments); - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - - if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]; - - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max); - }, - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. +import { natural } from "./basic/number.js"; +import { shuffle as _shuffle, capitalize } from "lodash-es"; +const upper = function (str) { + return (str + "").toUpperCase(); +}; +const lower = function (str) { + return (str + "").toLowerCase(); +}; +// 从数组中随机选取一个元素,并返回。 +const pick = function (...args) { + let [arr, min, max] = args; + // pick( item1, item2 ... ) + if (!(arr instanceof Array)) { + arr = args; + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + return this.shuffle(arr, min, max); +}; +/* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) - */ - shuffle: function shuffle(arr, min, max) { - arr = arr || []; - var old = arr.slice(0), - result = [], - index = 0, - length = old.length; - for (var i = 0; i < length; i++) { - index = this.natural(0, old.length - 1); - result.push(old[index]); - old.splice(index, 1); - } - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; - /* falls through */ - case 3: - min = parseInt(min, 10); - max = parseInt(max, 10); - return result.slice(0, this.natural(min, max)); - } - }, - /* + 其他的实现思路: + // https://code.google.com/p/jslibs/wiki/JavascriptTips + result = result.sort(function() { + return Math.random() - 0.5 + }) +*/ +const shuffle = function (arr, min, max) { + let result = _shuffle(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; + /* falls through */ + case 3: + min = parseInt(min, 10); + max = parseInt(max, 10); + return result.slice(0, natural(min, max)); + } +}; +/* * Random.order(item, item) * Random.order([item, item ...]) @@ -81,20 +63,20 @@ export default { 不支持单独调用! */ - order: function order(array) { - order.cache = order.cache || {}; +const order = function order(array) { + order.cache = order.cache || {}; - if (arguments.length > 1) array = [].slice.call(arguments, 0); + if (arguments.length > 1) array = [].slice.call(arguments, 0); - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); - var cache = (order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array, - }); + var cache = (order.cache[templatePath] = order.cache[templatePath] || { + index: 0, + array: array, + }); - return cache.array[cache.index++ % cache.array.length]; - }, + return cache.array[cache.index++ % cache.array.length]; }; +export { capitalize, upper, lower, pick, shuffle, order }; diff --git a/src/mock/random/index.js b/src/mock/random/index.js index 9bd03621..b4963132 100644 --- a/src/mock/random/index.js +++ b/src/mock/random/index.js @@ -4,28 +4,17 @@ 工具类,用于生成各种随机数据。 */ -import basic from "./basic"; +import * as basic from "./basic"; +import * as color from "./color"; +import * as name from "./name"; +import * as helper from "./helper"; +import * as mise from "./misc"; import date from "./date"; import image from "./image"; -import color from "./color"; import text from "./text"; -import name from "./name"; import web from "./web"; import address from "./address"; -import helper from "./helper"; -import mise from "./misc"; -const Random = Object.assign( - {}, - basic, - date, - image, - color, - text, - name, - web, - address, - helper, - mise -); + +const Random = Object.assign({}, basic, date, image, color, text, name, web, address, helper, mise); export default Random; export { Random }; diff --git a/src/mock/random/misc.js b/src/mock/random/misc.js index 3763dae2..0b9c512d 100644 --- a/src/mock/random/misc.js +++ b/src/mock/random/misc.js @@ -1,105 +1,37 @@ /* ## Miscellaneous */ -var DICT = require('./address_dict') -module.exports = { - // Dice - d4: function() { - return this.natural(1, 4) - }, - d6: function() { - return this.natural(1, 6) - }, - d8: function() { - return this.natural(1, 8) - }, - d12: function() { - return this.natural(1, 12) - }, - d20: function() { - return this.natural(1, 20) - }, - d100: function() { - return this.natural(1, 100) - }, - /* - 随机生成一个 GUID。 +import { v4 as uuid } from "uuid"; +import id from "./misc/id.js"; +import guid from "./misc/guid.js"; - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - */ - guid: function() { - var pool = "abcdefABCDEF1234567890", - guid = this.string(pool, 8) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 12); - return guid - }, - uuid: function() { - return this.guid() - }, - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - id: function() { - var id, - sum = 0, - rank = [ - "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" - ], - last = [ - "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" - ] - - id = this.pick(DICT).id + - this.date('yyyyMMdd') + - this.string('number', 3) - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id - }, +/* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 +*/ +let key = 0; +const increment = function (step) { + return (key += +step || 1); +}; +const inc = increment; - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - increment: function() { - var key = 0 - return function(step) { - return key += (+step || 1) // step? - } - }(), - inc: function(step) { - return this.increment(step) - } -} \ No newline at end of file +// Dice +function d4() { + return this.natural(1, 4); +} +function d6() { + return this.natural(1, 6); +} +function d8() { + return this.natural(1, 8); +} +function d12() { + return this.natural(1, 12); +} +function d20() { + return this.natural(1, 20); +} +function d100() { + return this.natural(1, 100); +} +export { d4, d6, d8, d12, d20, d100, guid, uuid, id, increment, inc }; diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js new file mode 100644 index 00000000..bffd422f --- /dev/null +++ b/src/mock/random/misc/guid.js @@ -0,0 +1,34 @@ +/* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ +export default function guid() { + return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); +} diff --git a/src/mock/random/misc/id.js b/src/mock/random/misc/id.js new file mode 100644 index 00000000..8afb77a6 --- /dev/null +++ b/src/mock/random/misc/id.js @@ -0,0 +1,26 @@ +import DICT from "./address_dict.js"; +import { pick } from "./helper.js"; +import { date } from "./date.js"; +import { string } from "./basic/string.js"; +/* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) +*/ +export default function id() { + var id, + sum = 0, + rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], + last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + + id = pick(DICT).id + date("yyyyMMdd") + string("number", 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; +} diff --git a/src/mock/random/name.js b/src/mock/random/name.js index e4989f45..87d53ecb 100644 --- a/src/mock/random/name.js +++ b/src/mock/random/name.js @@ -3,85 +3,39 @@ [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) */ -module.exports = { - // 随机生成一个常见的英文名。 - first: function() { - var names = [ - // male - "James", "John", "Robert", "Michael", "William", - "David", "Richard", "Charles", "Joseph", "Thomas", - "Christopher", "Daniel", "Paul", "Mark", "Donald", - "George", "Kenneth", "Steven", "Edward", "Brian", - "Ronald", "Anthony", "Kevin", "Jason", "Matthew", - "Gary", "Timothy", "Jose", "Larry", "Jeffrey", - "Frank", "Scott", "Eric" - ].concat([ - // female - "Mary", "Patricia", "Linda", "Barbara", "Elizabeth", - "Jennifer", "Maria", "Susan", "Margaret", "Dorothy", - "Lisa", "Nancy", "Karen", "Betty", "Helen", - "Sandra", "Donna", "Carol", "Ruth", "Sharon", - "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", - "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", - "Brenda", "Amy", "Anna" - ]) - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓。 - last: function() { - var names = [ - "Smith", "Johnson", "Williams", "Brown", "Jones", - "Miller", "Davis", "Garcia", "Rodriguez", "Wilson", - "Martinez", "Anderson", "Taylor", "Thomas", "Hernandez", - "Moore", "Martin", "Jackson", "Thompson", "White", - "Lopez", "Lee", "Gonzalez", "Harris", "Clark", - "Lewis", "Robinson", "Walker", "Perez", "Hall", - "Young", "Allen" - ] - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓名。 - name: function(middle) { - return this.first() + ' ' + - (middle ? this.first() + ' ' : '') + - this.last() - }, - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - cfirst: function() { - var names = ( - '王 李 张 刘 陈 杨 赵 黄 周 吴 ' + - '徐 孙 胡 朱 高 林 何 郭 马 罗 ' + - '梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' + - '程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' + - '苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' + - '余 潘 杜 戴 夏 锺 汪 田 任 姜 ' + - '范 方 石 姚 谭 廖 邹 熊 金 陆 ' + - '郝 孔 白 崔 康 毛 邱 秦 江 史 ' + - '顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' + - '尹 黎 易 常 武 乔 贺 赖 龚 文' - ).split(' ') - return this.pick(names) - }, - /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - clast: function() { - var names = ( - '伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' + - '洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' + - '平 刚 桂英' - ).split(' ') - return this.pick(names) - }, - // 随机生成一个常见的中文姓名。 - cname: function() { - return this.cfirst() + this.clast() - } -} \ No newline at end of file +import name from "./name.json"; +let { firstName, lastName, cfirstName, clastName } = name; +import { pick } from "./helper.js"; +// 随机生成一个常见的英文名。 +function first() { + var names = firstName.male.concat(); + return pick(names); +} +// 随机生成一个常见的英文姓。 +function last() { + return this.pick(lastName); +} +// 随机生成一个常见的英文姓名。 +function name(middle) { + middle = middle ? ` ${first()} ` : " "; + return `${first()}${middle}${last()}`; +} +/* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) +*/ +function cfirst() { + return pick(cfirstName); +} /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) +*/ +function clast() { + return pick(clastName); +} +// 随机生成一个常见的中文姓名。 +function cname() { + return cfirst() + clast(); +} +export { first, last, name, cfirst, clast, cname }; diff --git a/src/mock/random/name.json b/src/mock/random/name.json new file mode 100644 index 00000000..2527cfda --- /dev/null +++ b/src/mock/random/name.json @@ -0,0 +1,233 @@ +{ + "firstName":{ + "male":[ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + "female":[ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] + },"lastName":[ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" + ],"cfirstName":[ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" + ], + "clastName":[ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" + ] +} \ No newline at end of file From 67495e703cfd97bc24113f462348e38a1085b746 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Thu, 10 Jun 2021 16:31:09 +0800 Subject: [PATCH 04/65] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E4=B8=BA=20esm=20=E5=AF=BC=E5=85=A5=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 9842 +++++++++++++++ dist/mock.js | 17339 +++++++++++++++------------ index.html | 2 +- package.json | 4 +- rollup.config.dev.js | 15 +- src/mock.js | 66 +- src/mock/constant.js | 6 +- src/mock/handler.js | 25 +- src/mock/parser.js | 37 +- src/mock/random/address_ch.json | 2 +- src/mock/random/address_dict.js | 17 +- src/mock/random/basic.js | 17 +- src/mock/random/basic/boolean.js | 2 +- src/mock/random/basic/character.js | 2 +- src/mock/random/basic/number.js | 2 +- src/mock/random/basic/string.js | 2 +- src/mock/random/brandColors.json | 1 + src/mock/random/date.js | 32 +- src/mock/random/image.js | 301 +- src/mock/random/image.json | 7 + src/mock/random/index.js | 18 +- src/mock/random/misc/id.js | 8 +- src/mock/random/name.js | 4 +- src/mock/random/text.js | 118 +- src/mock/random/text/range.js | 8 + src/mock/random/text/text-ch.js | 59 + src/mock/random/text/text_en.js | 28 + src/mock/random/web.js | 74 +- src/mock/random/web/web_dict.js | 15 + src/mock/random/web/web_func.js | 53 + src/mock/regexp/handler.js | 39 +- src/mock/regexp/index.js | 8 +- src/mock/regexp/parser.js | 1305 +- src/mock/schema/index.js | 2 +- src/mock/schema/schema.js | 50 +- src/mock/util.js | 135 +- src/mock/utils/each.js | 16 + src/mock/utils/extend.js | 40 + src/mock/utils/heredoc.js | 33 + src/mock/utils/type.js | 19 + src/mock/valid/index.js | 2 +- src/mock/valid/valid.js | 383 +- src/mock/xhr/index.js | 2 +- src/mock/xhr/xhr.js | 285 +- yarn.lock | 5 + 45 files changed, 20902 insertions(+), 9528 deletions(-) create mode 100644 dist/Mock.min.js create mode 100644 src/mock/random/brandColors.json create mode 100644 src/mock/random/image.json create mode 100644 src/mock/random/text/range.js create mode 100644 src/mock/random/text/text-ch.js create mode 100644 src/mock/random/text/text_en.js create mode 100644 src/mock/random/web/web_dict.js create mode 100644 src/mock/random/web/web_func.js create mode 100644 src/mock/utils/each.js create mode 100644 src/mock/utils/extend.js create mode 100644 src/mock/utils/heredoc.js create mode 100644 src/mock/utils/type.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js new file mode 100644 index 00000000..3bdd0b00 --- /dev/null +++ b/dist/Mock.min.js @@ -0,0 +1,9842 @@ + +(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); +var Mock = (function () { + 'use strict'; + + /* + ## Constant + + 常量集合。 + */ + /* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 + */ + var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ + }; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Built-in value references. */ + var Symbol = root.Symbol; + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$5.toString; + + /** Built-in value references. */ + var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty$3.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$4.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$3; + + return value === proto; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; + } + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + /** Detect free variable `exports`. */ + var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + + /** Built-in value references. */ + var Buffer = moduleExports$1 ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = + typedArrayTags[setTag] = typedArrayTags[stringTag$1] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$1.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsZWJ$1 = '\\u200d'; + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ + var upperFirst = createCaseFirst('toUpperCase'); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize$1(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** `Object#toString` result references. */ + var stringTag = '[object String]'; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); + } + + /** `Object#toString` result references. */ + var regexpTag = '[object RegExp]'; + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /* Node.js helper references. */ + var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeRandom = Math.random; + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + // 使用 lodash 提供的方式 + function type$1(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); + } + + function isObjectOrArray(value) { + return isObject(value) || isArray(value); + } + + function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); + } + + function extend() { + var target = arguments[0] || {}, + i = 1, + length = arguments.length, + options, + name, + src, + copy, + clone; + + if (length === 1) { + target = this; + i = 0; + } + + for (; i < length; i++) { + options = arguments[i]; + if (!options) continue; + + for (name in options) { + src = target[name]; + copy = options[name]; + + if (target === copy) continue; + if (copy === undefined) continue; + + if (isArray(copy) || isObject(copy)) { + if (isArray(copy)) clone = src && isArray(src) ? src : []; + if (isObject(copy)) clone = src && isObject(src) ? src : {}; + + target[name] = extend(clone, copy); + } else { + target[name] = copy; + } + } + } + + return target; + } + + function each(obj, iterator, context) { + // each + var i, key; + if (type(obj) === "number") { + //表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } + } + + /* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 + */ + function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, "") + .replace(/\*\/[^\/]+$/, "") + .replace(/^[\s\xA0]+/, "") + .replace(/[\s\xA0]+$/, ""); // .trim() + } + + /* + ## Utilities + */ + function keys(obj) { + return Object.keys(obj); + } + function values(obj) { + return Object.values(obj); + } + function noop() {} + + var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc + }); + + const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); + }; + const random = function (min, max) { + return Math.random() * (max - min) + min; + }; + + // 返回一个随机的整数。 + const integer = function (min, max) { + min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; + max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 + return Math.round(random(min, max)); + }; + const natural = function (min, max) { + return Math.abs(integer(min, max)); + }; + + const boolean = function (min, max, cur) { + if (cur) { + min = isNumber(min) ? parseInt(min, 10) : 1; + max = isNumber(max) ? parseInt(max, 10) : 1; + return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + } + return Math.random() >= 0.5; + }; + + const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", + }; + pools.alpha = pools.lower + pools.upper; + pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + + const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); + }; + + const string = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map((i) => character(pool)).join(""); + }; + + const range$1 = function (...args) { + // range( stop ) + let start, stop, step; + if (arguments.length <= 1) { + [stop] = args; + return [...Array(stop).keys()]; + } + + // range( start, stop ,step=1) + // range(10,20,3) = [10,13,16,19] + [start, stop, step = 1] = args; + let arrayLength = Math.ceil((stop - start) / step); + return [...Array(arrayLength).keys()].map((index) => { + return start + index * step; + }); + }; + + const float = function (min, max, dmin, dmax) { + dmin = isNumber(dmin) ? dmin : 0; + dmax = isNumber(dmax) ? dmax : 17; + dmin = Math.max(Math.min(dmin, 17), 0); + dmax = Math.max(Math.min(dmax, 17), 0); + let dcount = natural(dmin, dmax); + var ret = + integer(min, max) + + "." + + [...Array(dcount).keys()] + .map((i) => { + // 最后一位不能为 0,所以必须进行处理 + return i < dcount - 1 ? this.character("number") : this.character("123456789"); + }) + .join(""); + return parseFloat(ret, 10); + }; + + /* + ## Color Convert + + http://blog.csdn.net/idfaya/article/details/6770414 + 颜色空间RGB与HSV(HSL)的转换 + */ + function hsv2rgb(hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - s * f); + var t = 255 * v * (1 - s * (1 - f)); + + v = 255 * v; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } + } + function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, + l; + l = (2 - s) * v; + sl = s * v; + sl /= l <= 1 ? l : 2 - l; + l /= 2; + return [h, sl * 100, l * 100]; + } + // http://www.140byt.es/keywords/color + function rgb2hex(a, b, c) { + return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); + } + + /* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) + */ + var DICT$1 = { + // name value nicer + navy: { + value: "#000080", + nicer: "#001F3F", + }, + blue: { + value: "#0000ff", + nicer: "#0074D9", + }, + aqua: { + value: "#00ffff", + nicer: "#7FDBFF", + }, + teal: { + value: "#008080", + nicer: "#39CCCC", + }, + olive: { + value: "#008000", + nicer: "#3D9970", + }, + green: { + value: "#008000", + nicer: "#2ECC40", + }, + lime: { + value: "#00ff00", + nicer: "#01FF70", + }, + yellow: { + value: "#ffff00", + nicer: "#FFDC00", + }, + orange: { + value: "#ffa500", + nicer: "#FF851B", + }, + red: { + value: "#ff0000", + nicer: "#FF4136", + }, + maroon: { + value: "#800000", + nicer: "#85144B", + }, + fuchsia: { + value: "#ff00ff", + nicer: "#F012BE", + }, + purple: { + value: "#800080", + nicer: "#B10DC9", + }, + silver: { + value: "#c0c0c0", + nicer: "#DDDDDD", + }, + gray: { + value: "#808080", + nicer: "#AAAAAA", + }, + black: { + value: "#000000", + nicer: "#111111", + }, + white: { + value: "#FFFFFF", + nicer: "#FFFFFF", + }, + }; + + /* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() + */ + + // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + // https://github.com/devongovett/color-generator/blob/master/index.js + // 随机生成一个有吸引力的颜色。 + + let _hue; + function _goldenRatioColor(saturation, value) { + let _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return [_hue * 360, saturation * 100, value * 100]; + } + + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 + function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return hex(); + } + + // #DAC0DE + function hex() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); + return hex; + } + + // rgb(128,255,255) + function rgb() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; + } + // rgba(128,255,255,0.3) + function rgba() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; + } + + // hsl(300,80%,90%) + function hsl() { + var hsv = _goldenRatioColor(); + var hsl = hsv2hsl(hsv); + return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; + } + + var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] + }; + var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" + ]; + var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" + ]; + var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" + ]; + var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 + }; + + /* + ## Helpers + */ + const upper = function (str) { + return (str + "").toUpperCase(); + }; + const lower = function (str) { + return (str + "").toLowerCase(); + }; + // 从数组中随机选取一个元素,并返回。 + const pick$1 = function (...args) { + let [arr, min, max] = args; + // pick( item1, item2 ... ) + if (!(arr instanceof Array)) { + arr = args; + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + return this.shuffle(arr, min, max); + }; + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + + 其他的实现思路: + // https://code.google.com/p/jslibs/wiki/JavascriptTips + result = result.sort(function() { + return Math.random() - 0.5 + }) + */ + const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; + /* falls through */ + case 3: + min = parseInt(min, 10); + max = parseInt(max, 10); + return result.slice(0, natural(min, max)); + } + }; + /* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ + const order = function order(array) { + order.cache = order.cache || {}; + + if (arguments.length > 1) array = [].slice.call(arguments, 0); + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (order.cache[templatePath] = order.cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; + }; + + /* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) + */ + let { firstName, lastName, cfirstName, clastName } = Name; + // 随机生成一个常见的英文名。 + function first() { + var names = firstName.male.concat(); + return pick$1(names); + } + // 随机生成一个常见的英文姓。 + function last() { + return this.pick(lastName); + } + // 随机生成一个常见的英文姓名。 + function name(middle) { + middle = middle ? ` ${first()} ` : " "; + return `${first()}${middle}${last()}`; + } + /* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + */ + function cfirst() { + return pick$1(cfirstName); + } /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + */ + function clast() { + return pick$1(clastName); + } + // 随机生成一个常见的中文姓名。 + function cname() { + return cfirst() + clast(); + } + + // Unique ID creation requires a high quality random # generator. In the browser we therefore + // require the crypto API and do not support built-in fallback to lower quality random number + // generators (like Math.random()). + var getRandomValues; + var rnds8 = new Uint8Array(16); + function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); + } + + var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; + + function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); + } + + /** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + + var byteToHex = []; + + for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); + } + + function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; + } + + function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); + } + + var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" + }; + + /* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 + */ + + // id pid/parentId name children + + // 将扁平数组转化为树状 + function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; + /* jshint -W041 */ + // undefined 时是一个顶级元素 + if (pid === undefined) { + result.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + if (!parent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; + } + const ids = Object.keys(DICT); + // 转化数组内对象的表现形式 + const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = id.slice(2, 6) === "0000" ? undefined : id.slice(4, 6) == "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!(pid in ids)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + "0000"; + } + return { + id, + pid, + name: value, + }; + }); + + const DICT_FIXED = createTree(fixed); + + var _patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", + }; + + /* + ## Date + */ + const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + // 返回一个随机的日期字符串。 + function date(format = "yyyy-MM-dd") { + return this._formatDate(this._randomDate(), format); + } + var date$1 = { + // 日期占位符集合。 + _patternLetters, + // 日期占位符正则。 + _rformat: reRule, + // 格式化日期。 + _formatDate: function (date, format) { + return format.replace(this._rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); + }, + // 生成一个随机的 Date 对象。 + _randomDate: function (min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + }, + + // 返回一个随机的时间字符串。 + time: function (format = "HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + // 返回一个随机的日期和时间字符串。 + datetime: function (format = "yyyy-MM-dd HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + date, + + // 返回当前的日期和时间字符串。 + now: function (unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } + + return this._formatDate(date, format); + }, + // KonghaYao 新增函数:生成固定时间段的时间戳 + timestamp: function (min, max) { + if (min instanceof Date && max instanceof Date) return this._randomDate(min, max); + return this._randomDate(); + }, + }; + + /* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) + */ + function id() { + var id, + sum = 0, + rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], + last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + + id = pick$1(DICT_FIXED).id + date("yyyyMMdd") + string("number", 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; + } + + /* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ + function guid() { + return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); + } + + /* + ## Miscellaneous + */ + + /* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 + */ + let key = 0; + const increment = function (step) { + return (key += +step || 1); + }; + const inc = increment; + + // Dice + function d4() { + return this.natural(1, 4); + } + function d6() { + return this.natural(1, 6); + } + function d8() { + return this.natural(1, 8); + } + function d12() { + return this.natural(1, 12); + } + function d20() { + return this.natural(1, 20); + } + function d100() { + return this.natural(1, 100); + } + + function range(defaultMin, defaultMax, min, max) { + return min === undefined + ? natural(defaultMin, defaultMax) // () + : max === undefined + ? min // ( len ) + : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) + } + + // 随机生成一个句子,第一个单词的首字母大写。 + function sentence(min, max) { + var len = range(12, 18, min, max); + let string = [...Array(len)].map(() => word()).join(""); + return capitalize(string) + "."; + } + + // 随机生成一个单词。 + function word(min, max) { + var len = range(3, 10, min, max); + return [...Array(len)].map(() => character("lower")).join(""); + } + + // 随机生成一段文本。 + function paragraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map((i) => sentence()); + } + + // 随机生成一句标题,其中每个单词的首字母大写。 + function title(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => capitalize(word())).join(""); + } + + function cparagraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => csentence()).join(""); + } + + // 随机生成一个中文句子。 + function csentence(min, max) { + var len = range(12, 18, min, max); + return [...Array(len)].map(() => cword()).join("") + "。"; + } + // 随机生成一句中文标题。 + function ctitle(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => cword()).join(""); + } + // 随机生成一个或多个汉字。 + function cword(...args) { + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + var DICT_KANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; + + var len = 1, + pool = DICT_KANZI, + min, + max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === "string") { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(pool, min); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len)].map(() => pool.charAt(natural(0, pool.length - 1))).join(""); + } + + // 协议簇 + const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); + // 域名后缀 + ( + "com net org edu gov int mil cn " + + // 国内域名 + "com.cn net.cn gov.cn org.cn " + + // 中文国内域名 + "中国 中国互联.公司 中国互联.网络 " + + // 新国际域名 + "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + // 世界各国域名后缀 + "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" + ).split(" "); + + /* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers + */ + function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; + } + + // 随机生成一个 URL 协议。 + function protocol() { + return pick$1(protocols); + } + // 随机生成一个域名。 + function domain(Tld) { + return `${word()}.${Tld || tld()}`; + } + /* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) + */ + function tld() { + // Top Level Domain + return pick$1(tlds); + } + + // 随机生成一个邮件地址。 + function email(domain) { + return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; + } + // 随机生成一个 IP 地址。 + function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join("."); + } + + var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" + ]; + var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" + ]; + var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" + ]; + var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 + }; + + var Addvocate = "#ff6138"; + var Adobe = "#ff0000"; + var Aim = "#fcd20b"; + var Amazon = "#e47911"; + var Android = "#a4c639"; + var AOL = "#0060a3"; + var Atlassian = "#003366"; + var Behance = "#053eff"; + var bitly = "#ee6123"; + var Blogger = "#fc4f08"; + var Boeing = "#0039a6"; + var Carbonmade = "#613854"; + var Cheddar = "#ff7243"; + var Delicious = "#205cc0"; + var Dell = "#3287c1"; + var Designmoo = "#e54a4f"; + var Deviantart = "#4e6252"; + var Devour = "#fd0001"; + var DEWALT = "#febd17"; + var Dribbble = "#ea4c89"; + var Dropbox = "#3d9ae8"; + var Drupal = "#0c76ab"; + var Dunked = "#2a323a"; + var eBay = "#89c507"; + var Ember = "#f05e1b"; + var Engadget = "#00bdf6"; + var Envato = "#528036"; + var Etsy = "#eb6d20"; + var Evernote = "#5ba525"; + var Facebook = "#3b5998"; + var Firefox = "#e66000"; + var Forrst = "#5b9a68"; + var Foursquare = "#25a0ca"; + var Garmin = "#007cc3"; + var GetGlue = "#2d75a2"; + var Gimmebar = "#f70078"; + var GitHub = "#171515"; + var Grooveshark = "#f77f00"; + var Groupon = "#82b548"; + var HelloWallet = "#0085ca"; + var HootSuite = "#003366"; + var Houzz = "#73ba37"; + var HTML5 = "#ec6231"; + var IKEA = "#ffcc33"; + var IMDb = "#f3ce13"; + var Instagram = "#3f729b"; + var Intel = "#0071c5"; + var Intuit = "#365ebf"; + var Kickstarter = "#76cc1e"; + var kippt = "#e03500"; + var Kodery = "#00af81"; + var LastFM = "#c3000d"; + var LinkedIn = "#0e76a8"; + var Livestream = "#cf0005"; + var Lumo = "#576396"; + var Mixpanel = "#a086d3"; + var Meetup = "#e51937"; + var Nokia = "#183693"; + var NVIDIA = "#76b900"; + var Opera = "#cc0f16"; + var Path = "#e41f11"; + var Pinboard = "#0000e6"; + var Pinterest = "#c8232c"; + var PlayStation = "#665cbe"; + var Pocket = "#ee4056"; + var Prezi = "#318bff"; + var Pusha = "#0f71b4"; + var Quora = "#a82400"; + var Rdio = "#008fd5"; + var Readability = "#9c0000"; + var Resource = "#7eb400"; + var Rockpack = "#0ba6ab"; + var Roon = "#62b0d9"; + var RSS = "#ee802f"; + var Salesforce = "#1798c1"; + var Samsung = "#0c4da2"; + var Shopify = "#96bf48"; + var Skype = "#00aff0"; + var Snagajob = "#f47a20"; + var Softonic = "#008ace"; + var SoundCloud = "#ff7700"; + var Spotify = "#81b71a"; + var Sprint = "#fee100"; + var Squarespace = "#121212"; + var StackOverflow = "#ef8236"; + var Staples = "#cc0000"; + var Stripe = "#008cdd"; + var StudyBlue = "#00afe1"; + var StumbleUpon = "#f74425"; + var Technorati = "#40a800"; + var Treehouse = "#5cb868"; + var Trulia = "#5eab1f"; + var Tumblr = "#34526f"; + var Twitter = "#00acee"; + var TYPO3 = "#ff8700"; + var Ubuntu = "#dd4814"; + var Ustream = "#3388ff"; + var Verizon = "#ef1d1d"; + var Vimeo = "#86c9ef"; + var Vine = "#00a478"; + var Virb = "#06afd8"; + var Wooga = "#5b009c"; + var Wunderlist = "#2b88d9"; + var XBOX = "#9bc848"; + var XING = "#126567"; + var Yandex = "#ffcc00"; + var Yelp = "#c41200"; + var YouTube = "#c4302b"; + var Zalongo = "#5498dc"; + var Zendesk = "#78a300"; + var Zerply = "#9dcc7a"; + var Zootool = "#5e8b1d"; + var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool + }; + + /* global document */ + let { _adSize, _screenSize, _videoSize } = size; + const _brandNames = Object.keys(_brandColors); + + /* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 + */ + function image(...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = foreground.replace(/^#/, ""); + background = background.replace(/^#/, ""); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${backgroound ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; + } + + var image$1 = { + ...size, + image, + img: image, + + _brandColors, + _brandNames, + /* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, + */ + dataImage: function (size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); + }, + }; + + /* + ## Address + */ + var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; + var address = { + // 随机生成一个大区。 + region: function () { + return pick$1(REGION); + }, + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + province: function () { + return pick$1(DICT_FIXED).name; + }, + // 随机生成一个(中国)市。 + city: function (prefix) { + var province = pick$1(DICT_FIXED); + var city = pick$1(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; + }, + // 随机生成一个(中国)县。 + county: function (prefix) { + var province = pick$1(DICT_FIXED); + var city = pick$1(province.children); + var county = pick$1(city.children) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; + }, + // 随机生成一个邮政编码(六位数字)。 + zip: function (len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; + }, + + // address: function() {}, + // phone: function() {}, + // areacode: function() {}, + // street: function() {}, + // street_suffixes: function() {}, + // street_suffix: function() {}, + // states: function() {}, + // state: function() {}, + }; + + /* + ## Mock.Random + + 工具类,用于生成各种随机数据。 + */ + + var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + date: date$1, + image: image$1, + address: address, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + boolean: boolean, + bool: boolean, + character: character, + char: character, + string: string, + str: string, + range: range$1, + float: float, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize$1, + upper: upper, + lower: lower, + pick: pick$1, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url + }); + + /* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + + /* jshint -W041 */ + var Parser = { + parse: function (name) { + name = name == undefined ? "" : name + ""; + + var parameters = (name || "").match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; + }, + }; + + // https://github.com/nuysoft/regexp + + function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); + } + + function Alternate(n, l) { + Token.call(this, "alternate"), (this.left = n), (this.right = l); + } + + function Match(n) { + Token.call(this, "match"), (this.body = n.filter(Boolean)); + } + + function Group(n, l) { + Token.call(this, n), (this.body = l); + } + + function CaptureGroup(n) { + Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); + } + + function Quantified(n, l) { + Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); + } + + function Quantifier(n, l) { + Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); + } + + function CharSet(n, l) { + Token.call(this, "charset"), (this.invert = n), (this.body = l); + } + + function CharacterRange(n, l) { + Token.call(this, "range"), (this.start = n), (this.end = l); + } + + function Literal(n) { + Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); + } + + function Unicode(n) { + Token.call(this, "unicode"), (this.code = n.toUpperCase()); + } + + function Hex(n) { + Token.call(this, "hex"), (this.code = n.toUpperCase()); + } + + function Octal(n) { + Token.call(this, "octal"), (this.code = n.toUpperCase()); + } + + function BackReference(n) { + Token.call(this, "back-reference"), (this.code = n.toUpperCase()); + } + + function ControlCharacter(n) { + Token.call(this, "control-character"), (this.code = n.toUpperCase()); + } + + var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, "\\\\") + .replace(/"/g, '\\"') + .replace(/\x08/g, "\\b") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\f/g, "\\f") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return "\\x0" + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return "\\x" + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return "\\u0" + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; + } + (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + "\n" === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : "\r" === e || "\u2028" === e || "\u2029" === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null === t && (t = al), + null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function s() { + var l, u; + return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function h() { + var n, l, u; + return ( + (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), + null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function g() { + var l, u; + return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function b() { + var l, u; + return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) + for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) + if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function M() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function D() { + var l, u; + return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function H() { + var l, u; + return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function O() { + var l, u; + return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function W() { + var l, u; + return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function z() { + var l, u; + return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function I() { + var l, u; + return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function J() { + var l, u; + return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function K() { + var l, u; + return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function N() { + var l, u; + return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function P() { + var l, u; + return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function V() { + var l, u; + return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function X() { + var l, u; + return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { + if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) + for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = "", + fl = "|", + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = "^", + vl = '"^"', + wl = function () { + return new Token("start"); + }, + Al = "$", + Cl = '"$"', + gl = function () { + return new Token("end"); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = "Quantifier", + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = "{", + yl = '"{"', + ml = ",", + Rl = '","', + Fl = "}", + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ",}", + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = "+", + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = "*", + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = "?", + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = "[0-9]", + Jl = function (n) { + return +n.join(""); + }, + Kl = "(", + Nl = '"("', + Pl = ")", + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = "?:", + _l = '"?:"', + nu = function (n) { + return new Group("non-capture-group", n); + }, + lu = "?=", + uu = '"?="', + tu = function (n) { + return new Group("positive-lookahead", n); + }, + ru = "?!", + eu = '"?!"', + ou = function (n) { + return new Group("negative-lookahead", n); + }, + cu = "CharacterSet", + iu = "[", + au = '"["', + fu = "]", + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = "CharacterRange", + pu = "-", + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = "Character", + Cu = /^[^\\\]]/, + gu = "[^\\\\\\]]", + bu = function (n) { + return new Literal(n); + }, + ku = ".", + Tu = '"."', + xu = function () { + return new Token("any-character"); + }, + yu = "Literal", + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = "[^|\\\\\\/.[()?+*$\\^]", + Fu = "\\b", + Qu = '"\\\\b"', + Su = function () { + return new Token("backspace"); + }, + Uu = function () { + return new Token("word-boundary"); + }, + Eu = "\\B", + Gu = '"\\\\B"', + Bu = function () { + return new Token("non-word-boundary"); + }, + ju = "\\d", + $u = '"\\\\d"', + qu = function () { + return new Token("digit"); + }, + Lu = "\\D", + Mu = '"\\\\D"', + Du = function () { + return new Token("non-digit"); + }, + Hu = "\\f", + Ou = '"\\\\f"', + Wu = function () { + return new Token("form-feed"); + }, + zu = "\\n", + Iu = '"\\\\n"', + Ju = function () { + return new Token("line-feed"); + }, + Ku = "\\r", + Nu = '"\\\\r"', + Pu = function () { + return new Token("carriage-return"); + }, + Vu = "\\s", + Xu = '"\\\\s"', + Yu = function () { + return new Token("white-space"); + }, + Zu = "\\S", + _u = '"\\\\S"', + nt = function () { + return new Token("non-white-space"); + }, + lt = "\\t", + ut = '"\\\\t"', + tt = function () { + return new Token("tab"); + }, + rt = "\\v", + et = '"\\\\v"', + ot = function () { + return new Token("vertical-tab"); + }, + ct = "\\w", + it = '"\\\\w"', + at = function () { + return new Token("word"); + }, + ft = "\\W", + st = '"\\\\W"', + ht = function () { + return new Token("non-word"); + }, + dt = "\\c", + pt = '"\\\\c"', + vt = "any character", + wt = function (n) { + return new ControlCharacter(n); + }, + At = "\\", + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = "[1-9]", + kt = function (n) { + return new BackReference(n); + }, + Tt = "\\0", + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = "[0-7]", + Rt = function (n) { + return new Octal(n.join("")); + }, + Ft = "\\x", + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = "[0-9a-fA-F]", + Et = function (n) { + return new Hex(n.join("")); + }, + Gt = "\\u", + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join("")); + }, + $t = function () { + return new Token("null-character"); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + + /* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } + + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ + /* + + */ + var Handler$1 = { + extend: extend, + }; + + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart + /*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] + }*/ + + // ASCII printable code chart + // var LOWER = 'abcdefghijklmnopqrstuvwxyz' + // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + // var NUMBER = '0123456789' + // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' + var LOWER = ascii(97, 122); + var UPPER = ascii(65, 90); + var NUMBER = ascii(48, 57); + var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) + var PRINTABLE = ascii(32, 126); + var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; + var CHARACTER_CLASSES = { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ""); + } + return result; + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, + }; + + // 从 from 到 to 包含两个端点的字符串 + function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); + } + + // var ast = RegExpParser.parse(regexp.source) + Handler$1.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); + }; + + Handler$1.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case "start": + case "end": + return ""; + case "any-character": + return character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return pick$1(NUMBER.split("")); + case "non-digit": + return pick$1((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return pick$1(SPACE.split("")); + case "non-white-space": + return pick$1((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return pick$1((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return pick$1(OTHER.replace("_", "").split("")); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ""; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + "capture-group": function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + "non-capture-group": function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + "positive-lookahead": function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + "negative-lookahead": function (node, result, cache) { + // node.body + return ""; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this["invert-charset"](node, result, cache); + + // node.body [] + var literal = pick$1(node.body); + return this.gen(literal, result, cache); + }, + "invert-charset": function (node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ""); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ""); + } + } + } + } + return pick$1(pool.split("")); + }, + range: function (node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, + }); + + var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$1 + }); + + /* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + + */ + + var Handler = { + extend: extend, + }; + + /* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot + */ + Handler.gen = function (template, name, context) { + /* jshint -W041 */ + name = name == undefined ? "" : name + ""; + + context = context || {}; + context = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [Constant.GUID], + templatePath: context.templatePath || [Constant.GUID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + var rule = Parser.parse(name); + var type = type$1(template); + var data; + + if (Handler[type]) { + data = Handler[type]({ + // 属性值类型 + type: type, + // 属性值模板 + template: template, + // 属性名 + 生成规则 + name: name, + // 属性名 + parsedName: name ? name.replace(Constant.RE_KEY, "$1") : name, + + // 解析后的生成规则 + rule: rule, + // 相关上下文 + context: context, + }); + + if (!context.root) context.root = data; + return data; + } + + return template; + }; + + Handler.extend({ + array: function (options) { + var result = [], + i, + ii; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (options.template.length === 0) return result; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!options.rule.parameters) { + for (i = 0; i < options.template.length; i++) { + options.context.path.push(i); + options.context.templatePath.push(i); + result.push( + Handler.gen(options.template[i], i, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (options.rule.min === 1 && options.rule.max === undefined) { + // fix #17 + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = pick$1( + Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } else { + // 'data|+1': [{}, {}] + if (options.rule.parameters[2]) { + options.template.__order_index = options.template.__order_index || 0; + + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + })[options.template.__order_index % options.template.length]; + + options.template.__order_index += +options.rule.parameters[2]; + + options.context.path.pop(); + options.context.templatePath.pop(); + } else { + // 'data|1-10': [{}] + for (i = 0; i < options.rule.count; i++) { + // 'data|1-10': [{}, {}] + for (ii = 0; ii < options.template.length; ii++) { + options.context.path.push(result.length); + options.context.templatePath.push(ii); + result.push( + Handler.gen(options.template[ii], result.length, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } + } + } + } + return result; + }, + object: function (options) { + var result = {}, + keys$1, + fnKeys, + key, + parsedKey, + inc, + i; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (options.rule.min != undefined) { + keys$1 = keys(options.template); + keys$1 = shuffle(keys$1); + keys$1 = keys$1.slice(0, options.rule.count); + for (i = 0; i < keys$1.length; i++) { + key = keys$1[i]; + parsedKey = key.replace(Constant.RE_KEY, "$1"); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'obj': {} + keys$1 = []; + fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 + for (key in options.template) { + (typeof options.template[key] === "function" ? fnKeys : keys$1).push(key); + } + keys$1 = keys$1.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Util.keys(options.template) + keys.sort(function(a, b) { + var afn = typeof options.template[a] === 'function' + var bfn = typeof options.template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + for (i = 0; i < keys$1.length; i++) { + key = keys$1[i]; + parsedKey = key.replace(Constant.RE_KEY, "$1"); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }); + options.context.path.pop(); + options.context.templatePath.pop(); + // 'id|+1': 1 + inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type$1(options.template[key]) === "number") { + options.template[key] += parseInt(inc[2], 10); + } + } + } + return result; + }, + number: function (options) { + var result, parts; + if (options.rule.decimal) { + // float + options.template += ""; + parts = options.template.split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parts[0] = options.rule.range ? options.rule.count : parts[0]; + parts[1] = (parts[1] || "").slice(0, options.rule.dcount); + while (parts[1].length < options.rule.dcount) { + parts[1] += + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + parts[1].length < options.rule.dcount - 1 ? character("number") : character("123456789"); + } + result = parseFloat(parts.join("."), 10); + } else { + // integer + // 'grade1|1-100': 1, + result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; + } + return result; + }, + boolean: function (options) { + var result; + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + result = options.rule.parameters ? boolean(options.rule.min, options.rule.max, options.template) : options.template; + return result; + }, + string: function (options) { + var result = "", + i, + placeholders, + ph, + phed; + if (options.template.length) { + // 'foo': '★', + /* jshint -W041 */ + if (options.rule.count == undefined) { + result += options.template; + } + + // 'star|1-5': '★', + for (i = 0; i < options.rule.count; i++) { + result += options.template; + } + // 'email|1-10': '@EMAIL, ', + placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + for (i = 0; i < placeholders.length; i++) { + ph = placeholders[i]; + + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(i--, 1); + continue; + } + + phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // + result = phed; + break; + } + result = result.replace(ph, phed); + } + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = options.rule.range ? string(options.rule.count) : options.template; + } + return result; + }, + function: function (options) { + // ( context, options ) + return options.template.call(options.context.currentContext, options); + }, + regexp: function (options) { + var source = ""; + + // 'name': /regexp/, + /* jshint -W041 */ + if (options.rule.count == undefined) { + source += options.template.source; // regexp.source + } + + // 'name|1-5': /regexp/, + for (var i = 0; i < options.rule.count; i++) { + source += options.template.source; + } + + return Handler$1.gen(parser.parse(source)); + }, + }); + + Handler.extend({ + _all: function () { + var re = {}; + for (var key in Random) re[key.toLowerCase()] = key; + return re; + }, + // 处理占位符,转换为最终值 + placeholder: function (placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var parts = Constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = this._all()[lkey], + params = (parts && parts[2]) || ""; + var pathParts = this.splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = Handler.gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = Handler.placeholder(params[i], obj, templateContext, options); + } + } + + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (type$1(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick$1(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + }, + getValueByKeyPath: function (key, options) { + var originalKey = key; + var keyPathParts = this.splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); + }, + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + normalizePath: function (pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; + }, + splitPathToArray: function (path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + }, + }); + + /* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + + function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + var result = { + name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + template, + type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: Parser.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? "ROOT" : result.name); + + switch (result.type) { + case "array": + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case "object": + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } + + return result; + } + + /* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) + */ + + function valid(template, data) { + var schema = toJSONSchema(template); + var result = Diff.diff(schema, data); + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; + } + + /* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 + */ + var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + var result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + var length = result.length; + + Assert.equal("name", schema.path, name + "", schema.name + "", result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + var length = result.length; + + switch (schema.type) { + case "string": + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case "array": + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case "function": + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } + + Assert.equal("type", schema.path, type$1(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var templateType = schema.type; + if (templateType === "object" || templateType === "array" || templateType === "function") return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case "regexp": + Assert.match("value", schema.path, data, schema.template, result); + return result.length === length; + case "string": + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal("value", schema.path, data, schema.template, result); + return result.length === length; + } + + // 有生成规则 + var actualRepeatCount; + switch (templateType) { + case "number": + var parts = (data + "").split("."); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case "boolean": + break; + + case "string": + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case "regexp": + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + break; + } + + return result.length === length; + }, + properties: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); + } + } + + if (result.length !== length) return false; + + for (var i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + var property; + each(schema.properties, function (item /*, index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i] + ) + ); + } + + return result.length === length; + }, + items: function (schema, data, name, result) { + var length = result.length; + + if (!schema.items) return; + + var rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("items length", schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + "items", + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + ); + Assert.lessThanOrEqualTo( + "items", + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + + if (result.length !== length) return false; + + for (var i = 0; i < data.length; i++) { + result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); + } + + return result.length === length; + }, + }; + + /* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + + */ + var Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace("{utype}", item.type.toUpperCase()) + .replace("{ltype}", item.type.toLowerCase()) + .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) + .replace("{action}", item.action) + .replace("{expected}", item.expected) + .replace("{actual}", item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case "type": + // 正则模板 === 字符串最终值 + if (expected === "regexp" && actual === "string") return true; + break; + } + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "matches", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is not equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + }; + + valid.Diff = Diff; + valid.Assert = Assert; + + /* global window, document, location, Event, setTimeout */ + + // 备份原生 XMLHttpRequest + window._XMLHttpRequest = window.XMLHttpRequest; + window._ActiveXObject = window.ActiveXObject; + + /* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 + */ + try { + new window.Event("custom"); + } catch (exception) { + window.Event = function (type, bubbles, cancelable, detail) { + var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event; + }; + } + + var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4, + }; + + var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); + var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); + var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); + + // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 + var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + }; + + /* + MockXMLHttpRequest + */ + + function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {}, + }; + } + + MockXMLHttpRequest._settings = { + timeout: "10-100", + /* + timeout: 50, + timeout: '10-100', + */ + }; + + MockXMLHttpRequest.setup = function (settings) { + extend(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings; + }; + + extend(MockXMLHttpRequest, XHR_STATES); + extend(MockXMLHttpRequest.prototype, XHR_STATES); + + // 标记当前对象为 MockXMLHttpRequest + MockXMLHttpRequest.prototype.mock = true; + + // 是否拦截 Ajax 请求 + MockXMLHttpRequest.prototype.match = false; + + // 初始化 Request 相关的属性和方法 + extend(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function (method, url, async, username, password) { + var that = this; + + extend(this.custom, { + method: method, + url: url, + async: typeof async === "boolean" ? async : true, + username: username, + password: password, + options: { + url: url, + type: method, + }, + }); + + this.custom.timeout = (function (timeout) { + if (typeof timeout === "number") return timeout; + if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); + if (typeof timeout === "string" && ~timeout.indexOf("-")) { + var tmp = timeout.split("-"); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min; + } + })(MockXMLHttpRequest._settings.timeout); + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options); + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/)); + } + + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; + + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle); + } + + // xhr.open() + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); + + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; + } catch (e) {} + } + + return; + } + + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function (name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value); + return; + } + + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += "," + value; + else requestHeaders[name] = value; + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this; + this.custom.options.body = data; + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data); + return; + } + + // 拦截 XHR + + // X-Requested-With header + this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); + + // loadstart The fetch initiates. + this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); + + if (this.custom.async) setTimeout(done, this.custom.timeout); + // 异步 + else done(); // 同步 + + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; + + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); + + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.dispatchEvent(new Event("load" /*, false, false, that*/)); + that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); + } + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort(); + return; + } + + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event("abort", false, false, this)); + this.dispatchEvent(new Event("error", false, false, this)); + }, + }); + + // 初始化 Response 相关的属性和方法 + extend(MockXMLHttpRequest.prototype, { + responseURL: "", + status: MockXMLHttpRequest.UNSENT, + statusText: "", + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function (name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name); + } + + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()]; + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function () { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders(); + } + + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders; + var headers = ""; + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue; + headers += h + ": " + responseHeaders[h] + "\r\n"; + } + return headers; + }, + overrideMimeType: function (/*mime*/) {}, + responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: "", + responseXML: null, + }); + + // EventTarget + extend(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || []; + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1); + } + } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || []; + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event); + } + + var ontype = "on" + event.type; + if (this[ontype]) this[ontype](event); + }, + }); + + // Inspired by jQuery + function createNativeXMLHttpRequest() { + var isLocal = (function () { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]); + })(); + + return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} + } + + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } + } + + // 查找与请求参数匹配的数据模板:URL,Type + function find(options) { + for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { + var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; + if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { + // console.log('[mock]', options.url, '>', item.rurl) + return item; + } + } + + function match(expected, actual) { + if (type$1(expected) === "string") { + return expected === actual; + } + if (type$1(expected) === "regexp") { + return expected.test(actual); + } + } + } + + // 数据模板 => 响应数据 + function convert(item, options) { + return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); + } + + /* global require, module, window */ + + var XHR; + if (typeof window !== "undefined") XHR = MockXMLHttpRequest; + + /*! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + */ + var Mock = { + Handler, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked: {}, + }; + + Mock.version = "1.0.1-beta3"; + + // 避免循环依赖 + if (XHR) XHR.Mock = Mock; + + /* + * Mock.mock( template ) + * Mock.mock( function() ) + * Mock.mock( rurl, template ) + * Mock.mock( rurl, function(options) ) + * Mock.mock( rurl, rtype, template ) + * Mock.mock( rurl, rtype, function(options) ) + + 根据数据模板生成模拟数据。 + */ + Mock.mock = function (rurl, rtype, template) { + // Mock.mock(template) + if (arguments.length === 1) { + return Handler.gen(rurl); + } + // Mock.mock(rurl, template) + if (arguments.length === 2) { + template = rtype; + rtype = undefined; + } + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + (rtype || "")] = { + rurl: rurl, + rtype: rtype, + template: template, + }; + return Mock; + }; + + return Mock; + +}()); diff --git a/dist/mock.js b/dist/mock.js index 451ed9b2..e1b03307 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -1,5982 +1,7299 @@ -var Mock = (function () { - 'use strict'; - /* - ## Constant - - 常量集合。 - */ - /* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 - */ - var constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ - }; - - /* - ## Utilities - */ - var Util$1 = {}; - - Util$1.extend = function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, name, src, copy, clone; +(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); +/* + ## Constant + + 常量集合。 + */ +/* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 +*/ +var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ +}; + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol = root.Symbol; + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$5.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty$3.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto$4.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$3; + + return value === proto; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; +} + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Built-in value references. */ +var Buffer = moduleExports$1 ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = +typedArrayTags[setTag] = typedArrayTags[stringTag$1] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } - if (length === 1) { - target = this; - i = 0; - } + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); - for (; i < length; i++) { - options = arguments[i]; - if (!options) continue +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$1.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ$1 = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +/** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ +var upperFirst = createCaseFirst('toUpperCase'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize$1(string) { + return upperFirst(toString(string).toLowerCase()); +} + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); +} + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); +} + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; +} + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); +} + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); +} + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); +} + +// 使用 lodash 提供的方式 +function type$1(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); +} + +function isObjectOrArray(value) { + return isObject(value) || isArray(value); +} + +function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); +} + +function extend() { + var target = arguments[0] || {}, + i = 1, + length = arguments.length, + options, + name, + src, + copy, + clone; - for (name in options) { - src = target[name]; - copy = options[name]; + if (length === 1) { + target = this; + i = 0; + } - if (target === copy) continue - if (copy === undefined) continue + for (; i < length; i++) { + options = arguments[i]; + if (!options) continue; - if (Util$1.isArray(copy) || Util$1.isObject(copy)) { - if (Util$1.isArray(copy)) clone = src && Util$1.isArray(src) ? src : []; - if (Util$1.isObject(copy)) clone = src && Util$1.isObject(src) ? src : {}; + for (name in options) { + src = target[name]; + copy = options[name]; - target[name] = Util$1.extend(clone, copy); - } else { - target[name] = copy; - } - } - } + if (target === copy) continue; + if (copy === undefined) continue; - return target - }; + if (isArray(copy) || isObject(copy)) { + if (isArray(copy)) clone = src && isArray(src) ? src : []; + if (isObject(copy)) clone = src && isObject(src) ? src : {}; - Util$1.each = function each(obj, iterator, context) { - var i, key; - if (this.type(obj) === 'number') { - for (i = 0; i < obj; i++) { - iterator(i, i); - } - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break + target[name] = extend(clone, copy); + } else { + target[name] = copy; } } - }; - - Util$1.type = function type(obj) { - return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase() - }; - - Util$1.each('String Object Array RegExp Function'.split(' '), function(value) { - Util$1['is' + value] = function(obj) { - return Util$1.type(obj) === value.toLowerCase() - }; - }); - - Util$1.isObjectOrArray = function(value) { - return Util$1.isObject(value) || Util$1.isArray(value) - }; - - Util$1.isNumeric = function(value) { - return !isNaN(parseFloat(value)) && isFinite(value) - }; + } - Util$1.keys = function(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) keys.push(key); + return target; +} + +function each(obj, iterator, context) { + // each + var i, key; + if (type(obj) === "number") { + //表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; } - return keys; - }; - Util$1.values = function(obj) { - var values = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) values.push(obj[key]); + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; } - return values; - }; - - /* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: + } +} + +/* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 +*/ +function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, "") + .replace(/\*\/[^\/]+$/, "") + .replace(/^[\s\xA0]+/, "") + .replace(/[\s\xA0]+$/, ""); // .trim() +} + +/* + ## Utilities +*/ +function keys(obj) { + return Object.keys(obj); +} +function values(obj) { + return Object.values(obj); +} +function noop() {} + +var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc +}); + +const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); +}; +const random = function (min, max) { + return Math.random() * (max - min) + min; +}; + +// 返回一个随机的整数。 +const integer = function (min, max) { + min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; + max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 + return Math.round(random(min, max)); +}; +const natural = function (min, max) { + return Math.abs(integer(min, max)); +}; + +const boolean = function (min, max, cur) { + if (cur) { + min = isNumber(min) ? parseInt(min, 10) : 1; + max = isNumber(max) ? parseInt(max, 10) : 1; + return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + } + return Math.random() >= 0.5; +}; + +const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", +}; +pools.alpha = pools.lower + pools.upper; +pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + +const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); +}; + +const string = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map((i) => character(pool)).join(""); +}; + +const range$1 = function (...args) { + // range( stop ) + let start, stop, step; + if (arguments.length <= 1) { + [stop] = args; + return [...Array(stop).keys()]; + } - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ + // range( start, stop ,step=1) + // range(10,20,3) = [10,13,16,19] + [start, stop, step = 1] = args; + let arrayLength = Math.ceil((stop - start) / step); + return [...Array(arrayLength).keys()].map((index) => { + return start + index * step; + }); +}; + +const float = function (min, max, dmin, dmax) { + dmin = isNumber(dmin) ? dmin : 0; + dmax = isNumber(dmax) ? dmax : 17; + dmin = Math.max(Math.min(dmin, 17), 0); + dmax = Math.max(Math.min(dmax, 17), 0); + let dcount = natural(dmin, dmax); + var ret = + integer(min, max) + + "." + + [...Array(dcount).keys()] + .map((i) => { + // 最后一位不能为 0,所以必须进行处理 + return i < dcount - 1 ? this.character("number") : this.character("123456789"); }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 - */ - Util$1.heredoc = function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn.toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim() - }; - - Util$1.noop = function() {}; + .join(""); + return parseFloat(ret, 10); +}; + +/* + ## Color Convert + + http://blog.csdn.net/idfaya/article/details/6770414 + 颜色空间RGB与HSV(HSL)的转换 +*/ +function hsv2rgb(hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - s * f); + var t = 255 * v * (1 - s * (1 - f)); + + v = 255 * v; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +} +function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, + l; + l = (2 - s) * v; + sl = s * v; + sl /= l <= 1 ? l : 2 - l; + l /= 2; + return [h, sl * 100, l * 100]; +} +// http://www.140byt.es/keywords/color +function rgb2hex(a, b, c) { + return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); +} + +/* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) +*/ +var DICT$1 = { + // name value nicer + navy: { + value: "#000080", + nicer: "#001F3F", + }, + blue: { + value: "#0000ff", + nicer: "#0074D9", + }, + aqua: { + value: "#00ffff", + nicer: "#7FDBFF", + }, + teal: { + value: "#008080", + nicer: "#39CCCC", + }, + olive: { + value: "#008000", + nicer: "#3D9970", + }, + green: { + value: "#008000", + nicer: "#2ECC40", + }, + lime: { + value: "#00ff00", + nicer: "#01FF70", + }, + yellow: { + value: "#ffff00", + nicer: "#FFDC00", + }, + orange: { + value: "#ffa500", + nicer: "#FF851B", + }, + red: { + value: "#ff0000", + nicer: "#FF4136", + }, + maroon: { + value: "#800000", + nicer: "#85144B", + }, + fuchsia: { + value: "#ff00ff", + nicer: "#F012BE", + }, + purple: { + value: "#800080", + nicer: "#B10DC9", + }, + silver: { + value: "#c0c0c0", + nicer: "#DDDDDD", + }, + gray: { + value: "#808080", + nicer: "#AAAAAA", + }, + black: { + value: "#000000", + nicer: "#111111", + }, + white: { + value: "#FFFFFF", + nicer: "#FFFFFF", + }, +}; + +/* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() +*/ + +// http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ +// https://github.com/devongovett/color-generator/blob/master/index.js +// 随机生成一个有吸引力的颜色。 + +let _hue; +function _goldenRatioColor(saturation, value) { + let _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return [_hue * 360, saturation * 100, value * 100]; +} + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 +function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return hex(); +} + +// #DAC0DE +function hex() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); + return hex; +} + +// rgb(128,255,255) +function rgb() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; +} +// rgba(128,255,255,0.3) +function rgba() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; +} + +// hsl(300,80%,90%) +function hsl() { + var hsv = _goldenRatioColor(); + var hsl = hsv2hsl(hsv); + return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; +} + +var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] +}; +var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" +]; +var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" +]; +var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" +]; +var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 +}; + +/* + ## Helpers +*/ +const upper = function (str) { + return (str + "").toUpperCase(); +}; +const lower = function (str) { + return (str + "").toLowerCase(); +}; +// 从数组中随机选取一个元素,并返回。 +const pick$1 = function (...args) { + let [arr, min, max] = args; + // pick( item1, item2 ... ) + if (!(arr instanceof Array)) { + arr = args; + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + return this.shuffle(arr, min, max); +}; +/* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + + 其他的实现思路: + // https://code.google.com/p/jslibs/wiki/JavascriptTips + result = result.sort(function() { + return Math.random() - 0.5 + }) +*/ +const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; + /* falls through */ + case 3: + min = parseInt(min, 10); + max = parseInt(max, 10); + return result.slice(0, natural(min, max)); + } +}; +/* + * Random.order(item, item) + * Random.order([item, item ...]) - var util = Util$1; + 顺序获取数组中的元素 - const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); - }; - const random = function (min, max) { - return Math.random() * (max - min) + min; - }; + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - // 返回一个随机的整数。 - const integer = function (min, max) { - min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; - max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 - return Math.round(random(min, max)); - }; - const natural = function (min, max) { - return Math.abs(integer(min, max)); - }; + 不支持单独调用! + */ +const order = function order(array) { + order.cache = order.cache || {}; - const boolean = function (min, max, cur) { - if (cur) { - min = isNumber(min) ? parseInt(min, 10) : 1; - max = isNumber(max) ? parseInt(max, 10) : 1; - return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - } - return Math.random() >= 0.5; - }; + if (arguments.length > 1) array = [].slice.call(arguments, 0); - const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", - }; - pools.alpha = pools.lower + pools.upper; - pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); - const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); - }; + var cache = (order.cache[templatePath] = order.cache[templatePath] || { + index: 0, + array: array, + }); - const string = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map((i) => character(pool)).join(""); - }; + return cache.array[cache.index++ % cache.array.length]; +}; + +/* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) +*/ +let { firstName, lastName, cfirstName, clastName } = Name; +// 随机生成一个常见的英文名。 +function first() { + var names = firstName.male.concat(); + return pick$1(names); +} +// 随机生成一个常见的英文姓。 +function last() { + return this.pick(lastName); +} +// 随机生成一个常见的英文姓名。 +function name(middle) { + middle = middle ? ` ${first()} ` : " "; + return `${first()}${middle}${last()}`; +} +/* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) +*/ +function cfirst() { + return pick$1(cfirstName); +} /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) +*/ +function clast() { + return pick$1(clastName); +} +// 随机生成一个常见的中文姓名。 +function cname() { + return cfirst() + clast(); +} + +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +var getRandomValues; +var rnds8 = new Uint8Array(16); +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } - const range$1 = function (...args) { - // range( stop ) - let start, stop, step; - if (arguments.length <= 1) { - [stop] = args; - return [...Array(stop).keys()]; - } + return getRandomValues(rnds8); +} - // range( start, stop ,step=1) - // range(10,20,3) = [10,13,16,19] - [start, stop, step = 1] = args; - let arrayLength = Math.ceil((stop - start) / step); - return [...Array(arrayLength).keys()].map((index) => { - return start + index * step; - }); - }; +var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - const float = function (min, max, dmin, dmax) { - dmin = isNumber(dmin) ? dmin : 0; - dmax = isNumber(dmax) ? dmax : 17; - dmin = Math.max(Math.min(dmin, 17), 0); - dmax = Math.max(Math.min(dmax, 17), 0); - let dcount = natural(dmin, dmax); - var ret = - integer(min, max) + - "." + - [...Array(dcount).keys()] - .map((i) => { - // 最后一位不能为 0,所以必须进行处理 - return i < dcount - 1 ? this.character("number") : this.character("123456789"); - }) - .join(""); - return parseFloat(ret, 10); - }; +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} - /* - ## Basics - */ - var basic = { - // 返回一个随机的布尔值。 - boolean, - bool: boolean, - integer, - int: integer, - // 返回一个随机的自然数(大于等于 0 的整数)。 - natural, - - // 返回一个随机的浮点数。 - float, - // 返回一个随机字符。 - character, - char: character, - // 返回一个随机字符串。 - string, - str: string, - // 返回一个整型数组。 - range: range$1, - }; +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ - var _patternLetters = { - yyyy: "getFullYear", - yy: function (date) { - return ("" + date.getFullYear()).slice(2); - }, - y: "yy", +var byteToHex = []; - MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, +for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} - dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; - }, - d: "getDate", +function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields - HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; - }, - H: "getHours", - hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } - mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; - }, - m: "getMinutes", + return uuid; +} - ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; - }, - s: "getSeconds", +function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; - }, - S: "getMilliseconds", + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; - }, - a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; - }, - T: "getTime", - }; + if (buf) { + offset = offset || 0; - /* - ## Date - */ - const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - - var date = { - // 日期占位符集合。 - _patternLetters, - // 日期占位符正则。 - _rformat: reRule, - // 格式化日期。 - _formatDate: function (date, format) { - return format.replace( - this._rformat, - function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = patternLetters[flag]; - return typeof targetPattern === "function" - ? targetPattern(date) - : targetPattern in patternLetters - ? creatNewSubString($0, targetPattern) - : date[targetPattern](); - } - ); - }, - // 生成一个随机的 Date 对象。 - _randomDate: function (min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - }, - // 返回一个随机的日期字符串。 - date: function (format = "yyyy-MM-dd") { - return this._formatDate(this._randomDate(), format); - }, - // 返回一个随机的时间字符串。 - time: function (format = "HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, - // 返回一个随机的日期和时间字符串。 - datetime: function (format = "yyyy-MM-dd HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } - // 返回当前的日期和时间字符串。 - now: function (unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); + return buf; + } + + return stringify(rnds); +} + +var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" +}; + +/* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 +*/ + +// id pid/parentId name children + +// 将扁平数组转化为树状 +function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; + /* jshint -W041 */ + // undefined 时是一个顶级元素 + if (pid === undefined) { + result.push(item); + return { mapped, result }; } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); + const parent = mapped[pid]; + if (!parent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; } - - return this._formatDate(date, format); - }, - // KonghaYao 新增函数:生成固定时间段的时间戳 - timestamp: function (min, max) { - if (min instanceof Date && max instanceof Date) - return this._randomDate(min, max); - return this._randomDate(); + parent.children = [...(parent.children || []), item]; + return { mapped, result }; }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; +} +const ids = Object.keys(DICT); +// 转化数组内对象的表现形式 +const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = id.slice(2, 6) === "0000" ? undefined : id.slice(4, 6) == "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!(pid in ids)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + "0000"; + } + return { + id, + pid, + name: value, }; - - /* global document */ - /* - ## Image - */ - var image = { - // 常见的广告宽高 - _adSize: [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600", - ], - // 常见的屏幕宽高 - _screenSize: [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600", - ], - // 常见的视频宽高 - _videoSize: ["720x480", "768x576", "1280x720", "1920x1080"], - /* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - image: function (...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = this.pick(this._adSize); - - if (background && ~background.indexOf("#")) - background = background.slice(1); - if (foreground && ~foreground.indexOf("#")) - foreground = foreground.slice(1); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return ( - "http://dummyimage.com/" + - size + - (background ? "/" + background : "") + - (foreground ? "/" + foreground : "") + - (format ? "." + format : "") + - (text ? "&text=" + text : "") - ); - }, - img: function () { - return this.image.apply(this, arguments); - }, - - /* - BrandColors - http://brandcolors.net/ - A collection of major brand color codes curated by Galen Gidman. - 大牌公司的颜色集合 - - // 获取品牌和颜色 - $('h2').each(function(index, item){ - item = $(item) - console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') - }) - */ - _brandColors: { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: "#ff6138", - Adobe: "#ff0000", - Aim: "#fcd20b", - Amazon: "#e47911", - Android: "#a4c639", - "Angie's List": "#7fbb00", - AOL: "#0060a3", - Atlassian: "#003366", - Behance: "#053eff", - "Big Cartel": "#97b538", - bitly: "#ee6123", - Blogger: "#fc4f08", - Boeing: "#0039a6", - "Booking.com": "#003580", - Carbonmade: "#613854", - Cheddar: "#ff7243", - "Code School": "#3d4944", - Delicious: "#205cc0", - Dell: "#3287c1", - Designmoo: "#e54a4f", - Deviantart: "#4e6252", - "Designer News": "#2d72da", - Devour: "#fd0001", - DEWALT: "#febd17", - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: "#ea4c89", - Dropbox: "#3d9ae8", - Drupal: "#0c76ab", - Dunked: "#2a323a", - eBay: "#89c507", - Ember: "#f05e1b", - Engadget: "#00bdf6", - Envato: "#528036", - Etsy: "#eb6d20", - Evernote: "#5ba525", - "Fab.com": "#dd0017", - Facebook: "#3b5998", - Firefox: "#e66000", - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: "#5b9a68", - Foursquare: "#25a0ca", - Garmin: "#007cc3", - GetGlue: "#2d75a2", - Gimmebar: "#f70078", - GitHub: "#171515", - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: "#f77f00", - Groupon: "#82b548", - "Hacker News": "#ff6600", - HelloWallet: "#0085ca", - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: "#003366", - Houzz: "#73ba37", - HTML5: "#ec6231", - IKEA: "#ffcc33", - IMDb: "#f3ce13", - Instagram: "#3f729b", - Intel: "#0071c5", - Intuit: "#365ebf", - Kickstarter: "#76cc1e", - kippt: "#e03500", - Kodery: "#00af81", - LastFM: "#c3000d", - LinkedIn: "#0e76a8", - Livestream: "#cf0005", - Lumo: "#576396", - Mixpanel: "#a086d3", - Meetup: "#e51937", - Nokia: "#183693", - NVIDIA: "#76b900", - Opera: "#cc0f16", - Path: "#e41f11", - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: "#0000e6", - Pinterest: "#c8232c", - PlayStation: "#665cbe", - Pocket: "#ee4056", - Prezi: "#318bff", - Pusha: "#0f71b4", - Quora: "#a82400", - "QUOTE.fm": "#66ceff", - Rdio: "#008fd5", - Readability: "#9c0000", - "Red Hat": "#cc0000", - Resource: "#7eb400", - Rockpack: "#0ba6ab", - Roon: "#62b0d9", - RSS: "#ee802f", - Salesforce: "#1798c1", - Samsung: "#0c4da2", - Shopify: "#96bf48", - Skype: "#00aff0", - Snagajob: "#f47a20", - Softonic: "#008ace", - SoundCloud: "#ff7700", - "Space Box": "#f86960", - Spotify: "#81b71a", - Sprint: "#fee100", - Squarespace: "#121212", - StackOverflow: "#ef8236", - Staples: "#cc0000", - "Status Chart": "#d7584f", - Stripe: "#008cdd", - StudyBlue: "#00afe1", - StumbleUpon: "#f74425", - "T-Mobile": "#ea0a8e", - Technorati: "#40a800", - "The Next Web": "#ef4423", - Treehouse: "#5cb868", - Trulia: "#5eab1f", - Tumblr: "#34526f", - "Twitch.tv": "#6441a5", - Twitter: "#00acee", - TYPO3: "#ff8700", - Ubuntu: "#dd4814", - Ustream: "#3388ff", - Verizon: "#ef1d1d", - Vimeo: "#86c9ef", - Vine: "#00a478", - Virb: "#06afd8", - "Virgin Media": "#cc0000", - Wooga: "#5b009c", - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: "#2b88d9", - XBOX: "#9bc848", - XING: "#126567", - "Yahoo!": "#720e9e", - Yandex: "#ffcc00", - Yelp: "#c41200", - YouTube: "#c4302b", - Zalongo: "#5498dc", - Zendesk: "#78a300", - Zerply: "#9dcc7a", - Zootool: "#5e8b1d", - }, - _brandNames: function () { - var brands = []; - for (var b in this._brandColors) { - brands.push(b); +}); + +const DICT_FIXED = createTree(fixed); + +var _patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", +}; + +/* + ## Date +*/ +const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); +// 返回一个随机的日期字符串。 +function date(format = "yyyy-MM-dd") { + return this._formatDate(this._randomDate(), format); +} +var date$1 = { + // 日期占位符集合。 + _patternLetters, + // 日期占位符正则。 + _rformat: reRule, + // 格式化日期。 + _formatDate: function (date, format) { + return format.replace(this._rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); + }, + // 生成一个随机的 Date 对象。 + _randomDate: function (min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + }, + + // 返回一个随机的时间字符串。 + time: function (format = "HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + // 返回一个随机的日期和时间字符串。 + datetime: function (format = "yyyy-MM-dd HH:mm:ss") { + return this._formatDate(this._randomDate(), format); + }, + date, + + // 返回当前的日期和时间字符串。 + now: function (unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; } - return brands; - }, - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - dataImage: function (size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); + return this._formatDate(date, format); + }, + // KonghaYao 新增函数:生成固定时间段的时间戳 + timestamp: function (min, max) { + if (min instanceof Date && max instanceof Date) return this._randomDate(min, max); + return this._randomDate(); + }, +}; + +/* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) +*/ +function id() { + var id, + sum = 0, + rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], + last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + + id = pick$1(DICT_FIXED).id + date("yyyyMMdd") + string("number", 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; +} + +/* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ +function guid() { + return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); +} + +/* + ## Miscellaneous +*/ + +/* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 +*/ +let key = 0; +const increment = function (step) { + return (key += +step || 1); +}; +const inc = increment; + +// Dice +function d4() { + return this.natural(1, 4); +} +function d6() { + return this.natural(1, 6); +} +function d8() { + return this.natural(1, 8); +} +function d12() { + return this.natural(1, 12); +} +function d20() { + return this.natural(1, 20); +} +function d100() { + return this.natural(1, 100); +} + +function range(defaultMin, defaultMax, min, max) { + return min === undefined + ? natural(defaultMin, defaultMax) // () + : max === undefined + ? min // ( len ) + : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) +} + +// 随机生成一个句子,第一个单词的首字母大写。 +function sentence(min, max) { + var len = range(12, 18, min, max); + let string = [...Array(len)].map(() => word()).join(""); + return capitalize(string) + "."; +} + +// 随机生成一个单词。 +function word(min, max) { + var len = range(3, 10, min, max); + return [...Array(len)].map(() => character("lower")).join(""); +} + +// 随机生成一段文本。 +function paragraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map((i) => sentence()); +} + +// 随机生成一句标题,其中每个单词的首字母大写。 +function title(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => capitalize(word())).join(""); +} + +function cparagraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => csentence()).join(""); +} + +// 随机生成一个中文句子。 +function csentence(min, max) { + var len = range(12, 18, min, max); + return [...Array(len)].map(() => cword()).join("") + "。"; +} +// 随机生成一句中文标题。 +function ctitle(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => cword()).join(""); +} +// 随机生成一个或多个汉字。 +function cword(...args) { + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + var DICT_KANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; + + var len = 1, + pool = DICT_KANZI, + min, + max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === "string") { + [pool] = args; } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); + // ( length ) + [len] = args; } + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(pool, min); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len)].map(() => pool.charAt(natural(0, pool.length - 1))).join(""); +} + +// 协议簇 +const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); +// 域名后缀 +( + "com net org edu gov int mil cn " + + // 国内域名 + "com.cn net.cn gov.cn org.cn " + + // 中文国内域名 + "中国 中国互联.公司 中国互联.网络 " + + // 新国际域名 + "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + // 世界各国域名后缀 + "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" +).split(" "); + +/* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers +*/ +function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; +} + +// 随机生成一个 URL 协议。 +function protocol() { + return pick$1(protocols); +} +// 随机生成一个域名。 +function domain(Tld) { + return `${word()}.${Tld || tld()}`; +} +/* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) +*/ +function tld() { + // Top Level Domain + return pick$1(tlds); +} + +// 随机生成一个邮件地址。 +function email(domain) { + return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; +} +// 随机生成一个 IP 地址。 +function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join("."); +} + +var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" +]; +var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" +]; +var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" +]; +var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 +}; + +var Addvocate = "#ff6138"; +var Adobe = "#ff0000"; +var Aim = "#fcd20b"; +var Amazon = "#e47911"; +var Android = "#a4c639"; +var AOL = "#0060a3"; +var Atlassian = "#003366"; +var Behance = "#053eff"; +var bitly = "#ee6123"; +var Blogger = "#fc4f08"; +var Boeing = "#0039a6"; +var Carbonmade = "#613854"; +var Cheddar = "#ff7243"; +var Delicious = "#205cc0"; +var Dell = "#3287c1"; +var Designmoo = "#e54a4f"; +var Deviantart = "#4e6252"; +var Devour = "#fd0001"; +var DEWALT = "#febd17"; +var Dribbble = "#ea4c89"; +var Dropbox = "#3d9ae8"; +var Drupal = "#0c76ab"; +var Dunked = "#2a323a"; +var eBay = "#89c507"; +var Ember = "#f05e1b"; +var Engadget = "#00bdf6"; +var Envato = "#528036"; +var Etsy = "#eb6d20"; +var Evernote = "#5ba525"; +var Facebook = "#3b5998"; +var Firefox = "#e66000"; +var Forrst = "#5b9a68"; +var Foursquare = "#25a0ca"; +var Garmin = "#007cc3"; +var GetGlue = "#2d75a2"; +var Gimmebar = "#f70078"; +var GitHub = "#171515"; +var Grooveshark = "#f77f00"; +var Groupon = "#82b548"; +var HelloWallet = "#0085ca"; +var HootSuite = "#003366"; +var Houzz = "#73ba37"; +var HTML5 = "#ec6231"; +var IKEA = "#ffcc33"; +var IMDb = "#f3ce13"; +var Instagram = "#3f729b"; +var Intel = "#0071c5"; +var Intuit = "#365ebf"; +var Kickstarter = "#76cc1e"; +var kippt = "#e03500"; +var Kodery = "#00af81"; +var LastFM = "#c3000d"; +var LinkedIn = "#0e76a8"; +var Livestream = "#cf0005"; +var Lumo = "#576396"; +var Mixpanel = "#a086d3"; +var Meetup = "#e51937"; +var Nokia = "#183693"; +var NVIDIA = "#76b900"; +var Opera = "#cc0f16"; +var Path = "#e41f11"; +var Pinboard = "#0000e6"; +var Pinterest = "#c8232c"; +var PlayStation = "#665cbe"; +var Pocket = "#ee4056"; +var Prezi = "#318bff"; +var Pusha = "#0f71b4"; +var Quora = "#a82400"; +var Rdio = "#008fd5"; +var Readability = "#9c0000"; +var Resource = "#7eb400"; +var Rockpack = "#0ba6ab"; +var Roon = "#62b0d9"; +var RSS = "#ee802f"; +var Salesforce = "#1798c1"; +var Samsung = "#0c4da2"; +var Shopify = "#96bf48"; +var Skype = "#00aff0"; +var Snagajob = "#f47a20"; +var Softonic = "#008ace"; +var SoundCloud = "#ff7700"; +var Spotify = "#81b71a"; +var Sprint = "#fee100"; +var Squarespace = "#121212"; +var StackOverflow = "#ef8236"; +var Staples = "#cc0000"; +var Stripe = "#008cdd"; +var StudyBlue = "#00afe1"; +var StumbleUpon = "#f74425"; +var Technorati = "#40a800"; +var Treehouse = "#5cb868"; +var Trulia = "#5eab1f"; +var Tumblr = "#34526f"; +var Twitter = "#00acee"; +var TYPO3 = "#ff8700"; +var Ubuntu = "#dd4814"; +var Ustream = "#3388ff"; +var Verizon = "#ef1d1d"; +var Vimeo = "#86c9ef"; +var Vine = "#00a478"; +var Virb = "#06afd8"; +var Wooga = "#5b009c"; +var Wunderlist = "#2b88d9"; +var XBOX = "#9bc848"; +var XING = "#126567"; +var Yandex = "#ffcc00"; +var Yelp = "#c41200"; +var YouTube = "#c4302b"; +var Zalongo = "#5498dc"; +var Zendesk = "#78a300"; +var Zerply = "#9dcc7a"; +var Zootool = "#5e8b1d"; +var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool +}; + +/* global document */ +let { _adSize, _screenSize, _videoSize } = size; +const _brandNames = Object.keys(_brandColors); + +/* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 +*/ +function image(...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = this.pick(this._adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = this._brandColors[this.pick(this._brandNames())], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); - }, - }; - - /* - ## Color Convert + // Random.image() + if (!size) size = pick(_adSize); - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 - */ - // https://github.com/harthur/color-convert/blob/master/conversions.js - var color_convert = { - rgb2hsl: function rgb2hsl(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, l; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - l = (min + max) / 2; - - if (max == min) - s = 0; - else if (l <= 0.5) - s = delta / (max + min); - else - s = delta / (2 - max - min); - - return [h, s * 100, l * 100]; - }, - rgb2hsv: function rgb2hsv(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, s, v; - - if (max === 0) - s = 0; - else - s = (delta / max * 1000) / 10; - - if (max == min) - h = 0; - else if (r == max) - h = (g - b) / delta; - else if (g == max) - h = 2 + (b - r) / delta; - else if (b == max) - h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) - h += 360; - - v = ((max / 255) * 1000) / 10; - - return [h, s, v]; - }, - hsl2rgb: function hsl2rgb(hsl) { - var h = hsl[0] / 360, - s = hsl[1] / 100, - l = hsl[2] / 100, - t1, t2, t3, rgb, val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) - t2 = l * (1 + s); - else - t2 = l + s - l * s; - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) t3++; - if (t3 > 1) t3--; - - if (6 * t3 < 1) - val = t1 + (t2 - t1) * 6 * t3; - else if (2 * t3 < 1) - val = t2; - else if (3 * t3 < 2) - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - else - val = t1; - - rgb[i] = val * 255; - } - - return rgb; - }, - hsl2hsv: function hsl2hsv(hsl) { - var h = hsl[0], - s = hsl[1] / 100, - l = hsl[2] / 100, - sv, v; - l *= 2; - s *= (l <= 1) ? l : 2 - l; - v = (l + s) / 2; - sv = (2 * s) / (l + s); - return [h, sv * 100, v * 100]; - }, - hsv2rgb: function hsv2rgb(hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - - v = 255 * v; - - switch (hi) { - case 0: - return [v, t, p] - case 1: - return [q, v, p] - case 2: - return [p, v, t] - case 3: - return [p, q, v] - case 4: - return [t, p, v] - case 5: - return [v, p, q] - } - }, - hsv2hsl: function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, l; - - l = (2 - s) * v; - sl = s * v; - sl /= (l <= 1) ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; - }, - // http://www.140byt.es/keywords/color - rgb2hex: function( - a, // red, as a number from 0 to 255 - b, // green, as a number from 0 to 255 - c // blue, as a number from 0 to 255 - ) { - return "#" + ((256 + a << 8 | b) << 8 | c).toString(16).slice(1) - }, - hex2rgb: function( - a // take a "#xxxxxx" hex string, - ) { - a = '0x' + a.slice(1).replace(a.length > 4 ? a : /./g, '$&$&') | 0; - return [a >> 16, a >> 8 & 255, a & 255] - } - }; + // 去除前面的 # 号 + foreground = foreground.replace(/^#/, ""); + background = background.replace(/^#/, ""); - /* - ## Color 字典数据 + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${backgroound ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; +} - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) - */ - var color_dict = { - // name value nicer - navy: { - value: '#000080', - nicer: '#001F3F' - }, - blue: { - value: '#0000ff', - nicer: '#0074D9' - }, - aqua: { - value: '#00ffff', - nicer: '#7FDBFF' - }, - teal: { - value: '#008080', - nicer: '#39CCCC' - }, - olive: { - value: '#008000', - nicer: '#3D9970' - }, - green: { - value: '#008000', - nicer: '#2ECC40' - }, - lime: { - value: '#00ff00', - nicer: '#01FF70' - }, - yellow: { - value: '#ffff00', - nicer: '#FFDC00' - }, - orange: { - value: '#ffa500', - nicer: '#FF851B' - }, - red: { - value: '#ff0000', - nicer: '#FF4136' - }, - maroon: { - value: '#800000', - nicer: '#85144B' - }, - fuchsia: { - value: '#ff00ff', - nicer: '#F012BE' - }, - purple: { - value: '#800080', - nicer: '#B10DC9' - }, - silver: { - value: '#c0c0c0', - nicer: '#DDDDDD' - }, - gray: { - value: '#808080', - nicer: '#AAAAAA' - }, - black: { - value: '#000000', - nicer: '#111111' - }, - white: { - value: '#FFFFFF', - nicer: '#FFFFFF' - } - }; +var image$1 = { + ...size, + image, + img: image, + _brandColors, + _brandNames, /* - ## Color + 生成一段随机的 Base64 图片编码。 - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() + dataImageHolder: function(size) { + return 'holder.js/' + size + }, */ + dataImage: function (size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); + }, +}; + +/* + ## Address +*/ +var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; +var address = { + // 随机生成一个大区。 + region: function () { + return pick$1(REGION); + }, + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + province: function () { + return pick$1(DICT_FIXED).name; + }, + // 随机生成一个(中国)市。 + city: function (prefix) { + var province = pick$1(DICT_FIXED); + var city = pick$1(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; + }, + // 随机生成一个(中国)县。 + county: function (prefix) { + var province = pick$1(DICT_FIXED); + var city = pick$1(province.children); + var county = pick$1(city.children) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; + }, + // 随机生成一个邮政编码(六位数字)。 + zip: function (len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; + }, + + // address: function() {}, + // phone: function() {}, + // areacode: function() {}, + // street: function() {}, + // street_suffixes: function() {}, + // street_suffix: function() {}, + // states: function() {}, + // state: function() {}, +}; + +/* + ## Mock.Random + + 工具类,用于生成各种随机数据。 +*/ + +var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + date: date$1, + image: image$1, + address: address, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + boolean: boolean, + bool: boolean, + character: character, + char: character, + string: string, + str: string, + range: range$1, + float: float, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize$1, + upper: upper, + lower: lower, + pick: pick$1, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url +}); + +/* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + +/* jshint -W041 */ +var Parser = { + parse: function (name) { + name = name == undefined ? "" : name + ""; + var parameters = (name || "").match(Constant.RE_KEY); + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - var color = { - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 - color: function(name) { - if (name || color_dict[name]) return color_dict[name].nicer - return this.hex() - }, - // #DAC0DE - hex: function() { - var hsv = this._goldenRatioColor(); - var rgb = color_convert.hsv2rgb(hsv); - var hex = color_convert.rgb2hex(rgb[0], rgb[1], rgb[2]); - return hex - }, - // rgb(128,255,255) - rgb: function() { - var hsv = this._goldenRatioColor(); - var rgb = color_convert.hsv2rgb(hsv); - return 'rgb(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ')' - }, - // rgba(128,255,255,0.3) - rgba: function() { - var hsv = this._goldenRatioColor(); - var rgb = color_convert.hsv2rgb(hsv); - return 'rgba(' + - parseInt(rgb[0], 10) + ', ' + - parseInt(rgb[1], 10) + ', ' + - parseInt(rgb[2], 10) + ', ' + - Math.random().toFixed(2) + ')' - }, - // hsl(300,80%,90%) - hsl: function() { - var hsv = this._goldenRatioColor(); - var hsl = color_convert.hsv2hsl(hsv); - return 'hsl(' + - parseInt(hsl[0], 10) + ', ' + - parseInt(hsl[1], 10) + ', ' + - parseInt(hsl[2], 10) + ')' - }, - // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - // https://github.com/devongovett/color-generator/blob/master/index.js - // 随机生成一个有吸引力的颜色。 - _goldenRatioColor: function(saturation, value) { - this._goldenRatio = 0.618033988749895; - this._hue = this._hue || Math.random(); - this._hue += this._goldenRatio; - this._hue %= 1; - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return [ - this._hue * 360, - saturation * 100, - value * 100 - ] - } - }; - color.color; - color.hex; - color.rgb; - color.rgba; - color.hsl; - color._goldenRatioColor; + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - /* - ## Helpers - */ + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; - var Util = require("../util"); - var helper = { - // 把字符串的第一个字母转换为大写。 - capitalize: function (word) { - return (word + "").charAt(0).toUpperCase() + (word + "").substr(1); - }, - // 把字符串转换为大写。 - upper: function (str) { - return (str + "").toUpperCase(); - }, - // 把字符串转换为小写。 - lower: function (str) { - return (str + "").toLowerCase(); - }, - // 从数组中随机选取一个元素,并返回。 - pick: function pick(arr, min, max) { - // pick( item1, item2 ... ) - if (!Util.isArray(arr)) { - arr = [].slice.call(arguments); - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; + }, +}; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } +// https://github.com/nuysoft/regexp - if (min === 1 && max === 1) return arr[this.natural(0, arr.length - 1)]; +function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); +} - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max); - }, - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) - */ - shuffle: function shuffle(arr, min, max) { - let result = shuffle(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; - /* falls through */ - case 3: - min = parseInt(min, 10); - max = parseInt(max, 10); - return result.slice(0, this.natural(min, max)); - } - }, - /* - * Random.order(item, item) - * Random.order([item, item ...]) +function Alternate(n, l) { + Token.call(this, "alternate"), (this.left = n), (this.right = l); +} - 顺序获取数组中的元素 +function Match(n) { + Token.call(this, "match"), (this.body = n.filter(Boolean)); +} - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) +function Group(n, l) { + Token.call(this, n), (this.body = l); +} - 不支持单独调用! - */ - order: function order(array) { - order.cache = order.cache || {}; +function CaptureGroup(n) { + Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); +} - if (arguments.length > 1) array = [].slice.call(arguments, 0); +function Quantified(n, l) { + Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); +} - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); +function Quantifier(n, l) { + Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); +} - var cache = (order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array, - }); +function CharSet(n, l) { + Token.call(this, "charset"), (this.invert = n), (this.body = l); +} - return cache.array[cache.index++ % cache.array.length]; - }, - }; +function CharacterRange(n, l) { + Token.call(this, "range"), (this.start = n), (this.end = l); +} - /* - ## Text +function Literal(n) { + Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); +} - http://www.lipsum.com/ - */ +function Unicode(n) { + Token.call(this, "unicode"), (this.code = n.toUpperCase()); +} +function Hex(n) { + Token.call(this, "hex"), (this.code = n.toUpperCase()); +} +function Octal(n) { + Token.call(this, "octal"), (this.code = n.toUpperCase()); +} - function range(defaultMin, defaultMax, min, max) { - return min === undefined ? basic.natural(defaultMin, defaultMax) : // () - max === undefined ? min : // ( len ) - basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max ) - } +function BackReference(n) { + Token.call(this, "back-reference"), (this.code = n.toUpperCase()); +} - var text = { - // 随机生成一段文本。 - paragraph: function(min, max) { - var len = range(3, 7, min, max); - var result = []; - for (var i = 0; i < len; i++) { - result.push(this.sentence()); - } - return result.join(' ') - }, - // - cparagraph: function(min, max) { - var len = range(3, 7, min, max); - var result = []; - for (var i = 0; i < len; i++) { - result.push(this.csentence()); - } - return result.join('') - }, - // 随机生成一个句子,第一个单词的首字母大写。 - sentence: function(min, max) { - var len = range(12, 18, min, max); - var result = []; - for (var i = 0; i < len; i++) { - result.push(this.word()); - } - return helper.capitalize(result.join(' ')) + '.' - }, - // 随机生成一个中文句子。 - csentence: function(min, max) { - var len = range(12, 18, min, max); - var result = []; - for (var i = 0; i < len; i++) { - result.push(this.cword()); - } +function ControlCharacter(n) { + Token.call(this, "control-character"), (this.code = n.toUpperCase()); +} - return result.join('') + '。' - }, - // 随机生成一个单词。 - word: function(min, max) { - var len = range(3, 10, min, max); - var result = ''; - for (var i = 0; i < len; i++) { - result += basic.character('lower'); +var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; } - return result - }, - // 随机生成一个或多个汉字。 - cword: function(pool, min, max) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; - - var len; - switch (arguments.length) { - case 0: // () - pool = DICT_KANZI; - len = 1; - break - case 1: // ( pool ) - if (typeof arguments[0] === 'string') { - len = 1; - } else { - // ( length ) - len = pool; - pool = DICT_KANZI; - } - break - case 2: - // ( pool, length ) - if (typeof arguments[0] === 'string') { - len = min; - } else { - // ( min, max ) - len = this.natural(pool, min); - pool = DICT_KANZI; + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); } - break - case 3: - len = this.natural(min, max); - break - } + return n + .replace(/\\/g, "\\\\") + .replace(/"/g, '\\"') + .replace(/\x08/g, "\\b") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\f/g, "\\f") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return "\\x0" + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return "\\x" + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return "\\u0" + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; - var result = ''; - for (var i = 0; i < len; i++) { - result += pool.charAt(this.natural(0, pool.length - 1)); - } - return result - }, - // 随机生成一句标题,其中每个单词的首字母大写。 - title: function(min, max) { - var len = range(3, 7, min, max); - var result = []; - for (var i = 0; i < len; i++) { - result.push(this.capitalize(this.word())); - } - return result.join(' ') - }, - // 随机生成一句中文标题。 - ctitle: function(min, max) { - var len = range(3, 7, min, max); - var result = []; - for (var i = 0; i < len; i++) { - result.push(this.cword()); + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; } - return result.join('') - } - }; - text.paragraph; - text.cparagraph; - text.sentence; - text.csentence; - text.word; - text.cword; - text.title; - text.ctitle; - - /* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) - */ - var name = { - // 随机生成一个常见的英文名。 - first: function() { - var names = [ - // male - "James", "John", "Robert", "Michael", "William", - "David", "Richard", "Charles", "Joseph", "Thomas", - "Christopher", "Daniel", "Paul", "Mark", "Donald", - "George", "Kenneth", "Steven", "Edward", "Brian", - "Ronald", "Anthony", "Kevin", "Jason", "Matthew", - "Gary", "Timothy", "Jose", "Larry", "Jeffrey", - "Frank", "Scott", "Eric" - ].concat([ - // female - "Mary", "Patricia", "Linda", "Barbara", "Elizabeth", - "Jennifer", "Maria", "Susan", "Margaret", "Dorothy", - "Lisa", "Nancy", "Karen", "Betty", "Helen", - "Sandra", "Donna", "Carol", "Ruth", "Sharon", - "Michelle", "Laura", "Sarah", "Kimberly", "Deborah", - "Jessica", "Shirley", "Cynthia", "Angela", "Melissa", - "Brenda", "Amy", "Anna" - ]); - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓。 - last: function() { - var names = [ - "Smith", "Johnson", "Williams", "Brown", "Jones", - "Miller", "Davis", "Garcia", "Rodriguez", "Wilson", - "Martinez", "Anderson", "Taylor", "Thomas", "Hernandez", - "Moore", "Martin", "Jackson", "Thompson", "White", - "Lopez", "Lee", "Gonzalez", "Harris", "Clark", - "Lewis", "Robinson", "Walker", "Perez", "Hall", - "Young", "Allen" - ]; - return this.pick(names) - // or this.capitalize(this.word()) - }, - // 随机生成一个常见的英文姓名。 - name: function(middle) { - return this.first() + ' ' + - (middle ? this.first() + ' ' : '') + - this.last() - }, - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - cfirst: function() { - var names = ( - '王 李 张 刘 陈 杨 赵 黄 周 吴 ' + - '徐 孙 胡 朱 高 林 何 郭 马 罗 ' + - '梁 宋 郑 谢 韩 唐 冯 于 董 萧 ' + - '程 曹 袁 邓 许 傅 沈 曾 彭 吕 ' + - '苏 卢 蒋 蔡 贾 丁 魏 薛 叶 阎 ' + - '余 潘 杜 戴 夏 锺 汪 田 任 姜 ' + - '范 方 石 姚 谭 廖 邹 熊 金 陆 ' + - '郝 孔 白 崔 康 毛 邱 秦 江 史 ' + - '顾 侯 邵 孟 龙 万 段 雷 钱 汤 ' + - '尹 黎 易 常 武 乔 贺 赖 龚 文' - ).split(' '); - return this.pick(names) - }, - /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - clast: function() { - var names = ( - '伟 芳 娜 秀英 敏 静 丽 强 磊 军 ' + - '洋 勇 艳 杰 娟 涛 明 超 秀兰 霞 ' + - '平 刚 桂英' - ).split(' '); - return this.pick(names) - }, - // 随机生成一个常见的中文姓名。 - cname: function() { - return this.cfirst() + this.clast() - } - }; - name.first; - name.last; - name.name; - name.cfirst; - name.clast; - name.cname; - - /* - ## Web - */ - var web = { - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - url: function(protocol, host) { - return (protocol || this.protocol()) + '://' + // protocol? - (host || this.domain()) + // host? - '/' + this.word() - }, - // 随机生成一个 URL 协议。 - protocol: function() { - return this.pick( - // 协议簇 - 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ') - ) - }, - // 随机生成一个域名。 - domain: function(tld) { - return this.word() + '.' + (tld || this.tld()) - }, - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - tld: function() { // Top Level Domain - return this.pick( - ( - // 域名后缀 - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' - ).split(' ') - ) - }, - // 随机生成一个邮件地址。 - email: function(domain) { - return this.character('lower') + '.' + this.word() + '@' + - ( - domain || - (this.word() + '.' + this.tld()) - ) - // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld() - // return this.word() + '@' + (domain || this.domain()) - }, - // 随机生成一个 IP 地址。 - ip: function() { - return this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) - } - }; - web.url; - web.protocol; - web.domain; - web.tld; - web.email; - web.ip; - - var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "471005": "其它区", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" - }; - - /* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - */ - - // id pid/parentId name children - - // 将扁平数组转化为树状 - function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; - mapped[id] = item; - /* jshint -W041 */ - // undefined 时是一个顶级元素 - if (pid === undefined) { - result.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - if (!parent) { - //父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - } - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; - } - // 转化数组内对象的表现形式 - const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = - id.slice(2, 6) === "0000" - ? undefined - : id.slice(4, 6) == "00" - ? id.slice(0, 2) + "0000" - : id.slice(0, 4) + "00"; - return { - id: id, - pid: pid, - name: value, - }; - }); - - const DICT_FIXED = createTree(fixed); - - /* - ## Address - */ - var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - - var address = { - // 随机生成一个大区。 - region: function () { - return this.pick(REGION); - }, - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - province: function () { - return this.pick(DICT_FIXED).name; - }, - // 随机生成一个(中国)市。 - city: function (prefix) { - var province = this.pick(DICT_FIXED); - var city = this.pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; - }, - // 随机生成一个(中国)县。 - county: function (prefix) { - var province = this.pick(DICT_FIXED); - var city = this.pick(province.children); - var county = this.pick(city.children) || { - name: "-", - }; - return prefix - ? [province.name, city.name, county.name].join(" ") - : county.name; - }, - // 随机生成一个邮政编码(六位数字)。 - zip: function (len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += this.natural(0, 9); - return zip; - }, - - // address: function() {}, - // phone: function() {}, - // areacode: function() {}, - // street: function() {}, - // street_suffixes: function() {}, - // street_suffix: function() {}, - // states: function() {}, - // state: function() {}, - }; - - /* - ## Miscellaneous - */ - - var misc = { - // Dice - d4: function() { - return this.natural(1, 4) - }, - d6: function() { - return this.natural(1, 6) - }, - d8: function() { - return this.natural(1, 8) - }, - d12: function() { - return this.natural(1, 12) - }, - d20: function() { - return this.natural(1, 20) - }, - d100: function() { - return this.natural(1, 100) - }, - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - */ - guid: function() { - var pool = "abcdefABCDEF1234567890", - guid = this.string(pool, 8) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 4) + '-' + - this.string(pool, 12); - return guid - }, - uuid: function() { - return this.guid() - }, - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - id: function() { - var id, - sum = 0, - rank = [ - "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" - ], - last = [ - "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" - ]; - - id = this.pick(DICT_FIXED).id + - this.date('yyyyMMdd') + - this.string('number', 3); - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id - }, - - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - increment: function() { - var key = 0; - return function(step) { - return key += (+step || 1) // step? - } - }(), - inc: function(step) { - return this.increment(step) - } - }; - misc.d4; - misc.d6; - misc.d8; - misc.d12; - misc.d20; - misc.d100; - misc.guid; - misc.uuid; - misc.id; - misc.increment; - misc.inc; - - /* - ## Mock.Random - - 工具类,用于生成各种随机数据。 - */ - const Random = Object.assign( - {}, - basic, - date, - image, - color, - text, - name, - web, - address, - helper, - misc - ); - - /* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - - - - - /* jshint -W041 */ - var parser$1 = { - parse: function (name) { - name = name == undefined ? "" : name + ""; - - var parameters = (name || "").match(constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : Random.integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || Random.integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters: parameters, - // 1 min, 2 max - range: range, - min: min, - max: max, - // min-max - count: count, - // 是否有 decimal - decimal: decimal, - dmin: dmin, - dmax: dmax, - // dmin-dimax - dcount: dcount, - }; - - for (var r in result) { - if (result[r] != undefined) return result; - } - - return {}; - }, - }; - - // https://github.com/nuysoft/regexp - - function Token(n) { - this.type = n, this.offset = Token.offset(), this.text = Token.text(); - } - - function Alternate(n, l) { - Token.call(this, "alternate"), this.left = n, this.right = l; - } - - function Match(n) { - Token.call(this, "match"), this.body = n.filter(Boolean); - } - - function Group(n, l) { - Token.call(this, n), this.body = l; - } - - function CaptureGroup(n) { - Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), - this.body = n; - } - - function Quantified(n, l) { - Token.call(this, "quantified"), this.body = n, this.quantifier = l; - } - - function Quantifier(n, l) { - Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0; - } - - function CharSet(n, l) { - Token.call(this, "charset"), this.invert = n, this.body = l; - } - - function CharacterRange(n, l) { - Token.call(this, "range"), this.start = n, this.end = l; - } - - function Literal(n) { - Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text; - } - - function Unicode(n) { - Token.call(this, "unicode"), this.code = n.toUpperCase(); - } - - function Hex(n) { - Token.call(this, "hex"), this.code = n.toUpperCase(); - } - - function Octal(n) { - Token.call(this, "octal"), this.code = n.toUpperCase(); - } - - function BackReference(n) { - Token.call(this, "back-reference"), this.code = n.toUpperCase(); - } - - function ControlCharacter(n) { - Token.call(this, "control-character"), this.code = n.toUpperCase(); - } - - var parser = function() { - function n(n, l) { - function u() { - this.constructor = n; - } - u.prototype = l.prototype, n.prototype = new u(); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) { - return "\\x0" + l(n); - }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) { - return "\\x" + l(n); - }).replace(/[\u0180-\u0FFF]/g, function(n) { - return "\\u0" + l(n); - }).replace(/[\u1080-\uFFFF]/g, function(n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; - } - this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, - this.name = "SyntaxError", this.message = e(n, l); + (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); } function u(n) { function u() { @@ -5988,18 +7305,30 @@ var Mock = (function () { function r(l) { function u(l, u, t) { var r, e; - for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, - l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, - l.seenCR = !0) : (l.column++, l.seenCR = !1); + for (r = u; t > r; r++) + (e = n.charAt(r)), + "\n" === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : "\r" === e || "\u2028" === e || "\u2029" === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); } - return Mt !== l && (Mt > l && (Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }), u(Dt, Mt, l), Mt = l), Dt; + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); } function e(n) { - Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n)); + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); } function o(n) { var l = 0; @@ -6007,705 +7336,942 @@ var Mock = (function () { } function c() { var l, u, t, r, o; - return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, - qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], - t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, - u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, - l = il), l; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null === t && (t = al), + null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function i() { var n, l, u, t, r; - if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), - Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), - null === r && (r = a()); - null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); - } else qt = n, n = il; else qt = n, n = il; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); return n; } function a() { var n; - return n = x(), null === n && (n = Q(), null === n && (n = B())), n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; } function f() { var l, u; - return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), - null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function s() { var l, u; - return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), - null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function h() { var n, l, u; - return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; + return ( + (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + ); } function d() { var n, l, u; - return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, - l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, - n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); } function p() { var n; - return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), - null === n && (n = g(), null === n && (n = b()))))), n; + return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; } function v() { var l, u, t, r, o, c; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, - 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, - qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), + null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function w() { var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, - 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function A() { var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, - 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function C() { var l, u; - return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), - null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function g() { var l, u; - return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), - null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function b() { var l, u; - return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), - null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function k() { var l; - return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), - l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; } function T() { var l, u, t; - if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, - 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), - qt++) : (t = null, 0 === Wt && e(Il)); else u = il; - return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, - l; + if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) + for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; } function x() { var l, u, t, r; - return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), - null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), - null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), - null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function y() { var n, l; - return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, - n = l) : n = l, n; + return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; } function m() { var l, u, t; - return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); } function R() { var l, u, t; - return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); } function F() { var l, u, t; - return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); } function Q() { var l, u, t, r, o; - if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), - null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), - null === t && (t = al), null !== t) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), - null === o && (o = U()); - null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), - null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il); - } else qt = l, l = il; else qt = l, l = il; - return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; + if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) + if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; } function S() { var l, u, t, r; - return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, - 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, - null === l && (u = null, 0 === Wt && e(du)), l; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); } function U() { var n; - return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), - n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; } function E() { var l, u; - return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), - null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; + return ( + (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + ); } function G() { var n; - return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), - null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), - null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), - null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), - null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + n + ); } function B() { var n; - return n = j(), null === n && (n = q(), null === n && (n = $())), n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; } function j() { var l, u; - return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), - null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function $() { var l, u; - return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, - 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, - Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); } function q() { var n; - return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), - null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), - null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), - null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), - null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), - n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + n + ); } function L() { var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function M() { var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function D() { var l, u; - return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), - null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function H() { var l, u; - return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), - null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function O() { var l, u; - return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), - null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function W() { var l, u; - return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), - null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function z() { var l, u; - return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), - null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function I() { var l, u; - return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), - null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function J() { var l, u; - return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), - null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function K() { var l, u; - return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), - null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function N() { var l, u; - return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), - null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function P() { var l, u; - return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), - null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function V() { var l, u; - return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), - null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function X() { var l, u; - return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), - null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function Y() { var l, u, t; - return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function Z() { var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), - null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } function _() { var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u) { - if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), - null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(mt)); else t = il; - null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; + if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { + if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) + for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); return l; } function nl() { var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; + if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); return l; } function ll() { var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; + if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); return l; } function ul() { var l, u; - return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; + return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; } function tl() { var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); } - var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { - regexp: c - }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) { - return l ? new Alternate(n, l[1]) : n; - }, dl = function(n, l, u) { - return new Match([ n ].concat(l).concat([ u ])); - }, pl = "^", vl = '"^"', wl = function() { - return new Token("start"); - }, Al = "$", Cl = '"$"', gl = function() { - return new Token("end"); - }, bl = function(n, l) { - return new Quantified(n, l); - }, kl = "Quantifier", Tl = function(n, l) { - return l && (n.greedy = !1), n; - }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) { - return new Quantifier(n, l); - }, Ul = ",}", El = '",}"', Gl = function(n) { - return new Quantifier(n, 1/0); - }, Bl = function(n) { - return new Quantifier(n, n); - }, jl = "+", $l = '"+"', ql = function() { - return new Quantifier(1, 1/0); - }, Ll = "*", Ml = '"*"', Dl = function() { - return new Quantifier(0, 1/0); - }, Hl = "?", Ol = '"?"', Wl = function() { - return new Quantifier(0, 1); - }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) { - return +n.join(""); - }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) { - return n; - }, Yl = function(n) { - return new CaptureGroup(n); - }, Zl = "?:", _l = '"?:"', nu = function(n) { - return new Group("non-capture-group", n); - }, lu = "?=", uu = '"?="', tu = function(n) { - return new Group("positive-lookahead", n); - }, ru = "?!", eu = '"?!"', ou = function(n) { - return new Group("negative-lookahead", n); - }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) { - return new CharSet(!!n, l); - }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) { - return new CharacterRange(n, l); - }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) { - return new Literal(n); - }, ku = ".", Tu = '"."', xu = function() { - return new Token("any-character"); - }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() { - return new Token("backspace"); - }, Uu = function() { - return new Token("word-boundary"); - }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() { - return new Token("non-word-boundary"); - }, ju = "\\d", $u = '"\\\\d"', qu = function() { - return new Token("digit"); - }, Lu = "\\D", Mu = '"\\\\D"', Du = function() { - return new Token("non-digit"); - }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() { - return new Token("form-feed"); - }, zu = "\\n", Iu = '"\\\\n"', Ju = function() { - return new Token("line-feed"); - }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() { - return new Token("carriage-return"); - }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() { - return new Token("white-space"); - }, Zu = "\\S", _u = '"\\\\S"', nt = function() { - return new Token("non-white-space"); - }, lt = "\\t", ut = '"\\\\t"', tt = function() { - return new Token("tab"); - }, rt = "\\v", et = '"\\\\v"', ot = function() { - return new Token("vertical-tab"); - }, ct = "\\w", it = '"\\\\w"', at = function() { - return new Token("word"); - }, ft = "\\W", st = '"\\\\W"', ht = function() { - return new Token("non-word"); - }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) { - return new ControlCharacter(n); - }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) { - return new BackReference(n); - }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) { - return new Octal(n.join("")); - }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) { - return new Hex(n.join("")); - }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) { - return new Unicode(n.join("")); - }, $t = function() { - return new Token("null-character"); - }, qt = 0, Lt = 0, Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }, Ht = 0, Ot = [], Wt = 0; + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = "", + fl = "|", + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = "^", + vl = '"^"', + wl = function () { + return new Token("start"); + }, + Al = "$", + Cl = '"$"', + gl = function () { + return new Token("end"); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = "Quantifier", + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = "{", + yl = '"{"', + ml = ",", + Rl = '","', + Fl = "}", + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ",}", + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = "+", + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = "*", + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = "?", + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = "[0-9]", + Jl = function (n) { + return +n.join(""); + }, + Kl = "(", + Nl = '"("', + Pl = ")", + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = "?:", + _l = '"?:"', + nu = function (n) { + return new Group("non-capture-group", n); + }, + lu = "?=", + uu = '"?="', + tu = function (n) { + return new Group("positive-lookahead", n); + }, + ru = "?!", + eu = '"?!"', + ou = function (n) { + return new Group("negative-lookahead", n); + }, + cu = "CharacterSet", + iu = "[", + au = '"["', + fu = "]", + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = "CharacterRange", + pu = "-", + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = "Character", + Cu = /^[^\\\]]/, + gu = "[^\\\\\\]]", + bu = function (n) { + return new Literal(n); + }, + ku = ".", + Tu = '"."', + xu = function () { + return new Token("any-character"); + }, + yu = "Literal", + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = "[^|\\\\\\/.[()?+*$\\^]", + Fu = "\\b", + Qu = '"\\\\b"', + Su = function () { + return new Token("backspace"); + }, + Uu = function () { + return new Token("word-boundary"); + }, + Eu = "\\B", + Gu = '"\\\\B"', + Bu = function () { + return new Token("non-word-boundary"); + }, + ju = "\\d", + $u = '"\\\\d"', + qu = function () { + return new Token("digit"); + }, + Lu = "\\D", + Mu = '"\\\\D"', + Du = function () { + return new Token("non-digit"); + }, + Hu = "\\f", + Ou = '"\\\\f"', + Wu = function () { + return new Token("form-feed"); + }, + zu = "\\n", + Iu = '"\\\\n"', + Ju = function () { + return new Token("line-feed"); + }, + Ku = "\\r", + Nu = '"\\\\r"', + Pu = function () { + return new Token("carriage-return"); + }, + Vu = "\\s", + Xu = '"\\\\s"', + Yu = function () { + return new Token("white-space"); + }, + Zu = "\\S", + _u = '"\\\\S"', + nt = function () { + return new Token("non-white-space"); + }, + lt = "\\t", + ut = '"\\\\t"', + tt = function () { + return new Token("tab"); + }, + rt = "\\v", + et = '"\\\\v"', + ot = function () { + return new Token("vertical-tab"); + }, + ct = "\\w", + it = '"\\\\w"', + at = function () { + return new Token("word"); + }, + ft = "\\W", + st = '"\\\\W"', + ht = function () { + return new Token("non-word"); + }, + dt = "\\c", + pt = '"\\\\c"', + vt = "any character", + wt = function (n) { + return new ControlCharacter(n); + }, + At = "\\", + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = "[1-9]", + kt = function (n) { + return new BackReference(n); + }, + Tt = "\\0", + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = "[0-7]", + Rt = function (n) { + return new Octal(n.join("")); + }, + Ft = "\\x", + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = "[0-9a-fA-F]", + Et = function (n) { + return new Hex(n.join("")); + }, + Gt = "\\u", + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join("")); + }, + $t = function () { + return new Token("null-character"); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; if ("startRule" in el) { if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); cl = ol[el.startRule]; } - if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl; - throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column); + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); } - return n(l, Error), { - SyntaxError: l, - parse: u - }; - }(), index = 1, cgs = {}; - - var parser_1 = parser; - - /* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 + return ( + n(l, Error), { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ - - - - /* - - */ - var Handler$1 = { - extend: util.extend, - }; - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart - /*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] - }*/ - - // ASCII printable code chart - // var LOWER = 'abcdefghijklmnopqrstuvwxyz' - // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - // var NUMBER = '0123456789' - // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' - var LOWER = ascii(97, 122); - var UPPER = ascii(65, 90); - var NUMBER = ascii(48, 57); - var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) - var PRINTABLE = ascii(32, 126); - var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; - var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); + SyntaxError: l, + parse: u, } - return result; - })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, - }; + ); + })(), + index = 1, + cgs = {}; + +/* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } - function ascii(from, to) { - var result = ""; - for (var i = from; i <= to; i++) { - result += String.fromCharCode(i); + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ +/* + + */ +var Handler$1 = { + extend: extend, +}; + +// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +/*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] +}*/ + +// ASCII printable code chart +// var LOWER = 'abcdefghijklmnopqrstuvwxyz' +// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +// var NUMBER = '0123456789' +// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' +var LOWER = ascii(97, 122); +var UPPER = ascii(65, 90); +var NUMBER = ascii(48, 57); +var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) +var PRINTABLE = ascii(32, 126); +var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; +var CHARACTER_CLASSES = { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ""); } return result; - } - - // var ast = RegExpParser.parse(regexp.source) - Handler$1.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, +}; + +// 从 from 到 to 包含两个端点的字符串 +function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); +} + +// var ast = RegExpParser.parse(regexp.source) +Handler$1.gen = function (node, result, cache) { + cache = cache || { + guid: 1, }; - - Handler$1.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": - return Random.character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO - break; - case "digit": - return Random.pick(NUMBER.split("")); - case "non-digit": - return Random.pick((LOWER + UPPER + OTHER).split("")); - case "form-feed": - break; - case "line-feed": - return node.body || node.text; - case "carriage-return": - break; - case "white-space": - return Random.pick(SPACE.split("")); - case "non-white-space": - return Random.pick((LOWER + UPPER + NUMBER).split("")); - case "tab": - break; - case "vertical-tab": - break; - case "word": // \w [a-zA-Z0-9] - return Random.pick((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return Random.pick(OTHER.replace("_", "").split("")); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(Random.boolean() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ""; - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); +}; + +Handler$1.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case "start": + case "end": + return ""; + case "any-character": + return character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return pick$1(NUMBER.split("")); + case "non-digit": + return pick$1((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return pick$1(SPACE.split("")); + case "non-white-space": + return pick$1((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return pick$1((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return pick$1(OTHER.replace("_", "").split("")); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] } - return result; - }, - // () - "capture-group": function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - "non-capture-group": function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - "positive-lookahead": function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - "negative-lookahead": function (node, result, cache) { - // node.body - return ""; - }, - /* - { - type: 'quantified', + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ""; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + "capture-group": function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + "non-capture-group": function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + "positive-lookahead": function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + "negative-lookahead": function (node, result, cache) { + // node.body + return ""; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ""; - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* + text: 'c', + body: 'c', + escaped: false + }, quantifier: { type: 'quantifier', offset: 4, @@ -6714,1643 +8280,1558 @@ var Mock = (function () { max: Infinity, greedy: true } - */ - quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + Random.integer(3, 7); - return Random.integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); - - // node.body [] - var literal = Random.pick(node.body); - return this.gen(literal, result, cache); - }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); - break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); - } + } + */ + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this["invert-charset"](node, result, cache); + + // node.body [] + var literal = pick$1(node.body); + return this.gen(literal, result, cache); + }, + "invert-charset": function (node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ""); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ""); } - } - } - return Random.pick(pool.split("")); - }, - range: function (node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(Random.integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " - ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } } - return map; - })(), - "control-character": function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, - }); - - var handler$1 = Handler$1; - - var regexp = { - Parser: parser_1, - Handler: handler$1 - }; - regexp.Parser; - regexp.Handler; - - /* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 + } + return pick$1(pool.split("")); + }, + range: function (node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, +}); - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 +var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$1 +}); - * Handler.getValueByKeyPath( key, options ) +/* + ## Handler - * Data Placeholder Definition, DPD + 处理数据模板。 + + * Handler.gen( template, name?, context? ) - 处理数据占位符定义 + 入口方法。 - * Handler.placeholder( placeholder, context, templateContext, options ) + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 - */ + * Handler.getValueByKeyPath( key, options ) + * Data Placeholder Definition, DPD + 处理数据占位符定义 + * Handler.placeholder( placeholder, context, templateContext, options ) +*/ +var Handler = { + extend: extend, +}; +/* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, - var Handler = { - extend: util.extend, + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot +*/ +Handler.gen = function (template, name, context) { + /* jshint -W041 */ + name = name == undefined ? "" : name + ""; + + context = context || {}; + context = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [Constant.GUID], + templatePath: context.templatePath || [Constant.GUID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, }; + // console.log('path:', context.path.join('.'), template) - /* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot - */ - Handler.gen = function (template, name, context) { - /* jshint -W041 */ - name = name == undefined ? "" : name + ""; - - context = context || {}; - context = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [constant.GUID], - templatePath: context.templatePath || [constant.GUID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var rule = parser$1.parse(name); - var type = util.type(template); - var data; - - if (Handler[type]) { - data = Handler[type]({ - // 属性值类型 - type: type, - // 属性值模板 - template: template, - // 属性名 + 生成规则 - name: name, - // 属性名 - parsedName: name ? name.replace(constant.RE_KEY, "$1") : name, - - // 解析后的生成规则 - rule: rule, - // 相关上下文 - context: context, - }); + var rule = Parser.parse(name); + var type = type$1(template); + var data; - if (!context.root) context.root = data; - return data; - } + if (Handler[type]) { + data = Handler[type]({ + // 属性值类型 + type: type, + // 属性值模板 + template: template, + // 属性名 + 生成规则 + name: name, + // 属性名 + parsedName: name ? name.replace(Constant.RE_KEY, "$1") : name, + + // 解析后的生成规则 + rule: rule, + // 相关上下文 + context: context, + }); - return template; - }; + if (!context.root) context.root = data; + return data; + } - Handler.extend({ - array: function (options) { - var result = [], - i, - ii; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (options.template.length === 0) return result; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!options.rule.parameters) { - for (i = 0; i < options.template.length; i++) { - options.context.path.push(i); - options.context.templatePath.push(i); - result.push( - Handler.gen(options.template[i], i, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (options.rule.min === 1 && options.rule.max === undefined) { - // fix #17 - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = Random.pick( - Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|+1': [{}, {}] - if (options.rule.parameters[2]) { - options.template.__order_index = options.template.__order_index || 0; - - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - })[options.template.__order_index % options.template.length]; - - options.template.__order_index += +options.rule.parameters[2]; - - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|1-10': [{}] - for (i = 0; i < options.rule.count; i++) { - // 'data|1-10': [{}, {}] - for (ii = 0; ii < options.template.length; ii++) { - options.context.path.push(result.length); - options.context.templatePath.push(ii); - result.push( - Handler.gen(options.template[ii], result.length, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } - } - } - } - return result; - }, - object: function (options) { - var result = {}, - keys, - fnKeys, - key, - parsedKey, - inc, - i; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (options.rule.min != undefined) { - keys = util.keys(options.template); - keys = Random.shuffle(keys); - keys = keys.slice(0, options.rule.count); - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { + return template; +}; + +Handler.extend({ + array: function (options) { + var result = [], + i, + ii; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (options.template.length === 0) return result; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!options.rule.parameters) { + for (i = 0; i < options.template.length; i++) { + options.context.path.push(i); + options.context.templatePath.push(i); + result.push( + Handler.gen(options.template[i], i, { path: options.context.path, templatePath: options.context.templatePath, currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'obj': {} - keys = []; - fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 - for (key in options.template) { - (typeof options.template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Util.keys(options.template) - keys.sort(function(a, b) { - var afn = typeof options.template[a] === 'function' - var bfn = typeof options.template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 }) - */ - - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (options.rule.min === 1 && options.rule.max === undefined) { + // fix #17 + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = pick$1( + Handler.gen(options.template, undefined, { path: options.context.path, templatePath: options.context.templatePath, currentContext: result, templateCurrentContext: options.template, root: options.context.root || result, templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - // 'id|+1': 1 - inc = key.match(constant.RE_KEY); - if (inc && inc[2] && util.type(options.template[key]) === "number") { - options.template[key] += parseInt(inc[2], 10); - } - } - } - return result; - }, - number: function (options) { - var result, parts; - if (options.rule.decimal) { - // float - options.template += ""; - parts = options.template.split("."); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parts[0] = options.rule.range ? options.rule.count : parts[0]; - parts[1] = (parts[1] || "").slice(0, options.rule.dcount); - while (parts[1].length < options.rule.dcount) { - parts[1] += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - parts[1].length < options.rule.dcount - 1 ? Random.character("number") : Random.character("123456789"); - } - result = parseFloat(parts.join("."), 10); + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); } else { - // integer - // 'grade1|1-100': 1, - result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; - } - return result; - }, - boolean: function (options) { - var result; - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template; - return result; - }, - string: function (options) { - var result = "", - i, - placeholders, - ph, - phed; - if (options.template.length) { - // 'foo': '★', - /* jshint -W041 */ - if (options.rule.count == undefined) { - result += options.template; - } + // 'data|+1': [{}, {}] + if (options.rule.parameters[2]) { + options.template.__order_index = options.template.__order_index || 0; - // 'star|1-5': '★', - for (i = 0; i < options.rule.count; i++) { - result += options.template; - } - // 'email|1-10': '@EMAIL, ', - placeholders = result.match(constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - for (i = 0; i < placeholders.length; i++) { - ph = placeholders[i]; - - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(i--, 1); - continue; - } + options.context.path.push(options.name); + options.context.templatePath.push(options.name); + result = Handler.gen(options.template, undefined, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + })[options.template.__order_index % options.template.length]; - phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); + options.template.__order_index += +options.rule.parameters[2]; - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - break; + options.context.path.pop(); + options.context.templatePath.pop(); + } else { + // 'data|1-10': [{}] + for (i = 0; i < options.rule.count; i++) { + // 'data|1-10': [{}, {}] + for (ii = 0; ii < options.template.length; ii++) { + options.context.path.push(result.length); + options.context.templatePath.push(ii); + result.push( + Handler.gen(options.template[ii], result.length, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, + }) + ); + options.context.path.pop(); + options.context.templatePath.pop(); + } } - result = result.replace(ph, phed); } - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = options.rule.range ? Random.string(options.rule.count) : options.template; } - return result; - }, - function: function (options) { - // ( context, options ) - return options.template.call(options.context.currentContext, options); - }, - regexp: function (options) { - var source = ""; - - // 'name': /regexp/, - /* jshint -W041 */ - if (options.rule.count == undefined) { - source += options.template.source; // regexp.source - } - - // 'name|1-5': /regexp/, - for (var i = 0; i < options.rule.count; i++) { - source += options.template.source; - } - - return regexp.Handler.gen(regexp.Parser.parse(source)); - }, - }); - - Handler.extend({ - _all: function () { - var re = {}; - for (var key in Random) re[key.toLowerCase()] = key; - return re; - }, - // 处理占位符,转换为最终值 - placeholder: function (placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - constant.RE_PLACEHOLDER.exec(""); - var parts = constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = this._all()[lkey], - params = (parts && parts[2]) || ""; - var pathParts = this.splitPathToArray(key); - - // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = Handler.gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - constant.RE_PLACEHOLDER.exec(""); - if (constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = Handler.placeholder(params[i], obj, templateContext, options); - } - } - - var handle = Random[key] || Random[lkey] || Random[okey]; - switch (util.type(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return Random.pick(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - }, - getValueByKeyPath: function (key, options) { - var originalKey = key; - var keyPathParts = this.splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); - }, - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function (pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - }, - splitPathToArray: function (path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; - }, - }); - - var handler = Handler; - - /* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - - - - - function toJSONSchema(template, name, path /* Internal Use Only */ ) { - // type rule properties items - path = path || []; - var result = { - name: typeof name === 'string' ? name.replace(constant.RE_KEY, '$1') : name, - template: template, - type: util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name) - }; - result.path = path.slice(0); - result.path.push(name === undefined ? 'ROOT' : result.name); - - switch (result.type) { - case 'array': - result.items = []; - util.each(template, function(value, index) { - result.items.push( - toJSONSchema(value, index, result.path) - ); + } + return result; + }, + object: function (options) { + var result = {}, + keys$1, + fnKeys, + key, + parsedKey, + inc, + i; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (options.rule.min != undefined) { + keys$1 = keys(options.template); + keys$1 = shuffle(keys$1); + keys$1 = keys$1.slice(0, options.rule.count); + for (i = 0; i < keys$1.length; i++) { + key = keys$1[i]; + parsedKey = key.replace(Constant.RE_KEY, "$1"); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, }); - break - case 'object': - result.properties = []; - util.each(template, function(value, name) { - result.properties.push( - toJSONSchema(value, name, result.path) - ); + options.context.path.pop(); + options.context.templatePath.pop(); + } + } else { + // 'obj': {} + keys$1 = []; + fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 + for (key in options.template) { + (typeof options.template[key] === "function" ? fnKeys : keys$1).push(key); + } + keys$1 = keys$1.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Util.keys(options.template) + keys.sort(function(a, b) { + var afn = typeof options.template[a] === 'function' + var bfn = typeof options.template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + for (i = 0; i < keys$1.length; i++) { + key = keys$1[i]; + parsedKey = key.replace(Constant.RE_KEY, "$1"); + options.context.path.push(parsedKey); + options.context.templatePath.push(key); + result[parsedKey] = Handler.gen(options.template[key], key, { + path: options.context.path, + templatePath: options.context.templatePath, + currentContext: result, + templateCurrentContext: options.template, + root: options.context.root || result, + templateRoot: options.context.templateRoot || options.template, }); - break + options.context.path.pop(); + options.context.templatePath.pop(); + // 'id|+1': 1 + inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type$1(options.template[key]) === "number") { + options.template[key] += parseInt(inc[2], 10); + } + } + } + return result; + }, + number: function (options) { + var result, parts; + if (options.rule.decimal) { + // float + options.template += ""; + parts = options.template.split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parts[0] = options.rule.range ? options.rule.count : parts[0]; + parts[1] = (parts[1] || "").slice(0, options.rule.dcount); + while (parts[1].length < options.rule.dcount) { + parts[1] += + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + parts[1].length < options.rule.dcount - 1 ? character("number") : character("123456789"); + } + result = parseFloat(parts.join("."), 10); + } else { + // integer + // 'grade1|1-100': 1, + result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; } + return result; + }, + boolean: function (options) { + var result; + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + result = options.rule.parameters ? boolean(options.rule.min, options.rule.max, options.template) : options.template; + return result; + }, + string: function (options) { + var result = "", + i, + placeholders, + ph, + phed; + if (options.template.length) { + // 'foo': '★', + /* jshint -W041 */ + if (options.rule.count == undefined) { + result += options.template; + } - return result + // 'star|1-5': '★', + for (i = 0; i < options.rule.count; i++) { + result += options.template; + } + // 'email|1-10': '@EMAIL, ', + placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + for (i = 0; i < placeholders.length; i++) { + ph = placeholders[i]; - } + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(i--, 1); + continue; + } - var schema$1 = toJSONSchema; + phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); - var schema = schema$1; + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // + result = phed; + break; + } + result = result.replace(ph, phed); + } + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = options.rule.range ? string(options.rule.count) : options.template; + } + return result; + }, + function: function (options) { + // ( context, options ) + return options.template.call(options.context.currentContext, options); + }, + regexp: function (options) { + var source = ""; + + // 'name': /regexp/, + /* jshint -W041 */ + if (options.rule.count == undefined) { + source += options.template.source; // regexp.source + } - /* - ## valid(template, data) + // 'name|1-5': /regexp/, + for (var i = 0; i < options.rule.count; i++) { + source += options.template.source; + } - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) - */ + return Handler$1.gen(parser.parse(source)); + }, +}); + +Handler.extend({ + _all: function () { + var re = {}; + for (var key in Random) re[key.toLowerCase()] = key; + return re; + }, + // 处理占位符,转换为最终值 + placeholder: function (placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var parts = Constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = this._all()[lkey], + params = (parts && parts[2]) || ""; + var pathParts = this.splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = Handler.gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = Handler.placeholder(params[i], obj, templateContext, options); + } + } - function valid$1(template, data) { - var schema$1 = schema(template); - var result = Diff.diff(schema$1, data); - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (type$1(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick$1(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + }, + getValueByKeyPath: function (key, options) { + var originalKey = key; + var keyPathParts = this.splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); + } } - return result - } - /* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 - */ - var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */ ) { - var result = []; + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + // 尚未计算,递归引用数据模板中的属性 if ( - this.name(schema, data, name, result) && - this.type(schema, data, name, result) + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 ) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); + }, + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + normalizePath: function (pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); } + } + return newPathParts; + }, + splitPathToArray: function (path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + }, +}); + +/* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + +function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + var result = { + name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + template, + type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: Parser.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? "ROOT" : result.name); + + switch (result.type) { + case "array": + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case "object": + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } - return result - }, - /* jshint unused:false */ - name: function(schema, data, name, result) { - var length = result.length; - - Assert.equal('name', schema.path, name + '', schema.name + '', result); + return result; +} + +/* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) +*/ + +function valid(template, data) { + var schema = toJSONSchema(template); + var result = Diff.diff(schema, data); + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; +} + +/* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 +*/ +var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + var result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } - return result.length === length - }, - type: function(schema, data, name, result) { - var length = result.length; - - switch (schema.type) { - case 'string': - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(constant.RE_PLACEHOLDER)) return true - break - case 'array': - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + var length = result.length; + + Assert.equal("name", schema.path, name + "", schema.name + "", result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + var length = result.length; + + switch (schema.type) { + case "string": + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case "array": + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; } - break - case 'function': - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true - } - - Assert.equal('type', schema.path, util.type(data), schema.type, result); - - return result.length === length - }, - value: function(schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var templateType = schema.type; - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result); - return result.length === length - case 'string': - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(constant.RE_PLACEHOLDER)) return result.length === length - break + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; } - Assert.equal('value', schema.path, data, schema.template, result); - return result.length === length - } - - // 有生成规则 - var actualRepeatCount; - switch (templateType) { - case 'number': - var parts = (data + '').split('.'); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); - } - } - - break - - case 'boolean': - break - - case 'string': - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + break; + case "function": + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } + Assert.equal("type", schema.path, type$1(data), schema.type, result); - break + return result.length === length; + }, + value: function (schema, data, name, result) { + var length = result.length; - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + var rule = schema.rule; + var templateType = schema.type; + if (templateType === "object" || templateType === "array" || templateType === "function") return true; - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - break + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case "regexp": + Assert.match("value", schema.path, data, schema.template, result); + return result.length === length; + case "string": + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; } + Assert.equal("value", schema.path, data, schema.template, result); + return result.length === length; + } - return result.length === length - }, - properties: function(schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var keys = util.keys(data); - if (!schema.properties) return + // 有生成规则 + var actualRepeatCount; + switch (templateType) { + case "number": + var parts = (data + "").split("."); + parts[0] = +parts[0]; - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result); - } else { - // 有生成规则 + // 整数部分 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result); + Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); } // |count if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result); + Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); } - } - if (result.length !== length) return false - - for (var i = 0; i < keys.length; i++) { - result.push.apply( - result, - this.diff( - function() { - var property; - util.each(schema.properties, function(item /*, index*/ ) { - if (item.name === keys[i]) property = item; - }); - return property || schema.properties[i] - }(), - data[keys[i]], - keys[i] - ) - ); - } + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); + } + } - return result.length === length - }, - items: function(schema, data, name, result) { - var length = result.length; + break; - if (!schema.items) return + case "boolean": + break; - var rule = schema.rule; + case "string": + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements'); - Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements'); + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); } // |count if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length - else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result); + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); } - // |+inc - if (rule.parameters[2]) return result.length === length - } - if (result.length !== length) return false + break; - for (var i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff( - schema.items[i % schema.items.length], - data[i], - i % schema.items.length - ) - ); - } + case "regexp": + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - return result.length === length + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + break; } - }; - - /* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - Expect path.name is less than or equal to expected, but path.name is actual. + return result.length === length; + }, + properties: function (schema, data, name, result) { + var length = result.length; - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. + var rule = schema.rule; + var keys$1 = keys(data); + if (!schema.properties) return; - */ - var Assert = { - message: function(item) { - return (item.message || - '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}') - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', util.isArray(item.path) && item.path.join('.') || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual) - }, - equal: function(type, path, actual, expected, result, message) { - if (actual === expected) return true - switch (type) { - case 'type': - // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true - break + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is equal to', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false - }, - // actual matches expected - match: function(type, path, actual, expected, result, message) { - if (expected.test(actual)) return true - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'matches', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false - }, - notEqual: function(type, path, actual, expected, result, message) { - if (actual !== expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is not equal to', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false - }, - greaterThan: function(type, path, actual, expected, result, message) { - if (actual > expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false - }, - lessThan: function(type, path, actual, expected, result, message) { - if (actual < expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less to', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false - }, - greaterThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual >= expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than or equal to', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false - }, - lessThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual <= expected) return true - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less than or equal to', - message: message - }; - item.message = Assert.message(item); - result.push(item); - return false } - }; - valid$1.Diff = Diff; - valid$1.Assert = Assert; + if (result.length !== length) return false; + + for (var i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + var property; + each(schema.properties, function (item /*, index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i] + ) + ); + } - var valid_1 = valid$1; + return result.length === length; + }, + items: function (schema, data, name, result) { + var length = result.length; - var valid = valid_1; + if (!schema.items) return; - /* global window, document, location, Event, setTimeout */ - /* - ## MockXMLHttpRequest - - 期望的功能: - 1. 完整地覆盖原生 XHR 的行为 - 2. 完整地模拟原生 XHR 的行为 - 3. 在发起请求时,自动检测是否需要拦截 - 4. 如果不必拦截,则执行原生 XHR 的行为 - 5. 如果需要拦截,则执行虚拟 XHR 的行为 - 6. 兼容 XMLHttpRequest 和 ActiveXObject - new window.XMLHttpRequest() - new window.ActiveXObject("Microsoft.XMLHTTP") - - 关键方法的逻辑: - * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。 - * open 此时可以取到 URL,可以决定是否进行拦截。 - * send 此时已经确定了请求方式。 - - 规范: - http://xhr.spec.whatwg.org/ - http://www.w3.org/TR/XMLHttpRequest2/ - - 参考实现: - https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js - https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js - https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js - https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js - https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js - - **需不需要全面重写 XMLHttpRequest?** - http://xhr.spec.whatwg.org/#interface-xmlhttprequest - 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。 - 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。 - - // Event handlers - onloadstart loadstart - onprogress progress - onabort abort - onerror error - onload load - ontimeout timeout - onloadend loadend - onreadystatechange readystatechange - */ + var rule = schema.rule; + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("items length", schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + "items", + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + ); + Assert.lessThanOrEqualTo( + "items", + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + if (result.length !== length) return false; - // 备份原生 XMLHttpRequest - window._XMLHttpRequest = window.XMLHttpRequest; - window._ActiveXObject = window.ActiveXObject; + for (var i = 0; i < data.length; i++) { + result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); + } - /* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + return result.length === length; + }, +}; + +/* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + +*/ +var Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace("{utype}", item.type.toUpperCase()) + .replace("{ltype}", item.type.toLowerCase()) + .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) + .replace("{action}", item.action) + .replace("{expected}", item.expected) + .replace("{actual}", item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case "type": + // 正则模板 === 字符串最终值 + if (expected === "regexp" && actual === "string") return true; + break; + } - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 - */ - try { - new window.Event('custom'); - } catch (exception) { - window.Event = function(type, bubbles, cancelable, detail) { - var event = document.createEvent('CustomEvent'); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is equal to", + message: message, }; - } - - var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4 + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "matches", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is not equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, +}; + +valid.Diff = Diff; +valid.Assert = Assert; + +/* global window, document, location, Event, setTimeout */ + +// 备份原生 XMLHttpRequest +window._XMLHttpRequest = window.XMLHttpRequest; +window._ActiveXObject = window.ActiveXObject; + +/* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 +*/ +try { + new window.Event("custom"); +} catch (exception) { + window.Event = function (type, bubbles, cancelable, detail) { + var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event; }; - - var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' '); - var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' '); - var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' '); - - // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 - var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" +} + +var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4, +}; + +var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); +var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); +var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); + +// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 +var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", +}; + +/* + MockXMLHttpRequest +*/ + +function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {}, }; +} +MockXMLHttpRequest._settings = { + timeout: "10-100", /* - MockXMLHttpRequest - */ - - function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {} - }; - } - - MockXMLHttpRequest._settings = { + timeout: 50, timeout: '10-100', - /* - timeout: 50, - timeout: '10-100', - */ - }; - - MockXMLHttpRequest.setup = function(settings) { - util.extend(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings - }; - - util.extend(MockXMLHttpRequest, XHR_STATES); - util.extend(MockXMLHttpRequest.prototype, XHR_STATES); - - // 标记当前对象为 MockXMLHttpRequest - MockXMLHttpRequest.prototype.mock = true; - - // 是否拦截 Ajax 请求 - MockXMLHttpRequest.prototype.match = false; - - // 初始化 Request 相关的属性和方法 - util.extend(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function(method, url, async, username, password) { - var that = this; - - util.extend(this.custom, { - method: method, + */ +}; + +MockXMLHttpRequest.setup = function (settings) { + extend(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings; +}; + +extend(MockXMLHttpRequest, XHR_STATES); +extend(MockXMLHttpRequest.prototype, XHR_STATES); + +// 标记当前对象为 MockXMLHttpRequest +MockXMLHttpRequest.prototype.mock = true; + +// 是否拦截 Ajax 请求 +MockXMLHttpRequest.prototype.match = false; + +// 初始化 Request 相关的属性和方法 +extend(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function (method, url, async, username, password) { + var that = this; + + extend(this.custom, { + method: method, + url: url, + async: typeof async === "boolean" ? async : true, + username: username, + password: password, + options: { url: url, - async: typeof async === 'boolean' ? async : true, - username: username, - password: password, - options: { - url: url, - type: method - } - }); + type: method, + }, + }); - this.custom.timeout = function(timeout) { - if (typeof timeout === 'number') return timeout - if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10) - if (typeof timeout === 'string' && ~timeout.indexOf('-')) { - var tmp = timeout.split('-'); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min - } - }(MockXMLHttpRequest._settings.timeout); + this.custom.timeout = (function (timeout) { + if (typeof timeout === "number") return timeout; + if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); + if (typeof timeout === "string" && ~timeout.indexOf("-")) { + var tmp = timeout.split("-"); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min; + } + })(MockXMLHttpRequest._settings.timeout); + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options); + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/)); + } - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/ )); + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle); } - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } + // xhr.open() + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); - return + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; + } catch (e) {} } - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ )); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function(name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return - } + return; + } - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += ',' + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return - } + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function (name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value); + return; + } - // 拦截 XHR + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += "," + value; + else requestHeaders[name] = value; + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this; + this.custom.options.body = data; + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data); + return; + } - // X-Requested-With header - this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest'); + // 拦截 XHR - // loadstart The fetch initiates. - this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ )); + // X-Requested-With header + this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); - if (this.custom.async) setTimeout(done, this.custom.timeout); // 异步 - else done(); // 同步 + // loadstart The fetch initiates. + this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )); + if (this.custom.async) setTimeout(done, this.custom.timeout); + // 异步 + else done(); // 同步 - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify( - convert(that.custom.template, that.custom.options), - null, 4 - ); + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )); - that.dispatchEvent(new Event('load' /*, false, false, that*/ )); - that.dispatchEvent(new Event('loadend' /*, false, false, that*/ )); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return - } + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event('abort', false, false, this)); - this.dispatchEvent(new Event('error', false, false, this)); + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.dispatchEvent(new Event("load" /*, false, false, that*/)); + that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); } - }); - - // 初始化 Response 相关的属性和方法 - util.extend(MockXMLHttpRequest.prototype, { - responseURL: '', - status: MockXMLHttpRequest.UNSENT, - statusText: '', - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function(name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name) - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()] - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function() { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders() - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ''; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue - headers += h + ': ' + responseHeaders[h] + '\r\n'; - } - return headers - }, - overrideMimeType: function( /*mime*/ ) {}, - responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: '', - responseXML: null - }); - - // EventTarget - util.extend(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); - } - } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } - - var ontype = 'on' + event.type; - if (this[ontype]) this[ontype](event); + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort(); + return; } - }); - // Inspired by jQuery - function createNativeXMLHttpRequest() { - var isLocal = function() { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]) - }(); - - return window.ActiveXObject ? - (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR() - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event("abort", false, false, this)); + this.dispatchEvent(new Event("error", false, false, this)); + }, +}); + +// 初始化 Response 相关的属性和方法 +extend(MockXMLHttpRequest.prototype, { + responseURL: "", + status: MockXMLHttpRequest.UNSENT, + statusText: "", + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function (name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name); } - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()]; + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function () { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders(); } - } - - - // 查找与请求参数匹配的数据模板:URL,Type - function find(options) { - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; - if ( - (!item.rurl || match(item.rurl, options.url)) && - (!item.rtype || match(item.rtype, options.type.toLowerCase())) - ) { - // console.log('[mock]', options.url, '>', item.rurl) - return item - } + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders; + var headers = ""; + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue; + headers += h + ": " + responseHeaders[h] + "\r\n"; } - - function match(expected, actual) { - if (util.type(expected) === 'string') { - return expected === actual - } - if (util.type(expected) === 'regexp') { - return expected.test(actual) + return headers; + }, + overrideMimeType: function (/*mime*/) {}, + responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: "", + responseXML: null, +}); + +// EventTarget +extend(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || []; + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1); } } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || []; + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event); + } + var ontype = "on" + event.type; + if (this[ontype]) this[ontype](event); + }, +}); + +// Inspired by jQuery +function createNativeXMLHttpRequest() { + var isLocal = (function () { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]); + })(); + + return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} } - // 数据模板 => 响应数据 - function convert(item, options) { - return util.isFunction(item.template) ? - item.template(options) : MockXMLHttpRequest.Mock.mock(item.template) + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } +} + +// 查找与请求参数匹配的数据模板:URL,Type +function find(options) { + for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { + var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; + if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { + // console.log('[mock]', options.url, '>', item.rurl) + return item; + } } - var xhr$1 = MockXMLHttpRequest; - - var xhr = xhr$1; - - /* global require, module, window */ - - - - - - - - var XHR; - if (typeof window !== 'undefined') XHR = xhr; - - /*! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - */ - var Mock = { - Handler: handler, - Random: Random, - Util: util, - XHR: XHR, - RE: regexp, - toJSONSchema: schema, - valid: valid, - heredoc: util.heredoc, - setup: function(settings) { - return XHR.setup(settings) - }, - _mocked: {} - }; - - Mock.version = '1.0.1-beta3'; - - // 避免循环依赖 - if (XHR) XHR.Mock = Mock; - - /* - * Mock.mock( template ) - * Mock.mock( function() ) - * Mock.mock( rurl, template ) - * Mock.mock( rurl, function(options) ) - * Mock.mock( rurl, rtype, template ) - * Mock.mock( rurl, rtype, function(options) ) - - 根据数据模板生成模拟数据。 - */ - Mock.mock = function(rurl, rtype, template) { - // Mock.mock(template) - if (arguments.length === 1) { - return handler.gen(rurl) + function match(expected, actual) { + if (type$1(expected) === "string") { + return expected === actual; } - // Mock.mock(rurl, template) - if (arguments.length === 2) { - template = rtype; - rtype = undefined; + if (type$1(expected) === "regexp") { + return expected.test(actual); } - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - Mock._mocked[rurl + (rtype || '')] = { - rurl: rurl, - rtype: rtype, - template: template - }; - return Mock + } +} + +// 数据模板 => 响应数据 +function convert(item, options) { + return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); +} + +/* global require, module, window */ + +var XHR; +if (typeof window !== "undefined") XHR = MockXMLHttpRequest; + +/*! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com +*/ +var Mock = { + Handler, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked: {}, +}; + +Mock.version = "1.0.1-beta3"; + +// 避免循环依赖 +if (XHR) XHR.Mock = Mock; + +/* + * Mock.mock( template ) + * Mock.mock( function() ) + * Mock.mock( rurl, template ) + * Mock.mock( rurl, function(options) ) + * Mock.mock( rurl, rtype, template ) + * Mock.mock( rurl, rtype, function(options) ) + + 根据数据模板生成模拟数据。 +*/ +Mock.mock = function (rurl, rtype, template) { + // Mock.mock(template) + if (arguments.length === 1) { + return Handler.gen(rurl); + } + // Mock.mock(rurl, template) + if (arguments.length === 2) { + template = rtype; + rtype = undefined; + } + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + (rtype || "")] = { + rurl: rurl, + rtype: rtype, + template: template, }; + return Mock; +}; - var mock = Mock; - - return mock; - -}()); +export default Mock; diff --git a/index.html b/index.html index 3a3bcbbf..64427af5 100644 --- a/index.html +++ b/index.html @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/package.json b/package.json index ec636b4b..3f0b65a0 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "build": "rollup --config rollup.config.build.js", "docs": "docsify serve docs" }, - "dependencies": { - "lodash-es": "^4.17.21" + "lodash-es": "^4.17.21", + "uuid": "^8.3.2" }, "devDependencies": { "@babel/core": "^7.14.3", diff --git a/rollup.config.dev.js b/rollup.config.dev.js index 9b50e560..ad14ebcf 100644 --- a/rollup.config.dev.js +++ b/rollup.config.dev.js @@ -1,6 +1,6 @@ import resolve from "rollup-plugin-node-resolve"; // 帮助寻找node_modules里的包 import commonjs from "rollup-plugin-commonjs"; // 将非ES6语法的包转为ES6可用 - +import liver from "rollup-plugin-livereload"; import json from "@rollup/plugin-json"; export default { @@ -13,7 +13,7 @@ export default { }, { // 打包出口 - dir: "./dist", + file: "./dist/Mock.min.js", format: "iife", name: "Mock", }, @@ -21,8 +21,17 @@ export default { plugins: [ json(), resolve({ + jsnext: true, + main: true, browser: true, }), - commonjs(), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 + commonjs({ + // non-CommonJS modules will be ignored, but you can also + // specifically include/exclude files + include: ["node_modules/**", "./src/**"], // Default: undefined + ignoreGlobal: false, + sourceMap: false, // Default: true + }), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 + liver(), ], }; diff --git a/src/mock.js b/src/mock.js index e2b3f1d9..e73e1b6c 100644 --- a/src/mock.js +++ b/src/mock.js @@ -1,13 +1,15 @@ /* global require, module, window */ -var Handler = require('./mock/handler') -var Util = require('./mock/util') -var Random = require('./mock/random') -var RE = require('./mock/regexp') -var toJSONSchema = require('./mock/schema') -var valid = require('./mock/valid') +import Handler from "./mock/handler.js"; +import * as Util from "./mock/util.js"; +import * as Random from "./mock/random/index.js"; +import * as RE from "./mock/regexp/index.js"; +import { toJSONSchema } from "./mock/schema/index.js"; +import { valid } from "./mock/valid/index.js"; -var XHR -if (typeof window !== 'undefined') XHR = require('./mock/xhr') +import { MockXMLHttpRequest } from "./mock/xhr/index.js"; + +var XHR; +if (typeof window !== "undefined") XHR = MockXMLHttpRequest; /*! Mock - 模拟请求 & 模拟数据 @@ -15,24 +17,24 @@ if (typeof window !== 'undefined') XHR = require('./mock/xhr') 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com */ var Mock = { - Handler: Handler, - Random: Random, - Util: Util, - XHR: XHR, - RE: RE, - toJSONSchema: toJSONSchema, - valid: valid, + Handler, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, heredoc: Util.heredoc, - setup: function(settings) { - return XHR.setup(settings) + setup: function (settings) { + return XHR.setup(settings); }, - _mocked: {} -} + _mocked: {}, +}; -Mock.version = '1.0.1-beta3' +Mock.version = "1.0.1-beta3"; // 避免循环依赖 -if (XHR) XHR.Mock = Mock +if (XHR) XHR.Mock = Mock; /* * Mock.mock( template ) @@ -44,24 +46,24 @@ if (XHR) XHR.Mock = Mock 根据数据模板生成模拟数据。 */ -Mock.mock = function(rurl, rtype, template) { +Mock.mock = function (rurl, rtype, template) { // Mock.mock(template) if (arguments.length === 1) { - return Handler.gen(rurl) + return Handler.gen(rurl); } // Mock.mock(rurl, template) if (arguments.length === 2) { - template = rtype - rtype = undefined + template = rtype; + rtype = undefined; } // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR - Mock._mocked[rurl + (rtype || '')] = { + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + (rtype || "")] = { rurl: rurl, rtype: rtype, - template: template - } - return Mock -} + template: template, + }; + return Mock; +}; -module.exports = Mock \ No newline at end of file +export default Mock; diff --git a/src/mock/constant.js b/src/mock/constant.js index 3a83fa55..5a49fabb 100644 --- a/src/mock/constant.js +++ b/src/mock/constant.js @@ -22,12 +22,12 @@ #26 生成规则 支持 负数,例如 number|-100-100 */ -module.exports = { +export default { GUID: 1, RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g // RE_INDEX: /^index$/, // RE_KEY: /^key$/ -} \ No newline at end of file +}; diff --git a/src/mock/handler.js b/src/mock/handler.js index a661e6b4..8599594e 100644 --- a/src/mock/handler.js +++ b/src/mock/handler.js @@ -31,11 +31,12 @@ */ -var Constant = require("./constant"); -var Util = require("./util"); -var Parser = require("./parser"); -var Random = require("./random"); -var RE = require("./regexp"); +import Constant from "./constant.js"; +import * as Util from "./util.js"; +import Parser from "./parser.js"; +import { bool, character, pick, shuffle, string } from "./random/index.js"; +import * as Random from "./random/index.js"; +import * as RE from "./regexp/index.js"; var Handler = { extend: Util.extend, @@ -136,7 +137,7 @@ Handler.extend({ // fix #17 options.context.path.push(options.name); options.context.templatePath.push(options.name); - result = Random.pick( + result = pick( Handler.gen(options.template, undefined, { path: options.context.path, templatePath: options.context.templatePath, @@ -207,7 +208,7 @@ Handler.extend({ /* jshint -W041 */ if (options.rule.min != undefined) { keys = Util.keys(options.template); - keys = Random.shuffle(keys); + keys = shuffle(keys); keys = keys.slice(0, options.rule.count); for (i = 0; i < keys.length; i++) { key = keys[i]; @@ -285,7 +286,7 @@ Handler.extend({ while (parts[1].length < options.rule.dcount) { parts[1] += // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - parts[1].length < options.rule.dcount - 1 ? Random.character("number") : Random.character("123456789"); + parts[1].length < options.rule.dcount - 1 ? character("number") : character("123456789"); } result = parseFloat(parts.join("."), 10); } else { @@ -299,7 +300,7 @@ Handler.extend({ var result; // 'prop|multiple': false, 当前值是相反值的概率倍数 // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? Random.bool(options.rule.min, options.rule.max, options.template) : options.template; + result = options.rule.parameters ? bool(options.rule.min, options.rule.max, options.template) : options.template; return result; }, string: function (options) { @@ -352,7 +353,7 @@ Handler.extend({ } else { // 'ASCII|1-10': '', // 'ASCII': '', - result = options.rule.range ? Random.string(options.rule.count) : options.template; + result = options.rule.range ? string(options.rule.count) : options.template; } return result; }, @@ -454,7 +455,7 @@ Handler.extend({ switch (Util.type(handle)) { case "array": // 自动从数组中取一个,例如 @areas - return Random.pick(handle); + return pick(handle); case "function": // 执行占位符方法(大多数情况) handle.options = options; @@ -534,4 +535,4 @@ Handler.extend({ }, }); -module.exports = Handler; +export default Handler; diff --git a/src/mock/parser.js b/src/mock/parser.js index 1615ad59..7deebb4a 100644 --- a/src/mock/parser.js +++ b/src/mock/parser.js @@ -22,11 +22,11 @@ ``` */ -var Constant = require("./constant"); -var Random = require("./random"); +import Constant from "./constant.js"; +import { integer } from "./random/index.js"; /* jshint -W041 */ -module.exports = { +export default { parse: function (name) { name = name == undefined ? "" : name + ""; @@ -36,36 +36,33 @@ module.exports = { var min = range && range[1] && parseInt(range[1], 10); // || 1 var max = range && range[2] && parseInt(range[2], 10); // || 1 // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || Random.integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : Random.integer(min, max)) : undefined; + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || Random.integer(dmin, dmax) : undefined; + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; var result = { // 1 name, 2 inc, 3 range, 4 decimal - parameters: parameters, + parameters, // 1 min, 2 max - range: range, - min: min, - max: max, + range, + min, + max, // min-max - count: count, + count, // 是否有 decimal - decimal: decimal, - dmin: dmin, - dmax: dmax, - // dmin-dimax - dcount: dcount, + decimal, + dmin, + dmax, + dcount, // dmin-dimax }; - for (var r in result) { - if (result[r] != undefined) return result; - } - + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; return {}; }, }; diff --git a/src/mock/random/address_ch.json b/src/mock/random/address_ch.json index fdc833b1..b2e84422 100644 --- a/src/mock/random/address_ch.json +++ b/src/mock/random/address_ch.json @@ -2476,7 +2476,7 @@ "469034": "陵水黎族自治县", "469035": "保亭黎族苗族自治县", "469036": "琼中黎族苗族自治县", - "471005": "其它区", + "500000": "重庆", "500100": "重庆市", "500101": "万州区", diff --git a/src/mock/random/address_dict.js b/src/mock/random/address_dict.js index a1562cd6..bfcc7f2f 100644 --- a/src/mock/random/address_dict.js +++ b/src/mock/random/address_dict.js @@ -58,17 +58,18 @@ function createTree(list) { }); return result; } +const ids = Object.keys(DICT); +function isInIds(what) {} // 转化数组内对象的表现形式 const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = - id.slice(2, 6) === "0000" - ? undefined - : id.slice(4, 6) == "00" - ? id.slice(0, 2) + "0000" - : id.slice(0, 4) + "00"; + var pid = id.slice(2, 6) === "0000" ? undefined : id.slice(4, 6) == "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!(pid in ids)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + "0000"; + } return { - id: id, - pid: pid, + id, + pid, name: value, }; }); diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js index 70688465..eb1ea1e4 100644 --- a/src/mock/random/basic.js +++ b/src/mock/random/basic.js @@ -1,14 +1,9 @@ /* ## Basics */ -export { integer, natural } from "./basic/number.js"; -export { boolean } from "./basic/boolean.js"; -export { character } from "./basic/character.js"; -export { string } from "./basic/string.js"; -export { range } from "./basic/range.js"; -export { float } from "./basic/float.js"; -const bool = boolean; -const int = integer; -const char = character; -const str = string; -export { bool, int, char, str }; +export * from "./basic/number.js"; +export * from "./basic/boolean.js"; +export * from "./basic/character.js"; +export * from "./basic/string.js"; +export * from "./basic/range.js"; +export * from "./basic/float.js"; diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js index 195130b0..05c3e8a6 100644 --- a/src/mock/random/basic/boolean.js +++ b/src/mock/random/basic/boolean.js @@ -7,4 +7,4 @@ const boolean = function (min, max, cur) { } return Math.random() >= 0.5; }; -export { boolean }; +export { boolean, boolean as bool }; diff --git a/src/mock/random/basic/character.js b/src/mock/random/basic/character.js index af0ccb21..ee9f3264 100644 --- a/src/mock/random/basic/character.js +++ b/src/mock/random/basic/character.js @@ -14,4 +14,4 @@ const character = function (pool = "default") { } return pool.charAt(natural(0, pool.length - 1)); }; -export { character }; +export { character, character as char }; diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index c1e44ab7..829ff31e 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -14,4 +14,4 @@ const integer = function (min, max) { const natural = function (min, max) { return Math.abs(integer(min, max)); }; -export { integer, isNumber, random, natural }; +export { integer, isNumber, random, natural, integer as int }; diff --git a/src/mock/random/basic/string.js b/src/mock/random/basic/string.js index de54d7c2..37d73d20 100644 --- a/src/mock/random/basic/string.js +++ b/src/mock/random/basic/string.js @@ -27,4 +27,4 @@ const string = function (...args) { } return [...Array(len).keys()].map((i) => character(pool)).join(""); }; -export { string }; +export { string, string as str }; diff --git a/src/mock/random/brandColors.json b/src/mock/random/brandColors.json new file mode 100644 index 00000000..a190b124 --- /dev/null +++ b/src/mock/random/brandColors.json @@ -0,0 +1 @@ +{"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33","Addvocate":"#ff6138","Adobe":"#ff0000","Aim":"#fcd20b","Amazon":"#e47911","Android":"#a4c639","Angie's List":"#7fbb00","AOL":"#0060a3","Atlassian":"#003366","Behance":"#053eff","Big Cartel":"#97b538","bitly":"#ee6123","Blogger":"#fc4f08","Boeing":"#0039a6","Booking.com":"#003580","Carbonmade":"#613854","Cheddar":"#ff7243","Code School":"#3d4944","Delicious":"#205cc0","Dell":"#3287c1","Designmoo":"#e54a4f","Deviantart":"#4e6252","Designer News":"#2d72da","Devour":"#fd0001","DEWALT":"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132","Dribbble":"#ea4c89","Dropbox":"#3d9ae8","Drupal":"#0c76ab","Dunked":"#2a323a","eBay":"#89c507","Ember":"#f05e1b","Engadget":"#00bdf6","Envato":"#528036","Etsy":"#eb6d20","Evernote":"#5ba525","Fab.com":"#dd0017","Facebook":"#3b5998","Firefox":"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084","Forrst":"#5b9a68","Foursquare":"#25a0ca","Garmin":"#007cc3","GetGlue":"#2d75a2","Gimmebar":"#f70078","GitHub":"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39","Grooveshark":"#f77f00","Groupon":"#82b548","Hacker News":"#ff6600","HelloWallet":"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5","HootSuite":"#003366","Houzz":"#73ba37","HTML5":"#ec6231","IKEA":"#ffcc33","IMDb":"#f3ce13","Instagram":"#3f729b","Intel":"#0071c5","Intuit":"#365ebf","Kickstarter":"#76cc1e","kippt":"#e03500","Kodery":"#00af81","LastFM":"#c3000d","LinkedIn":"#0e76a8","Livestream":"#cf0005","Lumo":"#576396","Mixpanel":"#a086d3","Meetup":"#e51937","Nokia":"#183693","NVIDIA":"#76b900","Opera":"#cc0f16","Path":"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf","Pinboard":"#0000e6","Pinterest":"#c8232c","PlayStation":"#665cbe","Pocket":"#ee4056","Prezi":"#318bff","Pusha":"#0f71b4","Quora":"#a82400","QUOTE.fm":"#66ceff","Rdio":"#008fd5","Readability":"#9c0000","Red Hat":"#cc0000","Resource":"#7eb400","Rockpack":"#0ba6ab","Roon":"#62b0d9","RSS":"#ee802f","Salesforce":"#1798c1","Samsung":"#0c4da2","Shopify":"#96bf48","Skype":"#00aff0","Snagajob":"#f47a20","Softonic":"#008ace","SoundCloud":"#ff7700","Space Box":"#f86960","Spotify":"#81b71a","Sprint":"#fee100","Squarespace":"#121212","StackOverflow":"#ef8236","Staples":"#cc0000","Status Chart":"#d7584f","Stripe":"#008cdd","StudyBlue":"#00afe1","StumbleUpon":"#f74425","T-Mobile":"#ea0a8e","Technorati":"#40a800","The Next Web":"#ef4423","Treehouse":"#5cb868","Trulia":"#5eab1f","Tumblr":"#34526f","Twitch.tv":"#6441a5","Twitter":"#00acee","TYPO3":"#ff8700","Ubuntu":"#dd4814","Ustream":"#3388ff","Verizon":"#ef1d1d","Vimeo":"#86c9ef","Vine":"#00a478","Virb":"#06afd8","Virgin Media":"#cc0000","Wooga":"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646","Wunderlist":"#2b88d9","XBOX":"#9bc848","XING":"#126567","Yahoo!":"#720e9e","Yandex":"#ffcc00","Yelp":"#c41200","YouTube":"#c4302b","Zalongo":"#5498dc","Zendesk":"#78a300","Zerply":"#9dcc7a","Zootool":"#5e8b1d"} \ No newline at end of file diff --git a/src/mock/random/date.js b/src/mock/random/date.js index 9d32bb9e..128b2e23 100644 --- a/src/mock/random/date.js +++ b/src/mock/random/date.js @@ -4,7 +4,10 @@ import { integer } from "./basic/number.js"; // 随机生成整数的函数 import _patternLetters from "./date/_patternLetters.js"; const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - +// 返回一个随机的日期字符串。 +function date(format = "yyyy-MM-dd") { + return this._formatDate(this._randomDate(), format); +} export default { // 日期占位符集合。 _patternLetters, @@ -12,27 +15,17 @@ export default { _rformat: reRule, // 格式化日期。 _formatDate: function (date, format) { - return format.replace( - this._rformat, - function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = patternLetters[flag]; - return typeof targetPattern === "function" - ? targetPattern(date) - : targetPattern in patternLetters - ? creatNewSubString($0, targetPattern) - : date[targetPattern](); - } - ); + return format.replace(this._rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); }, // 生成一个随机的 Date 对象。 _randomDate: function (min = new Date(0), max = new Date()) { return new Date(integer(min.getTime(), max.getTime())); }, - // 返回一个随机的日期字符串。 - date: function (format = "yyyy-MM-dd") { - return this._formatDate(this._randomDate(), format); - }, + // 返回一个随机的时间字符串。 time: function (format = "HH:mm:ss") { return this._formatDate(this._randomDate(), format); @@ -41,6 +34,7 @@ export default { datetime: function (format = "yyyy-MM-dd HH:mm:ss") { return this._formatDate(this._randomDate(), format); }, + date, // 返回当前的日期和时间字符串。 now: function (unit, format) { @@ -83,8 +77,8 @@ export default { }, // KonghaYao 新增函数:生成固定时间段的时间戳 timestamp: function (min, max) { - if (min instanceof Date && max instanceof Date) - return this._randomDate(min, max); + if (min instanceof Date && max instanceof Date) return this._randomDate(min, max); return this._randomDate(); }, }; +export { date }; diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 7001ceaf..9da00371 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -2,256 +2,65 @@ /* ## Image */ -export default { - // 常见的广告宽高 - _adSize: [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600", - ], - // 常见的屏幕宽高 - _screenSize: [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600", - ], - // 常见的视频宽高 - _videoSize: ["720x480", "768x576", "1280x720", "1920x1080"], - /* - 生成一个随机的图片地址。 - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - image: function (...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } +import size from "./image.json"; +let { _adSize, _screenSize, _videoSize } = size; - // Random.image() - if (!size) size = this.pick(this._adSize); +/* + BrandColors + http://brandcolors.net/ + A collection of major brand color codes curated by Galen Gidman. + 大牌公司的颜色集合 - if (background && ~background.indexOf("#")) - background = background.slice(1); - if (foreground && ~foreground.indexOf("#")) - foreground = foreground.slice(1); + // 获取品牌和颜色 + $('h2').each(function(index, item){ + item = $(item) + console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') + }) +*/ +import _brandColors from "./brandColors.json"; +const _brandNames = Object.keys(_brandColors); - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return ( - "http://dummyimage.com/" + - size + - (background ? "/" + background : "") + - (foreground ? "/" + foreground : "") + - (format ? "." + format : "") + - (text ? "&text=" + text : "") - ); - }, - img: function () { - return this.image.apply(this, arguments); - }, +/* + 生成一个随机的图片地址。 - /* - BrandColors - http://brandcolors.net/ - A collection of major brand color codes curated by Galen Gidman. - 大牌公司的颜色集合 + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 +*/ +function image(...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } - // 获取品牌和颜色 - $('h2').each(function(index, item){ - item = $(item) - console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') - }) - */ - _brandColors: { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: "#ff6138", - Adobe: "#ff0000", - Aim: "#fcd20b", - Amazon: "#e47911", - Android: "#a4c639", - "Angie's List": "#7fbb00", - AOL: "#0060a3", - Atlassian: "#003366", - Behance: "#053eff", - "Big Cartel": "#97b538", - bitly: "#ee6123", - Blogger: "#fc4f08", - Boeing: "#0039a6", - "Booking.com": "#003580", - Carbonmade: "#613854", - Cheddar: "#ff7243", - "Code School": "#3d4944", - Delicious: "#205cc0", - Dell: "#3287c1", - Designmoo: "#e54a4f", - Deviantart: "#4e6252", - "Designer News": "#2d72da", - Devour: "#fd0001", - DEWALT: "#febd17", - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: "#ea4c89", - Dropbox: "#3d9ae8", - Drupal: "#0c76ab", - Dunked: "#2a323a", - eBay: "#89c507", - Ember: "#f05e1b", - Engadget: "#00bdf6", - Envato: "#528036", - Etsy: "#eb6d20", - Evernote: "#5ba525", - "Fab.com": "#dd0017", - Facebook: "#3b5998", - Firefox: "#e66000", - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: "#5b9a68", - Foursquare: "#25a0ca", - Garmin: "#007cc3", - GetGlue: "#2d75a2", - Gimmebar: "#f70078", - GitHub: "#171515", - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: "#f77f00", - Groupon: "#82b548", - "Hacker News": "#ff6600", - HelloWallet: "#0085ca", - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: "#003366", - Houzz: "#73ba37", - HTML5: "#ec6231", - IKEA: "#ffcc33", - IMDb: "#f3ce13", - Instagram: "#3f729b", - Intel: "#0071c5", - Intuit: "#365ebf", - Kickstarter: "#76cc1e", - kippt: "#e03500", - Kodery: "#00af81", - LastFM: "#c3000d", - LinkedIn: "#0e76a8", - Livestream: "#cf0005", - Lumo: "#576396", - Mixpanel: "#a086d3", - Meetup: "#e51937", - Nokia: "#183693", - NVIDIA: "#76b900", - Opera: "#cc0f16", - Path: "#e41f11", - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: "#0000e6", - Pinterest: "#c8232c", - PlayStation: "#665cbe", - Pocket: "#ee4056", - Prezi: "#318bff", - Pusha: "#0f71b4", - Quora: "#a82400", - "QUOTE.fm": "#66ceff", - Rdio: "#008fd5", - Readability: "#9c0000", - "Red Hat": "#cc0000", - Resource: "#7eb400", - Rockpack: "#0ba6ab", - Roon: "#62b0d9", - RSS: "#ee802f", - Salesforce: "#1798c1", - Samsung: "#0c4da2", - Shopify: "#96bf48", - Skype: "#00aff0", - Snagajob: "#f47a20", - Softonic: "#008ace", - SoundCloud: "#ff7700", - "Space Box": "#f86960", - Spotify: "#81b71a", - Sprint: "#fee100", - Squarespace: "#121212", - StackOverflow: "#ef8236", - Staples: "#cc0000", - "Status Chart": "#d7584f", - Stripe: "#008cdd", - StudyBlue: "#00afe1", - StumbleUpon: "#f74425", - "T-Mobile": "#ea0a8e", - Technorati: "#40a800", - "The Next Web": "#ef4423", - Treehouse: "#5cb868", - Trulia: "#5eab1f", - Tumblr: "#34526f", - "Twitch.tv": "#6441a5", - Twitter: "#00acee", - TYPO3: "#ff8700", - Ubuntu: "#dd4814", - Ustream: "#3388ff", - Verizon: "#ef1d1d", - Vimeo: "#86c9ef", - Vine: "#00a478", - Virb: "#06afd8", - "Virgin Media": "#cc0000", - Wooga: "#5b009c", - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: "#2b88d9", - XBOX: "#9bc848", - XING: "#126567", - "Yahoo!": "#720e9e", - Yandex: "#ffcc00", - Yelp: "#c41200", - YouTube: "#c4302b", - Zalongo: "#5498dc", - Zendesk: "#78a300", - Zerply: "#9dcc7a", - Zootool: "#5e8b1d", - }, - _brandNames: function () { - var brands = []; - for (var b in this._brandColors) { - brands.push(b); - } - return brands; - }, + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = foreground.replace(/^#/, ""); + background = background.replace(/^#/, ""); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${backgroound ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; +} + +export default { + ...size, + image, + img: image, + + _brandColors, + _brandNames, /* 生成一段随机的 Base64 图片编码。 @@ -284,14 +93,14 @@ export default { var ctx = canvas && canvas.getContext && canvas.getContext("2d"); if (!canvas || !ctx) return ""; - if (!size) size = this.pick(this._adSize); + if (!size) size = pick(_adSize); text = text !== undefined ? text : size; size = size.split("x"); var width = parseInt(size[0], 10), height = parseInt(size[1], 10), - background = this._brandColors[this.pick(this._brandNames())], + background = _brandColors[pick(_brandNames)], foreground = "#FFF", text_height = 14, font = "sans-serif"; diff --git a/src/mock/random/image.json b/src/mock/random/image.json new file mode 100644 index 00000000..da2bab08 --- /dev/null +++ b/src/mock/random/image.json @@ -0,0 +1,7 @@ +{ + "_adSize": ["300x250", "250x250", "240x400", "336x280", "180x150", "720x300", "468x60", "234x60", "88x31", "120x90", "120x60", "120x240", "125x125", "728x90", "160x600", "120x600", "300x600"], + + "_screenSize": ["320x200", "320x240", "640x480", "800x480", "800x480", "1024x600", "1024x768", "1280x800", "1440x900", "1920x1200", "2560x1600"], + + "_videoSize": ["720x480", "768x576", "1280x720", "1920x1080"] +} \ No newline at end of file diff --git a/src/mock/random/index.js b/src/mock/random/index.js index b4963132..6eae7d57 100644 --- a/src/mock/random/index.js +++ b/src/mock/random/index.js @@ -4,17 +4,15 @@ 工具类,用于生成各种随机数据。 */ -import * as basic from "./basic"; -import * as color from "./color"; -import * as name from "./name"; -import * as helper from "./helper"; -import * as mise from "./misc"; +export * from "./basic"; +export * from "./color"; +export * from "./name"; +export * from "./helper"; +export * from "./misc"; +export * from "./text"; +export * from "./web"; import date from "./date"; import image from "./image"; -import text from "./text"; -import web from "./web"; import address from "./address"; -const Random = Object.assign({}, basic, date, image, color, text, name, web, address, helper, mise); -export default Random; -export { Random }; +export { date, image, address }; diff --git a/src/mock/random/misc/id.js b/src/mock/random/misc/id.js index 8afb77a6..a52e7960 100644 --- a/src/mock/random/misc/id.js +++ b/src/mock/random/misc/id.js @@ -1,7 +1,7 @@ -import DICT from "./address_dict.js"; -import { pick } from "./helper.js"; -import { date } from "./date.js"; -import { string } from "./basic/string.js"; +import DICT from "../address_dict.js"; +import { pick } from "../helper.js"; +import { date } from "../date.js"; +import { string } from "../basic.js"; /* 随机生成一个 18 位身份证。 diff --git a/src/mock/random/name.js b/src/mock/random/name.js index 87d53ecb..03516f4e 100644 --- a/src/mock/random/name.js +++ b/src/mock/random/name.js @@ -3,8 +3,8 @@ [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) */ -import name from "./name.json"; -let { firstName, lastName, cfirstName, clastName } = name; +import Name from "./name.json"; +let { firstName, lastName, cfirstName, clastName } = Name; import { pick } from "./helper.js"; // 随机生成一个常见的英文名。 function first() { diff --git a/src/mock/random/text.js b/src/mock/random/text.js index 98fb5974..7dfb47be 100644 --- a/src/mock/random/text.js +++ b/src/mock/random/text.js @@ -3,119 +3,5 @@ http://www.lipsum.com/ */ -var Basic = require('./basic') -var Helper = require('./helper') - -function range(defaultMin, defaultMax, min, max) { - return min === undefined ? Basic.natural(defaultMin, defaultMax) : // () - max === undefined ? min : // ( len ) - Basic.natural(parseInt(min, 10), parseInt(max, 10)) // ( min, max ) -} - -module.exports = { - // 随机生成一段文本。 - paragraph: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.sentence()) - } - return result.join(' ') - }, - // - cparagraph: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.csentence()) - } - return result.join('') - }, - // 随机生成一个句子,第一个单词的首字母大写。 - sentence: function(min, max) { - var len = range(12, 18, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.word()) - } - return Helper.capitalize(result.join(' ')) + '.' - }, - // 随机生成一个中文句子。 - csentence: function(min, max) { - var len = range(12, 18, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.cword()) - } - - return result.join('') + '。' - }, - // 随机生成一个单词。 - word: function(min, max) { - var len = range(3, 10, min, max) - var result = ''; - for (var i = 0; i < len; i++) { - result += Basic.character('lower') - } - return result - }, - // 随机生成一个或多个汉字。 - cword: function(pool, min, max) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞' - - var len - switch (arguments.length) { - case 0: // () - pool = DICT_KANZI - len = 1 - break - case 1: // ( pool ) - if (typeof arguments[0] === 'string') { - len = 1 - } else { - // ( length ) - len = pool - pool = DICT_KANZI - } - break - case 2: - // ( pool, length ) - if (typeof arguments[0] === 'string') { - len = min - } else { - // ( min, max ) - len = this.natural(pool, min) - pool = DICT_KANZI - } - break - case 3: - len = this.natural(min, max) - break - } - - var result = '' - for (var i = 0; i < len; i++) { - result += pool.charAt(this.natural(0, pool.length - 1)) - } - return result - }, - // 随机生成一句标题,其中每个单词的首字母大写。 - title: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.capitalize(this.word())) - } - return result.join(' ') - }, - // 随机生成一句中文标题。 - ctitle: function(min, max) { - var len = range(3, 7, min, max) - var result = [] - for (var i = 0; i < len; i++) { - result.push(this.cword()) - } - return result.join('') - } -} \ No newline at end of file +export { paragraph, word, sentence, title } from "./text/text_en.js"; +export { ctitle, csentence, cparagraph, cword } from "./text/text-ch.js"; diff --git a/src/mock/random/text/range.js b/src/mock/random/text/range.js new file mode 100644 index 00000000..348582d2 --- /dev/null +++ b/src/mock/random/text/range.js @@ -0,0 +1,8 @@ +import { natural } from "../basic.js"; +export default function range(defaultMin, defaultMax, min, max) { + return min === undefined + ? natural(defaultMin, defaultMax) // () + : max === undefined + ? min // ( len ) + : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) +} diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js new file mode 100644 index 00000000..4e037c79 --- /dev/null +++ b/src/mock/random/text/text-ch.js @@ -0,0 +1,59 @@ +import { natural } from "../basic.js"; +import range from "./range.js"; + +function cparagraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => csentence()).join(""); +} + +// 随机生成一个中文句子。 +function csentence(min, max) { + var len = range(12, 18, min, max); + return [...Array(len)].map(() => cword()).join("") + "。"; +} +// 随机生成一句中文标题。 +function ctitle(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => cword()).join(""); +} +// 随机生成一个或多个汉字。 +function cword(...args) { + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + var DICT_KANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; + + var len = 1, + pool = DICT_KANZI, + min, + max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === "string") { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(pool, min); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len)].map(() => pool.charAt(natural(0, pool.length - 1))).join(""); +} + +export { ctitle, csentence, cparagraph, cword }; diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js new file mode 100644 index 00000000..01b55190 --- /dev/null +++ b/src/mock/random/text/text_en.js @@ -0,0 +1,28 @@ +import range from "./range.js"; +import { character } from "../basic.js"; + +// 随机生成一个句子,第一个单词的首字母大写。 +function sentence(min, max) { + var len = range(12, 18, min, max); + let string = [...Array(len)].map(() => word()).join(""); + return capitalize(string) + "."; +} + +// 随机生成一个单词。 +function word(min, max) { + var len = range(3, 10, min, max); + return [...Array(len)].map(() => character("lower")).join(""); +} + +// 随机生成一段文本。 +function paragraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map((i) => sentence()); +} + +// 随机生成一句标题,其中每个单词的首字母大写。 +function title(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => capitalize(word())).join(""); +} +export { word, paragraph, sentence, title }; diff --git a/src/mock/random/web.js b/src/mock/random/web.js index d02943d8..7bc9c174 100644 --- a/src/mock/random/web.js +++ b/src/mock/random/web.js @@ -1,76 +1,4 @@ /* ## Web */ -module.exports = { - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - url: function(protocol, host) { - return (protocol || this.protocol()) + '://' + // protocol? - (host || this.domain()) + // host? - '/' + this.word() - }, - // 随机生成一个 URL 协议。 - protocol: function() { - return this.pick( - // 协议簇 - 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' ') - ) - }, - // 随机生成一个域名。 - domain: function(tld) { - return this.word() + '.' + (tld || this.tld()) - }, - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - tld: function() { // Top Level Domain - return this.pick( - ( - // 域名后缀 - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' - ).split(' ') - ) - }, - // 随机生成一个邮件地址。 - email: function(domain) { - return this.character('lower') + '.' + this.word() + '@' + - ( - domain || - (this.word() + '.' + this.tld()) - ) - // return this.character('lower') + '.' + this.last().toLowerCase() + '@' + this.last().toLowerCase() + '.' + this.tld() - // return this.word() + '@' + (domain || this.domain()) - }, - // 随机生成一个 IP 地址。 - ip: function() { - return this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) + '.' + - this.natural(0, 255) - } -} \ No newline at end of file +export { protocol, domain, tld, email, ip, url } from "./web/web_func.js"; diff --git a/src/mock/random/web/web_dict.js b/src/mock/random/web/web_dict.js new file mode 100644 index 00000000..578122b9 --- /dev/null +++ b/src/mock/random/web/web_dict.js @@ -0,0 +1,15 @@ +// 协议簇 +const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); +const tlds = // 域名后缀 +( + "com net org edu gov int mil cn " + + // 国内域名 + "com.cn net.cn gov.cn org.cn " + + // 中文国内域名 + "中国 中国互联.公司 中国互联.网络 " + + // 新国际域名 + "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + // 世界各国域名后缀 + "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" +).split(" "); +export { protocols, tlds }; diff --git a/src/mock/random/web/web_func.js b/src/mock/random/web/web_func.js new file mode 100644 index 00000000..0ff8d762 --- /dev/null +++ b/src/mock/random/web/web_func.js @@ -0,0 +1,53 @@ +import { pick } from "../helper.js"; +import { word } from "../text.js"; +import { protocols } from "./web_dict.js"; +/* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers +*/ +export function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; +} + +// 随机生成一个 URL 协议。 +export function protocol() { + return pick(protocols); +} +// 随机生成一个域名。 +export function domain(Tld) { + return `${word()}.${Tld || tld()}`; +} +/* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) +*/ +export function tld() { + // Top Level Domain + return pick(tlds); +} + +import { character, natural } from "../basic.js"; + +// 随机生成一个邮件地址。 +export function email(domain) { + return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; +} +// 随机生成一个 IP 地址。 +export function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join("."); +} diff --git a/src/mock/regexp/handler.js b/src/mock/regexp/handler.js index 3671047d..282116b3 100644 --- a/src/mock/regexp/handler.js +++ b/src/mock/regexp/handler.js @@ -53,8 +53,8 @@ null-character \o NUL 字符 */ -var Util = require("../util"); -var Random = require("../random"); +import * as Util from "../util.js"; +import { character, pick, boolean, integer } from "../random/index.js"; /* */ @@ -124,12 +124,9 @@ var CHARACTER_CLASSES = { "\\D": LOWER + UPPER + OTHER, }; +// 从 from 到 to 包含两个端点的字符串 function ascii(from, to) { - var result = ""; - for (var i = from; i <= to; i++) { - result += String.fromCharCode(i); - } - return result; + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); } // var ast = RegExpParser.parse(regexp.source) @@ -148,7 +145,7 @@ Handler.extend({ case "end": return ""; case "any-character": - return Random.character(); + return character(); case "backspace": return ""; case "word-boundary": // TODO @@ -156,9 +153,9 @@ Handler.extend({ case "non-word-boundary": // TODO break; case "digit": - return Random.pick(NUMBER.split("")); + return pick(NUMBER.split("")); case "non-digit": - return Random.pick((LOWER + UPPER + OTHER).split("")); + return pick((LOWER + UPPER + OTHER).split("")); case "form-feed": break; case "line-feed": @@ -166,17 +163,17 @@ Handler.extend({ case "carriage-return": break; case "white-space": - return Random.pick(SPACE.split("")); + return pick(SPACE.split("")); case "non-white-space": - return Random.pick((LOWER + UPPER + NUMBER).split("")); + return pick((LOWER + UPPER + NUMBER).split("")); case "tab": break; case "vertical-tab": break; case "word": // \w [a-zA-Z0-9] - return Random.pick((LOWER + UPPER + NUMBER).split("")); + return pick((LOWER + UPPER + NUMBER).split("")); case "non-word": // \W [^a-zA-Z0-9] - return Random.pick(OTHER.replace("_", "").split("")); + return pick(OTHER.replace("_", "").split("")); case "null-character": break; } @@ -197,7 +194,7 @@ Handler.extend({ */ alternate: function (node, result, cache) { // node.left/right {} - return this.gen(Random.boolean() ? node.left : node.right, result, cache); + return this.gen(boolean() ? node.left : node.right, result, cache); }, /* { @@ -281,8 +278,8 @@ Handler.extend({ */ quantifier: function (node, result, cache) { var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + Random.integer(3, 7); - return Random.integer(min, max); + var max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); }, /* @@ -292,7 +289,7 @@ Handler.extend({ if (node.invert) return this["invert-charset"](node, result, cache); // node.body [] - var literal = Random.pick(node.body); + var literal = pick(node.body); return this.gen(literal, result, cache); }, "invert-charset": function (node, result, cache) { @@ -319,13 +316,13 @@ Handler.extend({ } } } - return Random.pick(pool.split("")); + return pick(pool.split("")); }, range: function (node, result, cache) { // node.start, node.end var min = this.gen(node.start, result, cache).charCodeAt(); var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(Random.integer(min, max)); + return String.fromCharCode(integer(min, max)); }, literal: function (node, result, cache) { return node.escaped ? node.body : node.text; @@ -366,4 +363,4 @@ Handler.extend({ }, }); -module.exports = Handler; +export { Handler }; diff --git a/src/mock/regexp/index.js b/src/mock/regexp/index.js index 4d2d02e0..99daad29 100644 --- a/src/mock/regexp/index.js +++ b/src/mock/regexp/index.js @@ -1,6 +1,2 @@ -var Parser = require('./parser') -var Handler = require('./handler') -module.exports = { - Parser: Parser, - Handler: Handler -} \ No newline at end of file +export { Parser } from "./parser.js"; +export { Handler } from "./handler.js"; diff --git a/src/mock/regexp/parser.js b/src/mock/regexp/parser.js index 03906dd1..6735af53 100644 --- a/src/mock/regexp/parser.js +++ b/src/mock/regexp/parser.js @@ -6,565 +6,852 @@ function parse(n) { var l = new TypeError("The regexp to parse must be represented as a string."); throw l; } - return index = 1, cgs = {}, parser.parse(n); + return (index = 1), (cgs = {}), parser.parse(n); } function Token(n) { - this.type = n, this.offset = Token.offset(), this.text = Token.text(); + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); } function Alternate(n, l) { - Token.call(this, "alternate"), this.left = n, this.right = l; + Token.call(this, "alternate"), (this.left = n), (this.right = l); } function Match(n) { - Token.call(this, "match"), this.body = n.filter(Boolean); + Token.call(this, "match"), (this.body = n.filter(Boolean)); } function Group(n, l) { - Token.call(this, n), this.body = l; + Token.call(this, n), (this.body = l); } function CaptureGroup(n) { - Group.call(this, "capture-group"), this.index = cgs[this.offset] || (cgs[this.offset] = index++), - this.body = n; + Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); } function Quantified(n, l) { - Token.call(this, "quantified"), this.body = n, this.quantifier = l; + Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); } function Quantifier(n, l) { - Token.call(this, "quantifier"), this.min = n, this.max = l, this.greedy = !0; + Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); } function CharSet(n, l) { - Token.call(this, "charset"), this.invert = n, this.body = l; + Token.call(this, "charset"), (this.invert = n), (this.body = l); } function CharacterRange(n, l) { - Token.call(this, "range"), this.start = n, this.end = l; + Token.call(this, "range"), (this.start = n), (this.end = l); } function Literal(n) { - Token.call(this, "literal"), this.body = n, this.escaped = this.body != this.text; + Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); } function Unicode(n) { - Token.call(this, "unicode"), this.code = n.toUpperCase(); + Token.call(this, "unicode"), (this.code = n.toUpperCase()); } function Hex(n) { - Token.call(this, "hex"), this.code = n.toUpperCase(); + Token.call(this, "hex"), (this.code = n.toUpperCase()); } function Octal(n) { - Token.call(this, "octal"), this.code = n.toUpperCase(); + Token.call(this, "octal"), (this.code = n.toUpperCase()); } function BackReference(n) { - Token.call(this, "back-reference"), this.code = n.toUpperCase(); + Token.call(this, "back-reference"), (this.code = n.toUpperCase()); } function ControlCharacter(n) { - Token.call(this, "control-character"), this.code = n.toUpperCase(); + Token.call(this, "control-character"), (this.code = n.toUpperCase()); } -var parser = function() { - function n(n, l) { - function u() { - this.constructor = n; - } - u.prototype = l.prototype, n.prototype = new u(); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); +var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, "\\\\") + .replace(/"/g, '\\"') + .replace(/\x08/g, "\\b") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\f/g, "\\f") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return "\\x0" + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return "\\x" + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return "\\u0" + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return "\\u" + l(n); + }); } - return n.replace(/\\/g, "\\\\").replace(/"/g, '\\"').replace(/\x08/g, "\\b").replace(/\t/g, "\\t").replace(/\n/g, "\\n").replace(/\f/g, "\\f").replace(/\r/g, "\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(n) { - return "\\x0" + l(n); - }).replace(/[\x10-\x1F\x80-\xFF]/g, function(n) { - return "\\x" + l(n); - }).replace(/[\u0180-\u0FFF]/g, function(n) { - return "\\u0" + l(n); - }).replace(/[\u1080-\uFFFF]/g, function(n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; - case 1: - t = n[0]; - break; + case 1: + t = n[0]; + break; - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; } - return r = l ? '"' + u(l) + '"' : "end of input", "Expected " + t + " but " + r + " found."; - } - this.expected = n, this.found = l, this.offset = u, this.line = t, this.column = r, - this.name = "SyntaxError", this.message = e(n, l); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) e = n.charAt(r), "\n" === e ? (l.seenCR || l.line++, l.column = 1, - l.seenCR = !1) : "\r" === e || "\u2028" === e || "\u2029" === e ? (l.line++, l.column = 1, - l.seenCR = !0) : (l.column++, l.seenCR = !1); - } - return Mt !== l && (Mt > l && (Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }), u(Dt, Mt, l), Mt = l), Dt; - } - function e(n) { - Ht > qt || (qt > Ht && (Ht = qt, Ot = []), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return l = qt, u = i(), null !== u ? (t = qt, 124 === n.charCodeAt(qt) ? (r = fl, - qt++) : (r = null, 0 === Wt && e(sl)), null !== r ? (o = c(), null !== o ? (r = [ r, o ], - t = r) : (qt = t, t = il)) : (qt = t, t = il), null === t && (t = al), null !== t ? (Lt = l, - u = hl(u, t), null === u ? (qt = l, l = u) : l = u) : (qt = l, l = il)) : (qt = l, - l = il), l; - } - function i() { - var n, l, u, t, r; - if (n = qt, l = f(), null === l && (l = al), null !== l) if (u = qt, Wt++, t = d(), - Wt--, null === t ? u = al : (qt = u, u = il), null !== u) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), r = h(), - null === r && (r = a()); - null !== t ? (r = s(), null === r && (r = al), null !== r ? (Lt = n, l = dl(l, t, r), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il); - } else qt = n, n = il; else qt = n, n = il; - return n; - } - function a() { - var n; - return n = x(), null === n && (n = Q(), null === n && (n = B())), n; - } - function f() { - var l, u; - return l = qt, 94 === n.charCodeAt(qt) ? (u = pl, qt++) : (u = null, 0 === Wt && e(vl)), - null !== u && (Lt = l, u = wl()), null === u ? (qt = l, l = u) : l = u, l; - } - function s() { - var l, u; - return l = qt, 36 === n.charCodeAt(qt) ? (u = Al, qt++) : (u = null, 0 === Wt && e(Cl)), - null !== u && (Lt = l, u = gl()), null === u ? (qt = l, l = u) : l = u, l; - } - function h() { - var n, l, u; - return n = qt, l = a(), null !== l ? (u = d(), null !== u ? (Lt = n, l = bl(l, u), - null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, n = il), n; - } - function d() { - var n, l, u; - return Wt++, n = qt, l = p(), null !== l ? (u = k(), null === u && (u = al), null !== u ? (Lt = n, - l = Tl(l, u), null === l ? (qt = n, n = l) : n = l) : (qt = n, n = il)) : (qt = n, - n = il), Wt--, null === n && (l = null, 0 === Wt && e(kl)), n; - } - function p() { - var n; - return n = v(), null === n && (n = w(), null === n && (n = A(), null === n && (n = C(), - null === n && (n = g(), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (44 === n.charCodeAt(qt) ? (r = ml, qt++) : (r = null, - 0 === Wt && e(Rl)), null !== r ? (o = T(), null !== o ? (125 === n.charCodeAt(qt) ? (c = Fl, - qt++) : (c = null, 0 === Wt && e(Ql)), null !== c ? (Lt = l, u = Sl(t, o), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function w() { - var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (n.substr(qt, 2) === Ul ? (r = Ul, qt += 2) : (r = null, - 0 === Wt && e(El)), null !== r ? (Lt = l, u = Gl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function A() { - var l, u, t, r; - return l = qt, 123 === n.charCodeAt(qt) ? (u = xl, qt++) : (u = null, 0 === Wt && e(yl)), - null !== u ? (t = T(), null !== t ? (125 === n.charCodeAt(qt) ? (r = Fl, qt++) : (r = null, - 0 === Wt && e(Ql)), null !== r ? (Lt = l, u = Bl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function C() { - var l, u; - return l = qt, 43 === n.charCodeAt(qt) ? (u = jl, qt++) : (u = null, 0 === Wt && e($l)), - null !== u && (Lt = l, u = ql()), null === u ? (qt = l, l = u) : l = u, l; - } - function g() { - var l, u; - return l = qt, 42 === n.charCodeAt(qt) ? (u = Ll, qt++) : (u = null, 0 === Wt && e(Ml)), - null !== u && (Lt = l, u = Dl()), null === u ? (qt = l, l = u) : l = u, l; - } - function b() { - var l, u; - return l = qt, 63 === n.charCodeAt(qt) ? (u = Hl, qt++) : (u = null, 0 === Wt && e(Ol)), - null !== u && (Lt = l, u = Wl()), null === u ? (qt = l, l = u) : l = u, l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? (l = Hl, qt++) : (l = null, 0 === Wt && e(Ol)), - l; - } - function T() { - var l, u, t; - if (l = qt, u = [], zl.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, - 0 === Wt && e(Il)), null !== t) for (;null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? (t = n.charAt(qt), - qt++) : (t = null, 0 === Wt && e(Il)); else u = il; - return null !== u && (Lt = l, u = Jl(u)), null === u ? (qt = l, l = u) : l = u, - l; - } - function x() { - var l, u, t, r; - return l = qt, 40 === n.charCodeAt(qt) ? (u = Kl, qt++) : (u = null, 0 === Wt && e(Nl)), - null !== u ? (t = R(), null === t && (t = F(), null === t && (t = m(), null === t && (t = y()))), - null !== t ? (41 === n.charCodeAt(qt) ? (r = Pl, qt++) : (r = null, 0 === Wt && e(Vl)), - null !== r ? (Lt = l, u = Xl(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il)) : (qt = l, l = il), l; - } - function y() { - var n, l; - return n = qt, l = c(), null !== l && (Lt = n, l = Yl(l)), null === l ? (qt = n, - n = l) : n = l, n; - } - function m() { - var l, u, t; - return l = qt, n.substr(qt, 2) === Zl ? (u = Zl, qt += 2) : (u = null, 0 === Wt && e(_l)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = nu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function R() { - var l, u, t; - return l = qt, n.substr(qt, 2) === lu ? (u = lu, qt += 2) : (u = null, 0 === Wt && e(uu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = tu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function F() { - var l, u, t; - return l = qt, n.substr(qt, 2) === ru ? (u = ru, qt += 2) : (u = null, 0 === Wt && e(eu)), - null !== u ? (t = c(), null !== t ? (Lt = l, u = ou(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function Q() { - var l, u, t, r, o; - if (Wt++, l = qt, 91 === n.charCodeAt(qt) ? (u = iu, qt++) : (u = null, 0 === Wt && e(au)), - null !== u) if (94 === n.charCodeAt(qt) ? (t = pl, qt++) : (t = null, 0 === Wt && e(vl)), - null === t && (t = al), null !== t) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), o = S(), - null === o && (o = U()); - null !== r ? (93 === n.charCodeAt(qt) ? (o = fu, qt++) : (o = null, 0 === Wt && e(su)), - null !== o ? (Lt = l, u = hu(t, r), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il); - } else qt = l, l = il; else qt = l, l = il; - return Wt--, null === l && (u = null, 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return Wt++, l = qt, u = U(), null !== u ? (45 === n.charCodeAt(qt) ? (t = pu, qt++) : (t = null, - 0 === Wt && e(vu)), null !== t ? (r = U(), null !== r ? (Lt = l, u = wu(u, r), null === u ? (qt = l, - l = u) : l = u) : (qt = l, l = il)) : (qt = l, l = il)) : (qt = l, l = il), Wt--, - null === l && (u = null, 0 === Wt && e(du)), l; - } - function U() { - var n, l; - return Wt++, n = G(), null === n && (n = E()), Wt--, null === n && (l = null, 0 === Wt && e(Au)), - n; - } - function E() { - var l, u; - return l = qt, Cu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, 0 === Wt && e(gu)), - null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, l; - } - function G() { - var n; - return n = L(), null === n && (n = Y(), null === n && (n = H(), null === n && (n = O(), - null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), null === n && (n = J(), - null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), null === n && (n = V(), - null === n && (n = X(), null === n && (n = _(), null === n && (n = nl(), null === n && (n = ll(), - null === n && (n = ul(), null === n && (n = tl()))))))))))))))))), n; - } - function B() { - var n; - return n = j(), null === n && (n = q(), null === n && (n = $())), n; - } - function j() { - var l, u; - return l = qt, 46 === n.charCodeAt(qt) ? (u = ku, qt++) : (u = null, 0 === Wt && e(Tu)), - null !== u && (Lt = l, u = xu()), null === u ? (qt = l, l = u) : l = u, l; - } - function $() { - var l, u; - return Wt++, l = qt, mu.test(n.charAt(qt)) ? (u = n.charAt(qt), qt++) : (u = null, - 0 === Wt && e(Ru)), null !== u && (Lt = l, u = bu(u)), null === u ? (qt = l, l = u) : l = u, - Wt--, null === l && (u = null, 0 === Wt && e(yu)), l; - } - function q() { - var n; - return n = M(), null === n && (n = D(), null === n && (n = Y(), null === n && (n = H(), - null === n && (n = O(), null === n && (n = W(), null === n && (n = z(), null === n && (n = I(), - null === n && (n = J(), null === n && (n = K(), null === n && (n = N(), null === n && (n = P(), - null === n && (n = V(), null === n && (n = X(), null === n && (n = Z(), null === n && (n = _(), - null === n && (n = nl(), null === n && (n = ll(), null === n && (n = ul(), null === n && (n = tl()))))))))))))))))))), - n; - } - function L() { - var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Su()), null === u ? (qt = l, l = u) : l = u, l; - } - function M() { - var l, u; - return l = qt, n.substr(qt, 2) === Fu ? (u = Fu, qt += 2) : (u = null, 0 === Wt && e(Qu)), - null !== u && (Lt = l, u = Uu()), null === u ? (qt = l, l = u) : l = u, l; - } - function D() { - var l, u; - return l = qt, n.substr(qt, 2) === Eu ? (u = Eu, qt += 2) : (u = null, 0 === Wt && e(Gu)), - null !== u && (Lt = l, u = Bu()), null === u ? (qt = l, l = u) : l = u, l; - } - function H() { - var l, u; - return l = qt, n.substr(qt, 2) === ju ? (u = ju, qt += 2) : (u = null, 0 === Wt && e($u)), - null !== u && (Lt = l, u = qu()), null === u ? (qt = l, l = u) : l = u, l; - } - function O() { - var l, u; - return l = qt, n.substr(qt, 2) === Lu ? (u = Lu, qt += 2) : (u = null, 0 === Wt && e(Mu)), - null !== u && (Lt = l, u = Du()), null === u ? (qt = l, l = u) : l = u, l; - } - function W() { - var l, u; - return l = qt, n.substr(qt, 2) === Hu ? (u = Hu, qt += 2) : (u = null, 0 === Wt && e(Ou)), - null !== u && (Lt = l, u = Wu()), null === u ? (qt = l, l = u) : l = u, l; - } - function z() { - var l, u; - return l = qt, n.substr(qt, 2) === zu ? (u = zu, qt += 2) : (u = null, 0 === Wt && e(Iu)), - null !== u && (Lt = l, u = Ju()), null === u ? (qt = l, l = u) : l = u, l; - } - function I() { - var l, u; - return l = qt, n.substr(qt, 2) === Ku ? (u = Ku, qt += 2) : (u = null, 0 === Wt && e(Nu)), - null !== u && (Lt = l, u = Pu()), null === u ? (qt = l, l = u) : l = u, l; - } - function J() { - var l, u; - return l = qt, n.substr(qt, 2) === Vu ? (u = Vu, qt += 2) : (u = null, 0 === Wt && e(Xu)), - null !== u && (Lt = l, u = Yu()), null === u ? (qt = l, l = u) : l = u, l; - } - function K() { - var l, u; - return l = qt, n.substr(qt, 2) === Zu ? (u = Zu, qt += 2) : (u = null, 0 === Wt && e(_u)), - null !== u && (Lt = l, u = nt()), null === u ? (qt = l, l = u) : l = u, l; - } - function N() { - var l, u; - return l = qt, n.substr(qt, 2) === lt ? (u = lt, qt += 2) : (u = null, 0 === Wt && e(ut)), - null !== u && (Lt = l, u = tt()), null === u ? (qt = l, l = u) : l = u, l; - } - function P() { - var l, u; - return l = qt, n.substr(qt, 2) === rt ? (u = rt, qt += 2) : (u = null, 0 === Wt && e(et)), - null !== u && (Lt = l, u = ot()), null === u ? (qt = l, l = u) : l = u, l; - } - function V() { - var l, u; - return l = qt, n.substr(qt, 2) === ct ? (u = ct, qt += 2) : (u = null, 0 === Wt && e(it)), - null !== u && (Lt = l, u = at()), null === u ? (qt = l, l = u) : l = u, l; - } - function X() { - var l, u; - return l = qt, n.substr(qt, 2) === ft ? (u = ft, qt += 2) : (u = null, 0 === Wt && e(st)), - null !== u && (Lt = l, u = ht()), null === u ? (qt = l, l = u) : l = u, l; - } - function Y() { - var l, u, t; - return l = qt, n.substr(qt, 2) === dt ? (u = dt, qt += 2) : (u = null, 0 === Wt && e(pt)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = wt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function Z() { - var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (gt.test(n.charAt(qt)) ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(bt)), - null !== t ? (Lt = l, u = kt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; - } - function _() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u) { - if (t = [], yt.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(mt)), - null !== r) for (;null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(mt)); else t = il; - null !== t ? (Lt = l, u = Rt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function nl() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Ft ? (u = Ft, qt += 2) : (u = null, 0 === Wt && e(Qt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = Et(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function ll() { - var l, u, t, r; - if (l = qt, n.substr(qt, 2) === Gt ? (u = Gt, qt += 2) : (u = null, 0 === Wt && e(Bt)), - null !== u) { - if (t = [], St.test(n.charAt(qt)) ? (r = n.charAt(qt), qt++) : (r = null, 0 === Wt && e(Ut)), - null !== r) for (;null !== r; ) t.push(r), St.test(n.charAt(qt)) ? (r = n.charAt(qt), - qt++) : (r = null, 0 === Wt && e(Ut)); else t = il; - null !== t ? (Lt = l, u = jt(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il); - } else qt = l, l = il; - return l; - } - function ul() { - var l, u; - return l = qt, n.substr(qt, 2) === Tt ? (u = Tt, qt += 2) : (u = null, 0 === Wt && e(xt)), - null !== u && (Lt = l, u = $t()), null === u ? (qt = l, l = u) : l = u, l; - } - function tl() { - var l, u, t; - return l = qt, 92 === n.charCodeAt(qt) ? (u = At, qt++) : (u = null, 0 === Wt && e(Ct)), - null !== u ? (n.length > qt ? (t = n.charAt(qt), qt++) : (t = null, 0 === Wt && e(vt)), - null !== t ? (Lt = l, u = bu(t), null === u ? (qt = l, l = u) : l = u) : (qt = l, - l = il)) : (qt = l, l = il), l; + (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); } - var rl, el = arguments.length > 1 ? arguments[1] : {}, ol = { - regexp: c - }, cl = c, il = null, al = "", fl = "|", sl = '"|"', hl = function(n, l) { - return l ? new Alternate(n, l[1]) : n; - }, dl = function(n, l, u) { - return new Match([ n ].concat(l).concat([ u ])); - }, pl = "^", vl = '"^"', wl = function() { - return new Token("start"); - }, Al = "$", Cl = '"$"', gl = function() { - return new Token("end"); - }, bl = function(n, l) { - return new Quantified(n, l); - }, kl = "Quantifier", Tl = function(n, l) { - return l && (n.greedy = !1), n; - }, xl = "{", yl = '"{"', ml = ",", Rl = '","', Fl = "}", Ql = '"}"', Sl = function(n, l) { - return new Quantifier(n, l); - }, Ul = ",}", El = '",}"', Gl = function(n) { - return new Quantifier(n, 1/0); - }, Bl = function(n) { - return new Quantifier(n, n); - }, jl = "+", $l = '"+"', ql = function() { - return new Quantifier(1, 1/0); - }, Ll = "*", Ml = '"*"', Dl = function() { - return new Quantifier(0, 1/0); - }, Hl = "?", Ol = '"?"', Wl = function() { - return new Quantifier(0, 1); - }, zl = /^[0-9]/, Il = "[0-9]", Jl = function(n) { - return +n.join(""); - }, Kl = "(", Nl = '"("', Pl = ")", Vl = '")"', Xl = function(n) { - return n; - }, Yl = function(n) { - return new CaptureGroup(n); - }, Zl = "?:", _l = '"?:"', nu = function(n) { - return new Group("non-capture-group", n); - }, lu = "?=", uu = '"?="', tu = function(n) { - return new Group("positive-lookahead", n); - }, ru = "?!", eu = '"?!"', ou = function(n) { - return new Group("negative-lookahead", n); - }, cu = "CharacterSet", iu = "[", au = '"["', fu = "]", su = '"]"', hu = function(n, l) { - return new CharSet(!!n, l); - }, du = "CharacterRange", pu = "-", vu = '"-"', wu = function(n, l) { - return new CharacterRange(n, l); - }, Au = "Character", Cu = /^[^\\\]]/, gu = "[^\\\\\\]]", bu = function(n) { - return new Literal(n); - }, ku = ".", Tu = '"."', xu = function() { - return new Token("any-character"); - }, yu = "Literal", mu = /^[^|\\\/.[()?+*$\^]/, Ru = "[^|\\\\\\/.[()?+*$\\^]", Fu = "\\b", Qu = '"\\\\b"', Su = function() { - return new Token("backspace"); - }, Uu = function() { - return new Token("word-boundary"); - }, Eu = "\\B", Gu = '"\\\\B"', Bu = function() { - return new Token("non-word-boundary"); - }, ju = "\\d", $u = '"\\\\d"', qu = function() { - return new Token("digit"); - }, Lu = "\\D", Mu = '"\\\\D"', Du = function() { - return new Token("non-digit"); - }, Hu = "\\f", Ou = '"\\\\f"', Wu = function() { - return new Token("form-feed"); - }, zu = "\\n", Iu = '"\\\\n"', Ju = function() { - return new Token("line-feed"); - }, Ku = "\\r", Nu = '"\\\\r"', Pu = function() { - return new Token("carriage-return"); - }, Vu = "\\s", Xu = '"\\\\s"', Yu = function() { - return new Token("white-space"); - }, Zu = "\\S", _u = '"\\\\S"', nt = function() { - return new Token("non-white-space"); - }, lt = "\\t", ut = '"\\\\t"', tt = function() { - return new Token("tab"); - }, rt = "\\v", et = '"\\\\v"', ot = function() { - return new Token("vertical-tab"); - }, ct = "\\w", it = '"\\\\w"', at = function() { - return new Token("word"); - }, ft = "\\W", st = '"\\\\W"', ht = function() { - return new Token("non-word"); - }, dt = "\\c", pt = '"\\\\c"', vt = "any character", wt = function(n) { - return new ControlCharacter(n); - }, At = "\\", Ct = '"\\\\"', gt = /^[1-9]/, bt = "[1-9]", kt = function(n) { - return new BackReference(n); - }, Tt = "\\0", xt = '"\\\\0"', yt = /^[0-7]/, mt = "[0-7]", Rt = function(n) { - return new Octal(n.join("")); - }, Ft = "\\x", Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, Ut = "[0-9a-fA-F]", Et = function(n) { - return new Hex(n.join("")); - }, Gt = "\\u", Bt = '"\\\\u"', jt = function(n) { - return new Unicode(n.join("")); - }, $t = function() { - return new Token("null-character"); - }, qt = 0, Lt = 0, Mt = 0, Dt = { - line: 1, - column: 1, - seenCR: !1 - }, Ht = 0, Ot = [], Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (Token.offset = t, Token.text = u, rl = cl(), null !== rl && qt === n.length) return rl; - throw o(Ot), Lt = Math.max(qt, Ht), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column); - } - return n(l, Error), { - SyntaxError: l, - parse: u - }; -}(), index = 1, cgs = {}; + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + "\n" === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : "\r" === e || "\u2028" === e || "\u2029" === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null === t && (t = al), + null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function s() { + var l, u; + return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function h() { + var n, l, u; + return ( + (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), + null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function g() { + var l, u; + return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function b() { + var l, u; + return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) + for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) + if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n, l; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && ((l = null), 0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function M() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function D() { + var l, u; + return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function H() { + var l, u; + return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function O() { + var l, u; + return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function W() { + var l, u; + return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function z() { + var l, u; + return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function I() { + var l, u; + return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function J() { + var l, u; + return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function K() { + var l, u; + return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function N() { + var l, u; + return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function P() { + var l, u; + return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function V() { + var l, u; + return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function X() { + var l, u; + return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { + if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) + for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = "", + fl = "|", + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = "^", + vl = '"^"', + wl = function () { + return new Token("start"); + }, + Al = "$", + Cl = '"$"', + gl = function () { + return new Token("end"); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = "Quantifier", + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = "{", + yl = '"{"', + ml = ",", + Rl = '","', + Fl = "}", + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ",}", + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = "+", + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = "*", + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = "?", + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = "[0-9]", + Jl = function (n) { + return +n.join(""); + }, + Kl = "(", + Nl = '"("', + Pl = ")", + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = "?:", + _l = '"?:"', + nu = function (n) { + return new Group("non-capture-group", n); + }, + lu = "?=", + uu = '"?="', + tu = function (n) { + return new Group("positive-lookahead", n); + }, + ru = "?!", + eu = '"?!"', + ou = function (n) { + return new Group("negative-lookahead", n); + }, + cu = "CharacterSet", + iu = "[", + au = '"["', + fu = "]", + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = "CharacterRange", + pu = "-", + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = "Character", + Cu = /^[^\\\]]/, + gu = "[^\\\\\\]]", + bu = function (n) { + return new Literal(n); + }, + ku = ".", + Tu = '"."', + xu = function () { + return new Token("any-character"); + }, + yu = "Literal", + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = "[^|\\\\\\/.[()?+*$\\^]", + Fu = "\\b", + Qu = '"\\\\b"', + Su = function () { + return new Token("backspace"); + }, + Uu = function () { + return new Token("word-boundary"); + }, + Eu = "\\B", + Gu = '"\\\\B"', + Bu = function () { + return new Token("non-word-boundary"); + }, + ju = "\\d", + $u = '"\\\\d"', + qu = function () { + return new Token("digit"); + }, + Lu = "\\D", + Mu = '"\\\\D"', + Du = function () { + return new Token("non-digit"); + }, + Hu = "\\f", + Ou = '"\\\\f"', + Wu = function () { + return new Token("form-feed"); + }, + zu = "\\n", + Iu = '"\\\\n"', + Ju = function () { + return new Token("line-feed"); + }, + Ku = "\\r", + Nu = '"\\\\r"', + Pu = function () { + return new Token("carriage-return"); + }, + Vu = "\\s", + Xu = '"\\\\s"', + Yu = function () { + return new Token("white-space"); + }, + Zu = "\\S", + _u = '"\\\\S"', + nt = function () { + return new Token("non-white-space"); + }, + lt = "\\t", + ut = '"\\\\t"', + tt = function () { + return new Token("tab"); + }, + rt = "\\v", + et = '"\\\\v"', + ot = function () { + return new Token("vertical-tab"); + }, + ct = "\\w", + it = '"\\\\w"', + at = function () { + return new Token("word"); + }, + ft = "\\W", + st = '"\\\\W"', + ht = function () { + return new Token("non-word"); + }, + dt = "\\c", + pt = '"\\\\c"', + vt = "any character", + wt = function (n) { + return new ControlCharacter(n); + }, + At = "\\", + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = "[1-9]", + kt = function (n) { + return new BackReference(n); + }, + Tt = "\\0", + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = "[0-7]", + Rt = function (n) { + return new Octal(n.join("")); + }, + Ft = "\\x", + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = "[0-9a-fA-F]", + Et = function (n) { + return new Hex(n.join("")); + }, + Gt = "\\u", + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join("")); + }, + $t = function () { + return new Token("null-character"); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; -module.exports = parser \ No newline at end of file +export { parser as Parser }; diff --git a/src/mock/schema/index.js b/src/mock/schema/index.js index 24f823bd..4e346b5b 100644 --- a/src/mock/schema/index.js +++ b/src/mock/schema/index.js @@ -1 +1 @@ -module.exports = require('./schema') \ No newline at end of file +export { toJSONSchema } from "./schema.js"; diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index a78b2584..ceb284cc 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -5,43 +5,31 @@ > [JSON Schema](http://json-schema.org/) */ -var Constant = require('../constant') -var Util = require('../util') -var Parser = require('../parser') +import Constant from "../constant.js"; +import * as Util from "../util.js"; +import Parser from "../parser.js"; -function toJSONSchema(template, name, path /* Internal Use Only */ ) { +function toJSONSchema(template, name, path = [] /* Internal Use Only */) { // type rule properties items - path = path || [] var result = { - name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, - template: template, + name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + template, type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: Parser.parse(name) - } - result.path = path.slice(0) - result.path.push(name === undefined ? 'ROOT' : result.name) + rule: Parser.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? "ROOT" : result.name); switch (result.type) { - case 'array': - result.items = [] - Util.each(template, function(value, index) { - result.items.push( - toJSONSchema(value, index, result.path) - ) - }) - break - case 'object': - result.properties = [] - Util.each(template, function(value, name) { - result.properties.push( - toJSONSchema(value, name, result.path) - ) - }) - break + case "array": + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case "object": + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; } - return result - + return result; } - -module.exports = toJSONSchema +export { toJSONSchema }; +export default toJSONSchema; diff --git a/src/mock/util.js b/src/mock/util.js index bd36d50b..0b97615b 100644 --- a/src/mock/util.js +++ b/src/mock/util.js @@ -1,126 +1,15 @@ /* ## Utilities */ -var Util = {} - -Util.extend = function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, name, src, copy, clone - - if (length === 1) { - target = this - i = 0 - } - - for (; i < length; i++) { - options = arguments[i] - if (!options) continue - - for (name in options) { - src = target[name] - copy = options[name] - - if (target === copy) continue - if (copy === undefined) continue - - if (Util.isArray(copy) || Util.isObject(copy)) { - if (Util.isArray(copy)) clone = src && Util.isArray(src) ? src : [] - if (Util.isObject(copy)) clone = src && Util.isObject(src) ? src : {} - - target[name] = Util.extend(clone, copy) - } else { - target[name] = copy - } - } - } - - return target -} - -Util.each = function each(obj, iterator, context) { - var i, key - if (this.type(obj) === 'number') { - for (i = 0; i < obj; i++) { - iterator(i, i) - } - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break - } - } -} - -Util.type = function type(obj) { - return (obj === null || obj === undefined) ? String(obj) : Object.prototype.toString.call(obj).match(/\[object (\w+)\]/)[1].toLowerCase() -} - -Util.each('String Object Array RegExp Function'.split(' '), function(value) { - Util['is' + value] = function(obj) { - return Util.type(obj) === value.toLowerCase() - } -}) - -Util.isObjectOrArray = function(value) { - return Util.isObject(value) || Util.isArray(value) -} - -Util.isNumeric = function(value) { - return !isNaN(parseFloat(value)) && isFinite(value) -} - -Util.keys = function(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) keys.push(key) - } - return keys; -} -Util.values = function(obj) { - var values = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) values.push(obj[key]) - } - return values; -} - -/* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 -*/ -Util.heredoc = function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn.toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '').replace(/[\s\xA0]+$/, '') // .trim() -} - -Util.noop = function() {} - -module.exports = Util \ No newline at end of file +export { type } from "./utils/type.js"; +export { extend } from "./utils/extend.js"; +export { isObjectOrArray, isNumeric, isString, isObject, isArray, isRegExp, isFunction } from "./utils/type.js"; +export { each } from "./utils/each.js"; +export { heredoc } from "./utils/heredoc.js"; +export function keys(obj) { + return Object.keys(obj); +} +export function values(obj) { + return Object.values(obj); +} +export function noop() {} diff --git a/src/mock/utils/each.js b/src/mock/utils/each.js new file mode 100644 index 00000000..bec8634a --- /dev/null +++ b/src/mock/utils/each.js @@ -0,0 +1,16 @@ +export function each(obj, iterator, context) { + // each + var i, key; + if (type(obj) === "number") { + //表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } +} diff --git a/src/mock/utils/extend.js b/src/mock/utils/extend.js new file mode 100644 index 00000000..513819a9 --- /dev/null +++ b/src/mock/utils/extend.js @@ -0,0 +1,40 @@ +import { isObject, isArray } from "./type.js"; +export function extend() { + var target = arguments[0] || {}, + i = 1, + length = arguments.length, + options, + name, + src, + copy, + clone; + + if (length === 1) { + target = this; + i = 0; + } + + for (; i < length; i++) { + options = arguments[i]; + if (!options) continue; + + for (name in options) { + src = target[name]; + copy = options[name]; + + if (target === copy) continue; + if (copy === undefined) continue; + + if (isArray(copy) || isObject(copy)) { + if (isArray(copy)) clone = src && isArray(src) ? src : []; + if (isObject(copy)) clone = src && isObject(src) ? src : {}; + + target[name] = extend(clone, copy); + } else { + target[name] = copy; + } + } + } + + return target; +} diff --git a/src/mock/utils/heredoc.js b/src/mock/utils/heredoc.js new file mode 100644 index 00000000..465b5f6c --- /dev/null +++ b/src/mock/utils/heredoc.js @@ -0,0 +1,33 @@ +/* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 +*/ +export function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, "") + .replace(/\*\/[^\/]+$/, "") + .replace(/^[\s\xA0]+/, "") + .replace(/[\s\xA0]+$/, ""); // .trim() +} diff --git a/src/mock/utils/type.js b/src/mock/utils/type.js new file mode 100644 index 00000000..d55b09e9 --- /dev/null +++ b/src/mock/utils/type.js @@ -0,0 +1,19 @@ +// 使用 lodash 提供的方式 +import { isObject, isArray } from "lodash-es"; +export function type(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); +} + +export function isObjectOrArray(value) { + return isObject(value) || isArray(value); +} + +export function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); +} +export { isString, isObject, isArray, isRegExp, isFunction } from "lodash-es"; diff --git a/src/mock/valid/index.js b/src/mock/valid/index.js index ea476661..ae37d164 100644 --- a/src/mock/valid/index.js +++ b/src/mock/valid/index.js @@ -1 +1 @@ -module.exports = require('./valid') \ No newline at end of file +export { valid } from "./valid.js"; diff --git a/src/mock/valid/valid.js b/src/mock/valid/valid.js index f785ac19..200d5a6a 100644 --- a/src/mock/valid/valid.js +++ b/src/mock/valid/valid.js @@ -20,18 +20,18 @@ [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) */ -var Constant = require('../constant') -var Util = require('../util') -var toJSONSchema = require('../schema') +import Constant from "../constant.js"; +import * as Util from "../util.js"; +import { toJSONSchema } from "../schema/schema.js"; function valid(template, data) { - var schema = toJSONSchema(template) - var result = Diff.diff(schema, data) + var schema = toJSONSchema(template); + var result = Diff.diff(schema, data); for (var i = 0; i < result.length; i++) { // console.log(template, data) // console.warn(Assert.message(result[i])) } - return result + return result; } /* @@ -71,241 +71,243 @@ function valid(template, data) { 无生成规则:检测全部的元素个数,继续递归 */ var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */ ) { - var result = [] + diff: function diff(schema, data, name /* Internal Use Only */) { + var result = []; // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if ( - this.name(schema, data, name, result) && - this.type(schema, data, name, result) - ) { - this.value(schema, data, name, result) - this.properties(schema, data, name, result) - this.items(schema, data, name, result) + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); } - return result + return result; }, /* jshint unused:false */ - name: function(schema, data, name, result) { - var length = result.length + name: function (schema, data, name, result) { + var length = result.length; - Assert.equal('name', schema.path, name + '', schema.name + '', result) + Assert.equal("name", schema.path, name + "", schema.name + "", result); - return result.length === length + return result.length === length; }, - type: function(schema, data, name, result) { - var length = result.length + type: function (schema, data, name, result) { + var length = result.length; switch (schema.type) { - case 'string': + case "string": // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true - break - case 'array': + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case "array": if (schema.rule.parameters) { // name|count: array if (schema.rule.min !== undefined && schema.rule.max === undefined) { // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true + if (schema.rule.count === 1) return true; } // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true + if (schema.rule.parameters[2]) return true; } - break - case 'function': + break; + case "function": // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true + return true; } - Assert.equal('type', schema.path, Util.type(data), schema.type, result) + Assert.equal("type", schema.path, Util.type(data), schema.type, result); - return result.length === length + return result.length === length; }, - value: function(schema, data, name, result) { - var length = result.length + value: function (schema, data, name, result) { + var length = result.length; - var rule = schema.rule - var templateType = schema.type - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true + var rule = schema.rule; + var templateType = schema.type; + if (templateType === "object" || templateType === "array" || templateType === "function") return true; // 无生成规则 if (!rule.parameters) { switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result) - return result.length === length - case 'string': + case "regexp": + Assert.match("value", schema.path, data, schema.template, result); + return result.length === length; + case "string": // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length - break + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; } - Assert.equal('value', schema.path, data, schema.template, result) - return result.length === length + Assert.equal("value", schema.path, data, schema.template, result); + return result.length === length; } // 有生成规则 - var actualRepeatCount + var actualRepeatCount; switch (templateType) { - case 'number': - var parts = (data + '').split('.') - parts[0] = +parts[0] + case "number": + var parts = (data + "").split("."); + parts[0] = +parts[0]; // 整数部分 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result) - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result) + Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); } // |count if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name) + Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); } // 小数部分 if (rule.decimal) { // |dmin-dmax if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result) - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result) + Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); } // |dcount if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result) + Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); } } - break + break; - case 'boolean': - break + case "boolean": + break; - case 'string': + case "string": // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')) - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 + actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); } // |count if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); } - break + break; - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')) - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0 + case "regexp": + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result) - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result) + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); } // |count if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result) + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); } - break + break; } - return result.length === length + return result.length === length; }, - properties: function(schema, data, name, result) { - var length = result.length + properties: function (schema, data, name, result) { + var length = result.length; - var rule = schema.rule - var keys = Util.keys(data) - if (!schema.properties) return + var rule = schema.rule; + var keys = Util.keys(data); + if (!schema.properties) return; // 无生成规则 if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result) + Assert.equal("properties length", schema.path, keys.length, schema.properties.length, result); } else { // 有生成规则 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('properties length', schema.path, keys.length, Math.min(rule.min, rule.max), result) - Assert.lessThanOrEqualTo('properties length', schema.path, keys.length, Math.max(rule.min, rule.max), result) + Assert.greaterThanOrEqualTo("properties length", schema.path, keys.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo("properties length", schema.path, keys.length, Math.max(rule.min, rule.max), result); } // |count if (rule.min !== undefined && rule.max === undefined) { // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result) + if (rule.count !== 1) Assert.equal("properties length", schema.path, keys.length, rule.min, result); } } - if (result.length !== length) return false + if (result.length !== length) return false; for (var i = 0; i < keys.length; i++) { result.push.apply( result, this.diff( - function() { - var property - Util.each(schema.properties, function(item /*, index*/ ) { - if (item.name === keys[i]) property = item - }) - return property || schema.properties[i] - }(), + (function () { + var property; + Util.each(schema.properties, function (item /*, index*/) { + if (item.name === keys[i]) property = item; + }); + return property || schema.properties[i]; + })(), data[keys[i]], keys[i] ) - ) + ); } - return result.length === length + return result.length === length; }, - items: function(schema, data, name, result) { - var length = result.length + items: function (schema, data, name, result) { + var length = result.length; - if (!schema.items) return + if (!schema.items) return; - var rule = schema.rule + var rule = schema.rule; // 无生成规则 if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result) + Assert.equal("items length", schema.path, data.length, schema.items.length, result); } else { // 有生成规则 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('items', schema.path, data.length, (Math.min(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements') - Assert.lessThanOrEqualTo('items', schema.path, data.length, (Math.max(rule.min, rule.max) * schema.items.length), result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements') + Assert.greaterThanOrEqualTo( + "items", + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + ); + Assert.lessThanOrEqualTo( + "items", + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + ); } // |count if (rule.min !== undefined && rule.max === undefined) { // |1, |>1 - if (rule.count === 1) return result.length === length - else Assert.equal('items length', schema.path, data.length, (rule.min * schema.items.length), result) + if (rule.count === 1) return result.length === length; + else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); } // |+inc - if (rule.parameters[2]) return result.length === length + if (rule.parameters[2]) return result.length === length; } - if (result.length !== length) return false + if (result.length !== length) return false; for (var i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff( - schema.items[i % schema.items.length], - data[i], - i % schema.items.length - ) - ) + result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); } - return result.length === length - } -} + return result.length === length; + }, +}; /* 完善、友好的提示信息 @@ -320,23 +322,22 @@ var Diff = { */ var Assert = { - message: function(item) { - return (item.message || - '[{utype}] Expect {path}\'{ltype} {action} {expected}, but is {actual}') - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', Util.isArray(item.path) && item.path.join('.') || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual) + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace("{utype}", item.type.toUpperCase()) + .replace("{ltype}", item.type.toLowerCase()) + .replace("{path}", (Util.isArray(item.path) && item.path.join(".")) || item.path) + .replace("{action}", item.action) + .replace("{expected}", item.expected) + .replace("{actual}", item.actual); }, - equal: function(type, path, actual, expected, result, message) { - if (actual === expected) return true + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; switch (type) { - case 'type': + case "type": // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true - break + if (expected === "regexp" && actual === "string") return true; + break; } var item = { @@ -344,102 +345,102 @@ var Assert = { type: type, actual: actual, expected: expected, - action: 'is equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false + action: "is equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; }, // actual matches expected - match: function(type, path, actual, expected, result, message) { - if (expected.test(actual)) return true + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; var item = { path: path, type: type, actual: actual, expected: expected, - action: 'matches', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false + action: "matches", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; }, - notEqual: function(type, path, actual, expected, result, message) { - if (actual !== expected) return true + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; var item = { path: path, type: type, actual: actual, expected: expected, - action: 'is not equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false + action: "is not equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; }, - greaterThan: function(type, path, actual, expected, result, message) { - if (actual > expected) return true + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; var item = { path: path, type: type, actual: actual, expected: expected, - action: 'is greater than', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false + action: "is greater than", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; }, - lessThan: function(type, path, actual, expected, result, message) { - if (actual < expected) return true + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; var item = { path: path, type: type, actual: actual, expected: expected, - action: 'is less to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false + action: "is less to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; }, - greaterThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual >= expected) return true + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; var item = { path: path, type: type, actual: actual, expected: expected, - action: 'is greater than or equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false + action: "is greater than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; }, - lessThanOrEqualTo: function(type, path, actual, expected, result, message) { - if (actual <= expected) return true + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; var item = { path: path, type: type, actual: actual, expected: expected, - action: 'is less than or equal to', - message: message - } - item.message = Assert.message(item) - result.push(item) - return false - } -} + action: "is less than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, +}; -valid.Diff = Diff -valid.Assert = Assert +valid.Diff = Diff; +valid.Assert = Assert; -module.exports = valid \ No newline at end of file +export { valid }; diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index edf84ff5..c103d525 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1 +1 @@ -module.exports = require('./xhr') \ No newline at end of file +export { MockXMLHttpRequest } from "./xhr"; diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/xhr.js index daf2af4b..15980107 100644 --- a/src/mock/xhr/xhr.js +++ b/src/mock/xhr/xhr.js @@ -44,11 +44,11 @@ onreadystatechange readystatechange */ -var Util = require('../util') +import * as Util from "../util.js"; // 备份原生 XMLHttpRequest -window._XMLHttpRequest = window.XMLHttpRequest -window._ActiveXObject = window.ActiveXObject +window._XMLHttpRequest = window.XMLHttpRequest; +window._ActiveXObject = window.ActiveXObject; /* PhantomJS @@ -58,13 +58,13 @@ window._ActiveXObject = window.ActiveXObject https://github.com/ariya/phantomjs/issues/11289 */ try { - new window.Event('custom') + new window.Event("custom"); } catch (exception) { - window.Event = function(type, bubbles, cancelable, detail) { - var event = document.createEvent('CustomEvent') // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail) - return event - } + window.Event = function (type, bubbles, cancelable, detail) { + var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event; + }; } var XHR_STATES = { @@ -77,12 +77,12 @@ var XHR_STATES = { // The response's body is being received. LOADING: 3, // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4 -} + DONE: 4, +}; -var XHR_EVENTS = 'readystatechange loadstart progress abort error load timeout loadend'.split(' ') -var XHR_REQUEST_PROPERTIES = 'timeout withCredentials'.split(' ') -var XHR_RESPONSE_PROPERTIES = 'readyState responseURL status statusText responseType response responseText responseXML'.split(' ') +var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); +var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); +var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 var HTTP_STATUS_CODES = { @@ -126,8 +126,8 @@ var HTTP_STATUS_CODES = { 502: "Bad Gateway", 503: "Service Unavailable", 504: "Gateway Timeout", - 505: "HTTP Version Not Supported" -} + 505: "HTTP Version Not Supported", +}; /* MockXMLHttpRequest @@ -138,120 +138,120 @@ function MockXMLHttpRequest() { this.custom = { events: {}, requestHeaders: {}, - responseHeaders: {} - } + responseHeaders: {}, + }; } MockXMLHttpRequest._settings = { - timeout: '10-100', + timeout: "10-100", /* timeout: 50, timeout: '10-100', */ -} +}; -MockXMLHttpRequest.setup = function(settings) { - Util.extend(MockXMLHttpRequest._settings, settings) - return MockXMLHttpRequest._settings -} +MockXMLHttpRequest.setup = function (settings) { + Util.extend(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings; +}; -Util.extend(MockXMLHttpRequest, XHR_STATES) -Util.extend(MockXMLHttpRequest.prototype, XHR_STATES) +Util.extend(MockXMLHttpRequest, XHR_STATES); +Util.extend(MockXMLHttpRequest.prototype, XHR_STATES); // 标记当前对象为 MockXMLHttpRequest -MockXMLHttpRequest.prototype.mock = true +MockXMLHttpRequest.prototype.mock = true; // 是否拦截 Ajax 请求 -MockXMLHttpRequest.prototype.match = false +MockXMLHttpRequest.prototype.match = false; // 初始化 Request 相关的属性和方法 Util.extend(MockXMLHttpRequest.prototype, { // https://xhr.spec.whatwg.org/#the-open()-method // Sets the request method, request URL, and synchronous flag. - open: function(method, url, async, username, password) { - var that = this + open: function (method, url, async, username, password) { + var that = this; Util.extend(this.custom, { method: method, url: url, - async: typeof async === 'boolean' ? async : true, + async: typeof async === "boolean" ? async : true, username: username, password: password, options: { url: url, - type: method + type: method, + }, + }); + + this.custom.timeout = (function (timeout) { + if (typeof timeout === "number") return timeout; + if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); + if (typeof timeout === "string" && ~timeout.indexOf("-")) { + var tmp = timeout.split("-"); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min; } - }) - - this.custom.timeout = function(timeout) { - if (typeof timeout === 'number') return timeout - if (typeof timeout === 'string' && !~timeout.indexOf('-')) return parseInt(timeout, 10) - if (typeof timeout === 'string' && ~timeout.indexOf('-')) { - var tmp = timeout.split('-') - var min = parseInt(tmp[0], 10) - var max = parseInt(tmp[1], 10) - return Math.round(Math.random() * (max - min)) + min - } - }(MockXMLHttpRequest._settings.timeout) + })(MockXMLHttpRequest._settings.timeout); // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options) + var item = find(this.custom.options); function handle(event) { // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]] + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; } catch (e) {} } // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/ )) + that.dispatchEvent(new Event(event.type /*, false, false, that*/)); } // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 if (!item) { // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest() - this.custom.xhr = xhr + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; // 初始化所有事件,用于监听原生 XHR 对象的事件 for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle) + xhr.addEventListener(XHR_EVENTS[i], handle); } // xhr.open() - if (username) xhr.open(method, url, async, username, password) - else xhr.open(method, url, async) + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]] + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; } catch (e) {} } - return + return; } // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true - this.custom.template = item - this.readyState = MockXMLHttpRequest.OPENED - this.dispatchEvent(new Event('readystatechange' /*, false, false, this*/ )) + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); }, // https://xhr.spec.whatwg.org/#the-setrequestheader()-method // Combines a header in author request headers. - setRequestHeader: function(name, value) { + setRequestHeader: function (name, value) { // 原生 XHR if (!this.match) { - this.custom.xhr.setRequestHeader(name, value) - return + this.custom.xhr.setRequestHeader(name, value); + return; } // 拦截 XHR - var requestHeaders = this.custom.requestHeaders - if (requestHeaders[name]) requestHeaders[name] += ',' + value - else requestHeaders[name] = value + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += "," + value; + else requestHeaders[name] = value; }, timeout: 0, withCredentials: false, @@ -259,45 +259,43 @@ Util.extend(MockXMLHttpRequest.prototype, { // https://xhr.spec.whatwg.org/#the-send()-method // Initiates the request. send: function send(data) { - var that = this - this.custom.options.body = data + var that = this; + this.custom.options.body = data; // 原生 XHR if (!this.match) { - this.custom.xhr.send(data) - return + this.custom.xhr.send(data); + return; } // 拦截 XHR // X-Requested-With header - this.setRequestHeader('X-Requested-With', 'MockXMLHttpRequest') + this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); // loadstart The fetch initiates. - this.dispatchEvent(new Event('loadstart' /*, false, false, this*/ )) + this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - if (this.custom.async) setTimeout(done, this.custom.timeout) // 异步 - else done() // 同步 + if (this.custom.async) setTimeout(done, this.custom.timeout); + // 异步 + else done(); // 同步 function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - that.readyState = MockXMLHttpRequest.LOADING - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.status = 200 - that.statusText = HTTP_STATUS_CODES[200] + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify( - convert(that.custom.template, that.custom.options), - null, 4 - ) - - that.readyState = MockXMLHttpRequest.DONE - that.dispatchEvent(new Event('readystatechange' /*, false, false, that*/ )) - that.dispatchEvent(new Event('load' /*, false, false, that*/ )); - that.dispatchEvent(new Event('loadend' /*, false, false, that*/ )); + that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); + + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.dispatchEvent(new Event("load" /*, false, false, that*/)); + that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); } }, // https://xhr.spec.whatwg.org/#the-abort()-method @@ -305,94 +303,93 @@ Util.extend(MockXMLHttpRequest.prototype, { abort: function abort() { // 原生 XHR if (!this.match) { - this.custom.xhr.abort() - return + this.custom.xhr.abort(); + return; } // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT - this.dispatchEvent(new Event('abort', false, false, this)) - this.dispatchEvent(new Event('error', false, false, this)) - } -}) + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event("abort", false, false, this)); + this.dispatchEvent(new Event("error", false, false, this)); + }, +}); // 初始化 Response 相关的属性和方法 Util.extend(MockXMLHttpRequest.prototype, { - responseURL: '', + responseURL: "", status: MockXMLHttpRequest.UNSENT, - statusText: '', + statusText: "", // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function(name) { + getResponseHeader: function (name) { // 原生 XHR if (!this.match) { - return this.custom.xhr.getResponseHeader(name) + return this.custom.xhr.getResponseHeader(name); } // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()] + return this.custom.responseHeaders[name.toLowerCase()]; }, // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method // http://www.utf8-chartable.de/ - getAllResponseHeaders: function() { + getAllResponseHeaders: function () { // 原生 XHR if (!this.match) { - return this.custom.xhr.getAllResponseHeaders() + return this.custom.xhr.getAllResponseHeaders(); } // 拦截 XHR - var responseHeaders = this.custom.responseHeaders - var headers = '' + var responseHeaders = this.custom.responseHeaders; + var headers = ""; for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue - headers += h + ': ' + responseHeaders[h] + '\r\n' + if (!responseHeaders.hasOwnProperty(h)) continue; + headers += h + ": " + responseHeaders[h] + "\r\n"; } - return headers + return headers; }, - overrideMimeType: function( /*mime*/ ) {}, - responseType: '', // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + overrideMimeType: function (/*mime*/) {}, + responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' response: null, - responseText: '', - responseXML: null -}) + responseText: "", + responseXML: null, +}); // EventTarget Util.extend(MockXMLHttpRequest.prototype, { addEventListener: function addEventListener(type, handle) { - var events = this.custom.events - if (!events[type]) events[type] = [] - events[type].push(handle) + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); }, removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || [] + var handles = this.custom.events[type] || []; for (var i = 0; i < handles.length; i++) { if (handles[i] === handle) { - handles.splice(i--, 1) + handles.splice(i--, 1); } } }, dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || [] + var handles = this.custom.events[event.type] || []; for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event) + handles[i].call(this, event); } - var ontype = 'on' + event.type - if (this[ontype]) this[ontype](event) - } -}) + var ontype = "on" + event.type; + if (this[ontype]) this[ontype](event); + }, +}); // Inspired by jQuery function createNativeXMLHttpRequest() { - var isLocal = function() { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ - var ajaxLocation = location.href - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || [] - return rlocalProtocol.test(ajaxLocParts[1]) - }() + var isLocal = (function () { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]); + })(); - return window.ActiveXObject ? - (!isLocal && createStandardXHR() || createActiveXHR()) : createStandardXHR() + return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); function createStandardXHR() { try { @@ -407,36 +404,28 @@ function createNativeXMLHttpRequest() { } } - // 查找与请求参数匹配的数据模板:URL,Type function find(options) { - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType] - if ( - (!item.rurl || match(item.rurl, options.url)) && - (!item.rtype || match(item.rtype, options.type.toLowerCase())) - ) { + var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; + if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { // console.log('[mock]', options.url, '>', item.rurl) - return item + return item; } } function match(expected, actual) { - if (Util.type(expected) === 'string') { - return expected === actual + if (Util.type(expected) === "string") { + return expected === actual; } - if (Util.type(expected) === 'regexp') { - return expected.test(actual) + if (Util.type(expected) === "regexp") { + return expected.test(actual); } } - } // 数据模板 => 响应数据 function convert(item, options) { - return Util.isFunction(item.template) ? - item.template(options) : MockXMLHttpRequest.Mock.mock(item.template) + return Util.isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); } - -module.exports = MockXMLHttpRequest \ No newline at end of file +export { MockXMLHttpRequest }; diff --git a/yarn.lock b/yarn.lock index 16d4db66..c22ad9b4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1994,6 +1994,11 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" From 3c2eda178ef851cd716e4d240fb29560b8706c4f Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Thu, 10 Jun 2021 16:54:19 +0800 Subject: [PATCH 05/65] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20test=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 779 +++++++++++++++++++++++++++++++------ dist/mock.js | 779 +++++++++++++++++++++++++++++++------ src/mock/handler.js | 20 +- src/mock/parser.js | 69 ++-- src/mock/schema/schema.js | 4 +- src/mock/utils/extend.js | 67 ++-- test/bower.json | 11 + test/materiels/noop.html | 2 + test/materiels/noop.js | 1 + test/package.json | 6 + test/test.coveralls.js | 35 ++ test/test.mock.html | 58 +++ test/test.mock.mock.js | 62 +++ test/test.mock.random.js | 464 ++++++++++++++++++++++ test/test.mock.request.js | 445 +++++++++++++++++++++ test/test.mock.schema.js | 205 ++++++++++ test/test.mock.spec.dpd.js | 245 ++++++++++++ test/test.mock.spec.dtd.js | 677 ++++++++++++++++++++++++++++++++ test/test.mock.valid.js | 308 +++++++++++++++ test/valid.js | 264 +++++++++++++ 20 files changed, 4174 insertions(+), 327 deletions(-) create mode 100644 test/bower.json create mode 100644 test/materiels/noop.html create mode 100644 test/materiels/noop.js create mode 100644 test/package.json create mode 100644 test/test.coveralls.js create mode 100644 test/test.mock.html create mode 100644 test/test.mock.mock.js create mode 100644 test/test.mock.random.js create mode 100644 test/test.mock.request.js create mode 100644 test/test.mock.schema.js create mode 100644 test/test.mock.spec.dpd.js create mode 100644 test/test.mock.spec.dtd.js create mode 100644 test/test.mock.valid.js create mode 100644 test/valid.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 3bdd0b00..a16afcd4 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -50,17 +50,17 @@ var Mock = (function () { var Symbol = root.Symbol; /** Used for built-in method references. */ - var objectProto$5 = Object.prototype; + var objectProto$8 = Object.prototype; /** Used to check objects for own properties. */ - var hasOwnProperty$3 = objectProto$5.hasOwnProperty; + var hasOwnProperty$6 = objectProto$8.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ - var nativeObjectToString$1 = objectProto$5.toString; + var nativeObjectToString$1 = objectProto$8.toString; /** Built-in value references. */ var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; @@ -73,7 +73,7 @@ var Mock = (function () { * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { - var isOwn = hasOwnProperty$3.call(value, symToStringTag$1), + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { @@ -93,14 +93,14 @@ var Mock = (function () { } /** Used for built-in method references. */ - var objectProto$4 = Object.prototype; + var objectProto$7 = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ - var nativeObjectToString = objectProto$4.toString; + var nativeObjectToString = objectProto$7.toString; /** * Converts `value` to a string using `Object.prototype.toString`. @@ -295,6 +295,26 @@ var Mock = (function () { return value != null && (type == 'object' || type == 'function'); } + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', @@ -328,6 +348,137 @@ var Mock = (function () { return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + /** * Copies the values of `source` to `array`. * @@ -347,6 +498,102 @@ var Mock = (function () { return array; } + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991; @@ -371,6 +618,169 @@ var Mock = (function () { (value > -1 && value % 1 == 0 && value < length); } + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; @@ -434,8 +844,65 @@ var Mock = (function () { return value != null && isLength(value.length) && !isFunction(value); } + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + /** Used for built-in method references. */ - var objectProto$3 = Object.prototype; + var objectProto$4 = Object.prototype; /** * Checks if `value` is likely a prototype object. @@ -446,7 +913,7 @@ var Mock = (function () { */ function isPrototype(value) { var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$3; + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; return value === proto; } @@ -485,13 +952,13 @@ var Mock = (function () { } /** Used for built-in method references. */ - var objectProto$2 = Object.prototype; + var objectProto$3 = Object.prototype; /** Used to check objects for own properties. */ - var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; /** Built-in value references. */ - var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; + var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. @@ -512,7 +979,7 @@ var Mock = (function () { * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; @@ -685,10 +1152,10 @@ var Mock = (function () { var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; /** Used for built-in method references. */ - var objectProto$1 = Object.prototype; + var objectProto$2 = Object.prototype; /** Used to check objects for own properties. */ - var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. @@ -708,7 +1175,7 @@ var Mock = (function () { length = result.length; for (var key in value) { - if ((inherited || hasOwnProperty$1.call(value, key)) && + if ((inherited || hasOwnProperty$2.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || @@ -743,10 +1210,10 @@ var Mock = (function () { var nativeKeys = overArg(Object.keys, Object); /** Used for built-in method references. */ - var objectProto = Object.prototype; + var objectProto$1 = Object.prototype; /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. @@ -761,7 +1228,7 @@ var Mock = (function () { } var result = []; for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { result.push(key); } } @@ -800,6 +1267,115 @@ var Mock = (function () { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. @@ -1232,46 +1808,6 @@ var Mock = (function () { return !isNaN(parseFloat(value)) && isFinite(value); } - function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, - name, - src, - copy, - clone; - - if (length === 1) { - target = this; - i = 0; - } - - for (; i < length; i++) { - options = arguments[i]; - if (!options) continue; - - for (name in options) { - src = target[name]; - copy = options[name]; - - if (target === copy) continue; - if (copy === undefined) continue; - - if (isArray(copy) || isObject(copy)) { - if (isArray(copy)) clone = src && isArray(src) ? src : []; - if (isObject(copy)) clone = src && isObject(src) ? src : {}; - - target[name] = extend(clone, copy); - } else { - target[name] = copy; - } - } - } - - return target; - } - function each(obj, iterator, context) { // each var i, key; @@ -1340,7 +1876,7 @@ var Mock = (function () { values: values, noop: noop, type: type$1, - extend: extend, + extend: assignIn, isObjectOrArray: isObjectOrArray, isNumeric: isNumeric, isString: isString, @@ -7142,48 +7678,45 @@ var Mock = (function () { } ``` */ - /* jshint -W041 */ - var Parser = { - parse: function (name) { - name = name == undefined ? "" : name + ""; - - var parameters = (name || "").match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; + function parser$1(name) { + name = name == undefined ? "" : name + ""; - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - }, - }; + var parameters = (name || "").match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; + } // https://github.com/nuysoft/regexp @@ -8090,7 +8623,7 @@ var Mock = (function () { */ var Handler$1 = { - extend: extend, + extend: assignIn, }; // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart @@ -8432,7 +8965,7 @@ var Mock = (function () { */ var Handler = { - extend: extend, + extend: assignIn, }; /* @@ -8467,8 +9000,8 @@ var Mock = (function () { }; // console.log('path:', context.path.join('.'), template) - var rule = Parser.parse(name); - var type = type$1(template); + var rule = parser$1(name); + var type = type(template); var data; if (Handler[type]) { @@ -8590,7 +9123,7 @@ var Mock = (function () { }, object: function (options) { var result = {}, - keys$1, + keys, fnKeys, key, parsedKey, @@ -8600,11 +9133,11 @@ var Mock = (function () { // 'obj|min-max': {} /* jshint -W041 */ if (options.rule.min != undefined) { - keys$1 = keys(options.template); - keys$1 = shuffle(keys$1); - keys$1 = keys$1.slice(0, options.rule.count); - for (i = 0; i < keys$1.length; i++) { - key = keys$1[i]; + keys = Object.keys(options.template); + keys = shuffle(keys); + keys = keys.slice(0, options.rule.count); + for (i = 0; i < keys.length; i++) { + key = keys[i]; parsedKey = key.replace(Constant.RE_KEY, "$1"); options.context.path.push(parsedKey); options.context.templatePath.push(key); @@ -8621,16 +9154,16 @@ var Mock = (function () { } } else { // 'obj': {} - keys$1 = []; + keys = []; fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 for (key in options.template) { - (typeof options.template[key] === "function" ? fnKeys : keys$1).push(key); + (typeof options.template[key] === "function" ? fnKeys : keys).push(key); } - keys$1 = keys$1.concat(fnKeys); + keys = keys.concat(fnKeys); /* 会改变非函数属性的顺序 - keys = Util.keys(options.template) + keys = Object.keys(options.template) keys.sort(function(a, b) { var afn = typeof options.template[a] === 'function' var bfn = typeof options.template[b] === 'function' @@ -8640,8 +9173,8 @@ var Mock = (function () { }) */ - for (i = 0; i < keys$1.length; i++) { - key = keys$1[i]; + for (i = 0; i < keys.length; i++) { + key = keys[i]; parsedKey = key.replace(Constant.RE_KEY, "$1"); options.context.path.push(parsedKey); options.context.templatePath.push(key); @@ -8933,7 +9466,7 @@ var Mock = (function () { name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, template, type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: Parser.parse(name), + rule: parser$1.parse(name), path: path.slice(0), }; result.path.push(name === undefined ? "ROOT" : result.name); @@ -9499,12 +10032,12 @@ var Mock = (function () { }; MockXMLHttpRequest.setup = function (settings) { - extend(MockXMLHttpRequest._settings, settings); + assignIn(MockXMLHttpRequest._settings, settings); return MockXMLHttpRequest._settings; }; - extend(MockXMLHttpRequest, XHR_STATES); - extend(MockXMLHttpRequest.prototype, XHR_STATES); + assignIn(MockXMLHttpRequest, XHR_STATES); + assignIn(MockXMLHttpRequest.prototype, XHR_STATES); // 标记当前对象为 MockXMLHttpRequest MockXMLHttpRequest.prototype.mock = true; @@ -9513,13 +10046,13 @@ var Mock = (function () { MockXMLHttpRequest.prototype.match = false; // 初始化 Request 相关的属性和方法 - extend(MockXMLHttpRequest.prototype, { + assignIn(MockXMLHttpRequest.prototype, { // https://xhr.spec.whatwg.org/#the-open()-method // Sets the request method, request URL, and synchronous flag. open: function (method, url, async, username, password) { var that = this; - extend(this.custom, { + assignIn(this.custom, { method: method, url: url, async: typeof async === "boolean" ? async : true, @@ -9663,7 +10196,7 @@ var Mock = (function () { }); // 初始化 Response 相关的属性和方法 - extend(MockXMLHttpRequest.prototype, { + assignIn(MockXMLHttpRequest.prototype, { responseURL: "", status: MockXMLHttpRequest.UNSENT, statusText: "", @@ -9702,7 +10235,7 @@ var Mock = (function () { }); // EventTarget - extend(MockXMLHttpRequest.prototype, { + assignIn(MockXMLHttpRequest.prototype, { addEventListener: function addEventListener(type, handle) { var events = this.custom.events; if (!events[type]) events[type] = []; diff --git a/dist/mock.js b/dist/mock.js index e1b03307..7c323cfc 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -47,17 +47,17 @@ var root = freeGlobal || freeSelf || Function('return this')(); var Symbol = root.Symbol; /** Used for built-in method references. */ -var objectProto$5 = Object.prototype; +var objectProto$8 = Object.prototype; /** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$5.hasOwnProperty; +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ -var nativeObjectToString$1 = objectProto$5.toString; +var nativeObjectToString$1 = objectProto$8.toString; /** Built-in value references. */ var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; @@ -70,7 +70,7 @@ var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { - var isOwn = hasOwnProperty$3.call(value, symToStringTag$1), + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), tag = value[symToStringTag$1]; try { @@ -90,14 +90,14 @@ function getRawTag(value) { } /** Used for built-in method references. */ -var objectProto$4 = Object.prototype; +var objectProto$7 = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ -var nativeObjectToString = objectProto$4.toString; +var nativeObjectToString = objectProto$7.toString; /** * Converts `value` to a string using `Object.prototype.toString`. @@ -292,6 +292,26 @@ function isObject(value) { return value != null && (type == 'object' || type == 'function'); } +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag$1 = '[object Function]', @@ -325,6 +345,137 @@ function isFunction(value) { return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; } +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + /** * Copies the values of `source` to `array`. * @@ -344,6 +495,102 @@ function copyArray(source, array) { return array; } +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER$1 = 9007199254740991; @@ -368,6 +615,169 @@ function isIndex(value, length) { (value > -1 && value % 1 == 0 && value < length); } +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + /** Used as references for various `Number` constants. */ var MAX_SAFE_INTEGER = 9007199254740991; @@ -431,8 +841,65 @@ function isArrayLike(value) { return value != null && isLength(value.length) && !isFunction(value); } +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + /** Used for built-in method references. */ -var objectProto$3 = Object.prototype; +var objectProto$4 = Object.prototype; /** * Checks if `value` is likely a prototype object. @@ -443,7 +910,7 @@ var objectProto$3 = Object.prototype; */ function isPrototype(value) { var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$3; + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; return value === proto; } @@ -482,13 +949,13 @@ function baseIsArguments(value) { } /** Used for built-in method references. */ -var objectProto$2 = Object.prototype; +var objectProto$3 = Object.prototype; /** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$2.hasOwnProperty; +var hasOwnProperty$3 = objectProto$3.hasOwnProperty; /** Built-in value references. */ -var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; /** * Checks if `value` is likely an `arguments` object. @@ -509,7 +976,7 @@ var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; * // => false */ var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$2.call(value, 'callee') && + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee'); }; @@ -682,10 +1149,10 @@ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; /** Used for built-in method references. */ -var objectProto$1 = Object.prototype; +var objectProto$2 = Object.prototype; /** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$1.hasOwnProperty; +var hasOwnProperty$2 = objectProto$2.hasOwnProperty; /** * Creates an array of the enumerable property names of the array-like `value`. @@ -705,7 +1172,7 @@ function arrayLikeKeys(value, inherited) { length = result.length; for (var key in value) { - if ((inherited || hasOwnProperty$1.call(value, key)) && + if ((inherited || hasOwnProperty$2.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode. key == 'length' || @@ -740,10 +1207,10 @@ function overArg(func, transform) { var nativeKeys = overArg(Object.keys, Object); /** Used for built-in method references. */ -var objectProto = Object.prototype; +var objectProto$1 = Object.prototype; /** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; /** * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. @@ -758,7 +1225,7 @@ function baseKeys(object) { } var result = []; for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { result.push(key); } } @@ -797,6 +1264,115 @@ function keys$1(object) { return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); } +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. @@ -1229,46 +1805,6 @@ function isNumeric(value) { return !isNaN(parseFloat(value)) && isFinite(value); } -function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, - name, - src, - copy, - clone; - - if (length === 1) { - target = this; - i = 0; - } - - for (; i < length; i++) { - options = arguments[i]; - if (!options) continue; - - for (name in options) { - src = target[name]; - copy = options[name]; - - if (target === copy) continue; - if (copy === undefined) continue; - - if (isArray(copy) || isObject(copy)) { - if (isArray(copy)) clone = src && isArray(src) ? src : []; - if (isObject(copy)) clone = src && isObject(src) ? src : {}; - - target[name] = extend(clone, copy); - } else { - target[name] = copy; - } - } - } - - return target; -} - function each(obj, iterator, context) { // each var i, key; @@ -1337,7 +1873,7 @@ var Util = /*#__PURE__*/Object.freeze({ values: values, noop: noop, type: type$1, - extend: extend, + extend: assignIn, isObjectOrArray: isObjectOrArray, isNumeric: isNumeric, isString: isString, @@ -7139,48 +7675,45 @@ var Random = /*#__PURE__*/Object.freeze({ } ``` */ - /* jshint -W041 */ -var Parser = { - parse: function (name) { - name = name == undefined ? "" : name + ""; - - var parameters = (name || "").match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; +function parser$1(name) { + name = name == undefined ? "" : name + ""; - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - }, -}; + var parameters = (name || "").match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; +} // https://github.com/nuysoft/regexp @@ -8087,7 +8620,7 @@ var parser = (function () { */ var Handler$1 = { - extend: extend, + extend: assignIn, }; // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart @@ -8429,7 +8962,7 @@ var RE = /*#__PURE__*/Object.freeze({ */ var Handler = { - extend: extend, + extend: assignIn, }; /* @@ -8464,8 +8997,8 @@ Handler.gen = function (template, name, context) { }; // console.log('path:', context.path.join('.'), template) - var rule = Parser.parse(name); - var type = type$1(template); + var rule = parser$1(name); + var type = type(template); var data; if (Handler[type]) { @@ -8587,7 +9120,7 @@ Handler.extend({ }, object: function (options) { var result = {}, - keys$1, + keys, fnKeys, key, parsedKey, @@ -8597,11 +9130,11 @@ Handler.extend({ // 'obj|min-max': {} /* jshint -W041 */ if (options.rule.min != undefined) { - keys$1 = keys(options.template); - keys$1 = shuffle(keys$1); - keys$1 = keys$1.slice(0, options.rule.count); - for (i = 0; i < keys$1.length; i++) { - key = keys$1[i]; + keys = Object.keys(options.template); + keys = shuffle(keys); + keys = keys.slice(0, options.rule.count); + for (i = 0; i < keys.length; i++) { + key = keys[i]; parsedKey = key.replace(Constant.RE_KEY, "$1"); options.context.path.push(parsedKey); options.context.templatePath.push(key); @@ -8618,16 +9151,16 @@ Handler.extend({ } } else { // 'obj': {} - keys$1 = []; + keys = []; fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 for (key in options.template) { - (typeof options.template[key] === "function" ? fnKeys : keys$1).push(key); + (typeof options.template[key] === "function" ? fnKeys : keys).push(key); } - keys$1 = keys$1.concat(fnKeys); + keys = keys.concat(fnKeys); /* 会改变非函数属性的顺序 - keys = Util.keys(options.template) + keys = Object.keys(options.template) keys.sort(function(a, b) { var afn = typeof options.template[a] === 'function' var bfn = typeof options.template[b] === 'function' @@ -8637,8 +9170,8 @@ Handler.extend({ }) */ - for (i = 0; i < keys$1.length; i++) { - key = keys$1[i]; + for (i = 0; i < keys.length; i++) { + key = keys[i]; parsedKey = key.replace(Constant.RE_KEY, "$1"); options.context.path.push(parsedKey); options.context.templatePath.push(key); @@ -8930,7 +9463,7 @@ function toJSONSchema(template, name, path = [] /* Internal Use Only */) { name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, template, type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: Parser.parse(name), + rule: parser$1.parse(name), path: path.slice(0), }; result.path.push(name === undefined ? "ROOT" : result.name); @@ -9496,12 +10029,12 @@ MockXMLHttpRequest._settings = { }; MockXMLHttpRequest.setup = function (settings) { - extend(MockXMLHttpRequest._settings, settings); + assignIn(MockXMLHttpRequest._settings, settings); return MockXMLHttpRequest._settings; }; -extend(MockXMLHttpRequest, XHR_STATES); -extend(MockXMLHttpRequest.prototype, XHR_STATES); +assignIn(MockXMLHttpRequest, XHR_STATES); +assignIn(MockXMLHttpRequest.prototype, XHR_STATES); // 标记当前对象为 MockXMLHttpRequest MockXMLHttpRequest.prototype.mock = true; @@ -9510,13 +10043,13 @@ MockXMLHttpRequest.prototype.mock = true; MockXMLHttpRequest.prototype.match = false; // 初始化 Request 相关的属性和方法 -extend(MockXMLHttpRequest.prototype, { +assignIn(MockXMLHttpRequest.prototype, { // https://xhr.spec.whatwg.org/#the-open()-method // Sets the request method, request URL, and synchronous flag. open: function (method, url, async, username, password) { var that = this; - extend(this.custom, { + assignIn(this.custom, { method: method, url: url, async: typeof async === "boolean" ? async : true, @@ -9660,7 +10193,7 @@ extend(MockXMLHttpRequest.prototype, { }); // 初始化 Response 相关的属性和方法 -extend(MockXMLHttpRequest.prototype, { +assignIn(MockXMLHttpRequest.prototype, { responseURL: "", status: MockXMLHttpRequest.UNSENT, statusText: "", @@ -9699,7 +10232,7 @@ extend(MockXMLHttpRequest.prototype, { }); // EventTarget -extend(MockXMLHttpRequest.prototype, { +assignIn(MockXMLHttpRequest.prototype, { addEventListener: function addEventListener(type, handle) { var events = this.custom.events; if (!events[type]) events[type] = []; diff --git a/src/mock/handler.js b/src/mock/handler.js index 8599594e..6870d6f6 100644 --- a/src/mock/handler.js +++ b/src/mock/handler.js @@ -32,14 +32,14 @@ */ import Constant from "./constant.js"; -import * as Util from "./util.js"; -import Parser from "./parser.js"; +import { type, isNumeric, extend } from "./util.js"; +import { parser as Parser } from "./parser.js"; import { bool, character, pick, shuffle, string } from "./random/index.js"; import * as Random from "./random/index.js"; import * as RE from "./regexp/index.js"; var Handler = { - extend: Util.extend, + extend: extend, }; /* @@ -74,8 +74,8 @@ Handler.gen = function (template, name, context) { }; // console.log('path:', context.path.join('.'), template) - var rule = Parser.parse(name); - var type = Util.type(template); + var rule = Parser(name); + var type = type(template); var data; if (Handler[type]) { @@ -207,7 +207,7 @@ Handler.extend({ // 'obj|min-max': {} /* jshint -W041 */ if (options.rule.min != undefined) { - keys = Util.keys(options.template); + keys = Object.keys(options.template); keys = shuffle(keys); keys = keys.slice(0, options.rule.count); for (i = 0; i < keys.length; i++) { @@ -237,7 +237,7 @@ Handler.extend({ /* 会改变非函数属性的顺序 - keys = Util.keys(options.template) + keys = Object.keys(options.template) keys.sort(function(a, b) { var afn = typeof options.template[a] === 'function' var bfn = typeof options.template[b] === 'function' @@ -264,7 +264,7 @@ Handler.extend({ options.context.templatePath.pop(); // 'id|+1': 1 inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && Util.type(options.template[key]) === "number") { + if (inc && inc[2] && type(options.template[key]) === "number") { options.template[key] += parseInt(inc[2], 10); } } @@ -339,7 +339,7 @@ Handler.extend({ result = phed; break; - if (Util.isNumeric(phed)) { + if (isNumeric(phed)) { result = parseFloat(phed, 10); break; } @@ -452,7 +452,7 @@ Handler.extend({ } var handle = Random[key] || Random[lkey] || Random[okey]; - switch (Util.type(handle)) { + switch (type(handle)) { case "array": // 自动从数组中取一个,例如 @areas return pick(handle); diff --git a/src/mock/parser.js b/src/mock/parser.js index 7deebb4a..f5cfa3c3 100644 --- a/src/mock/parser.js +++ b/src/mock/parser.js @@ -24,45 +24,42 @@ import Constant from "./constant.js"; import { integer } from "./random/index.js"; - /* jshint -W041 */ -export default { - parse: function (name) { - name = name == undefined ? "" : name + ""; +export function parser(name) { + name = name == undefined ? "" : name + ""; - var parameters = (name || "").match(Constant.RE_KEY); + var parameters = (name || "").match(Constant.RE_KEY); - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - }, -}; + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; +} diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index ceb284cc..3683dbad 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -7,7 +7,7 @@ */ import Constant from "../constant.js"; import * as Util from "../util.js"; -import Parser from "../parser.js"; +import { parser } from "../parser.js"; function toJSONSchema(template, name, path = [] /* Internal Use Only */) { // type rule properties items @@ -15,7 +15,7 @@ function toJSONSchema(template, name, path = [] /* Internal Use Only */) { name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, template, type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: Parser.parse(name), + rule: parser.parse(name), path: path.slice(0), }; result.path.push(name === undefined ? "ROOT" : result.name); diff --git a/src/mock/utils/extend.js b/src/mock/utils/extend.js index 513819a9..a7f5299a 100644 --- a/src/mock/utils/extend.js +++ b/src/mock/utils/extend.js @@ -1,40 +1,41 @@ -import { isObject, isArray } from "./type.js"; -export function extend() { - var target = arguments[0] || {}, - i = 1, - length = arguments.length, - options, - name, - src, - copy, - clone; +// import { isObject, isArray } from "./type.js"; +// export function extend() { +// var target = arguments[0] || {}, +// i = 1, +// length = arguments.length, +// options, +// name, +// src, +// copy, +// clone; - if (length === 1) { - target = this; - i = 0; - } +// if (length === 1) { +// target = this; +// i = 0; +// } - for (; i < length; i++) { - options = arguments[i]; - if (!options) continue; +// for (; i < length; i++) { +// options = arguments[i]; +// if (!options) continue; - for (name in options) { - src = target[name]; - copy = options[name]; +// for (name in options) { +// src = target[name]; +// copy = options[name]; - if (target === copy) continue; - if (copy === undefined) continue; +// if (target === copy) continue; +// if (copy === undefined) continue; - if (isArray(copy) || isObject(copy)) { - if (isArray(copy)) clone = src && isArray(src) ? src : []; - if (isObject(copy)) clone = src && isObject(src) ? src : {}; +// if (isArray(copy) || isObject(copy)) { +// if (isArray(copy)) clone = src && isArray(src) ? src : []; +// if (isObject(copy)) clone = src && isObject(src) ? src : {}; - target[name] = extend(clone, copy); - } else { - target[name] = copy; - } - } - } +// target[name] = extend(clone, copy); +// } else { +// target[name] = copy; +// } +// } +// } - return target; -} +// return target; +// } +export { assignIn as extend } from "lodash-es"; diff --git a/test/bower.json b/test/bower.json new file mode 100644 index 00000000..3485bbe8 --- /dev/null +++ b/test/bower.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "dependencies": {}, + "devDependencies": { + "requirejs": "*", + "mocha": "*", + "chai": "*", + "underscore": "*", + "jquery": "~2.1.1" + } +} diff --git a/test/materiels/noop.html b/test/materiels/noop.html new file mode 100644 index 00000000..bdef09c7 --- /dev/null +++ b/test/materiels/noop.html @@ -0,0 +1,2 @@ + +

noop.html
\ No newline at end of file diff --git a/test/materiels/noop.js b/test/materiels/noop.js new file mode 100644 index 00000000..247b5720 --- /dev/null +++ b/test/materiels/noop.js @@ -0,0 +1 @@ +(function noop() {})(); \ No newline at end of file diff --git a/test/package.json b/test/package.json new file mode 100644 index 00000000..b26a3b84 --- /dev/null +++ b/test/package.json @@ -0,0 +1,6 @@ +{ + "name": "test", + "dependencies": { + "chai": "^1.10.0" + } +} diff --git a/test/test.coveralls.js b/test/test.coveralls.js new file mode 100644 index 00000000..6166cb79 --- /dev/null +++ b/test/test.coveralls.js @@ -0,0 +1,35 @@ +/* global require */ +/* global describe, it */ +var assert = require("assert") +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.html b/test/test.mock.html new file mode 100644 index 00000000..8c9c6552 --- /dev/null +++ b/test/test.mock.html @@ -0,0 +1,58 @@ + + + + Test: Mock + + + + + + +
+ + + + + + + + +
+
+

+    

+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+
\ No newline at end of file
diff --git a/test/test.mock.mock.js b/test/test.mock.mock.js
new file mode 100644
index 00000000..1461e5a8
--- /dev/null
+++ b/test/test.mock.mock.js
@@ -0,0 +1,62 @@
+/* global require, chai, describe, before, it */
+// 数据占位符定义(Data Placeholder Definition,DPD)
+var expect = chai.expect
+var Mock, $, _
+
+describe('Mock.mock', function() {
+    before(function(done) {
+        require(['mock', 'underscore', 'jquery'], function() {
+            Mock = arguments[0]
+            _ = arguments[1]
+            $ = arguments[2]
+            expect(Mock).to.not.equal(undefined)
+            expect(_).to.not.equal(undefined)
+            expect($).to.not.equal(undefined)
+            done()
+        })
+    })
+
+    describe('Mock.mock( String )', function() {
+        it('@EMAIL', function() {
+            var data = Mock.mock(this.test.title)
+            expect(data).to.not.equal(this.test.title)
+            this.test.title += ' => ' + data
+        })
+    })
+    describe('Mock.mock( {} )', function() {
+        it('', function() {
+            var tpl = {
+                'list|1-10': [{
+                    'id|+1': 1,
+                    'email': '@EMAIL'
+                }]
+            }
+            var data = Mock.mock(tpl)
+            this.test.title = JSON.stringify(tpl /*, null, 4*/ ) + ' => ' + JSON.stringify(data /*, null, 4*/ )
+            expect(data).to.have.property('list')
+                .that.be.an('array').with.length.within(1, 10)
+            _.each(data.list, function(item, index, list) {
+                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
+            })
+        })
+    })
+    describe('Mock.mock( function() )', function() {
+        it('', function() {
+            var fn = function() {
+                return Mock.mock({
+                    'list|1-10': [{
+                        'id|+1': 1,
+                        'email': '@EMAIL'
+                    }]
+                })
+            }
+            var data = Mock.mock(fn)
+            this.test.title = fn.toString() + ' => ' + JSON.stringify(data /*, null, 4*/ )
+            expect(data).to.have.property('list')
+                .that.be.an('array').with.length.within(1, 10)
+            _.each(data.list, function(item, index, list) {
+                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
+            })
+        })
+    })
+})
\ No newline at end of file
diff --git a/test/test.mock.random.js b/test/test.mock.random.js
new file mode 100644
index 00000000..bb5f9df7
--- /dev/null
+++ b/test/test.mock.random.js
@@ -0,0 +1,464 @@
+/* global require, chai, describe, before, it */
+/* global window */
+// 数据占位符定义(Data Placeholder Definition,DPD)
+var expect = chai.expect
+var Mock, Random, $, _, Random
+
+/* jshint -W061 */
+describe('Random', function() {
+    before(function(done) {
+        require(['mock', 'underscore', 'jquery'], function() {
+            Mock = arguments[0]
+            window.Random = Random = Mock.Random
+            _ = arguments[1]
+            $ = arguments[2]
+            expect(Mock).to.not.equal(undefined)
+            expect(_).to.not.equal(undefined)
+            expect($).to.not.equal(undefined)
+            done()
+        })
+    })
+
+    function stringify(json) {
+        return JSON.stringify(json /*, null, 4*/ )
+    }
+
+    function doit(expression, validator) {
+        it('', function() {
+            // for (var i = 0; i < 1; i++) {}
+            var data = eval(expression)
+            validator(data)
+            this.test.title = stringify(expression) + ' => ' + stringify(data)
+        })
+    }
+
+    describe('Basic', function() {
+        doit('Random.boolean()', function(data) {
+            expect(data).to.be.a('boolean')
+        })
+
+        doit('Random.natural()', function(data) {
+            expect(data).to.be.a('number').within(0, 9007199254740992)
+        })
+        doit('Random.natural(1, 3)', function(data) {
+            expect(data).to.be.a('number').within(1, 3)
+        })
+        doit('Random.natural(1)', function(data) {
+            expect(data).to.be.a('number').least(1)
+        })
+
+        doit('Random.integer()', function(data) {
+            expect(data).to.be.a('number').within(-9007199254740992, 9007199254740992)
+        })
+        doit('Random.integer(-10, 10)', function(data) {
+            expect(data).to.be.a('number').within(-10, 10)
+        })
+
+        // 1 整数部分 2 小数部分
+        var RE_FLOAT = /(\-?\d+)\.?(\d+)?/
+
+        function validFloat(float, min, max, dmin, dmax) {
+            RE_FLOAT.lastIndex = 0
+            var parts = RE_FLOAT.exec(float + '')
+
+            expect(+parts[1]).to.be.a('number').within(min, max)
+
+            /* jshint -W041 */
+            if (parts[2] != undefined) {
+                expect(parts[2]).to.have.length.within(dmin, dmax)
+            }
+        }
+
+        doit('Random.float()', function(data) {
+            validFloat(data, -9007199254740992, 9007199254740992, 0, 17)
+        })
+        doit('Random.float(0)', function(data) {
+            validFloat(data, 0, 9007199254740992, 0, 17)
+        })
+        doit('Random.float(60, 100)', function(data) {
+            validFloat(data, 60, 100, 0, 17)
+        })
+        doit('Random.float(60, 100, 3)', function(data) {
+            validFloat(data, 60, 100, 3, 17)
+        })
+        doit('Random.float(60, 100, 3, 5)', function(data) {
+            validFloat(data, 60, 100, 3, 5)
+        })
+
+        var CHARACTER_LOWER = 'abcdefghijklmnopqrstuvwxyz'
+        var CHARACTER_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+        var CHARACTER_NUMBER = '0123456789'
+        var CHARACTER_SYMBOL = '!@#$%^&*()[]'
+        doit('Random.character()', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(
+                CHARACTER_LOWER +
+                CHARACTER_UPPER +
+                CHARACTER_NUMBER +
+                CHARACTER_SYMBOL
+            ).to.include(data)
+        })
+        doit('Random.character("lower")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_LOWER).to.include(data)
+        })
+        doit('Random.character("upper")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_UPPER).to.include(data)
+        })
+        doit('Random.character("number")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_NUMBER).to.include(data)
+        })
+        doit('Random.character("symbol")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_SYMBOL).to.include(data)
+        })
+        doit('Random.character("aeiou")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect('aeiou').to.include(data)
+        })
+
+        doit('Random.string()', function(data) {
+            expect(data).to.be.a('string').with.length.within(3, 7)
+        })
+        doit('Random.string(5)', function(data) {
+            expect(data).to.be.a('string').with.length(5)
+        })
+        doit('Random.string("lower", 5)', function(data) {
+            expect(data).to.be.a('string').with.length(5)
+            for (var i = 0; i < data.length; i++) {
+                expect(CHARACTER_LOWER).to.include(data[i])
+            }
+        })
+        doit('Random.string(7, 10)', function(data) {
+            expect(data).to.be.a('string').with.length.within(7, 10)
+        })
+        doit('Random.string("aeiou", 1, 3)', function(data) {
+            expect(data).to.be.a('string').with.length.within(1, 3)
+            for (var i = 0; i < data.length; i++) {
+                expect('aeiou').to.include(data[i])
+            }
+        })
+
+        doit('Random.range(10)', function(data) {
+            expect(data).to.be.an('array').with.length(10)
+        })
+        doit('Random.range(3, 7)', function(data) {
+            expect(data).to.be.an('array').deep.equal([3, 4, 5, 6])
+        })
+        doit('Random.range(1, 10, 2)', function(data) {
+            expect(data).to.be.an('array').deep.equal([1, 3, 5, 7, 9])
+        })
+        doit('Random.range(1, 10, 3)', function(data) {
+            expect(data).to.be.an('array').deep.equal([1, 4, 7])
+        })
+
+        var RE_DATE = /\d{4}-\d{2}-\d{2}/
+        var RE_TIME = /\d{2}:\d{2}:\d{2}/
+        var RE_DATETIME = new RegExp(RE_DATE.source + ' ' + RE_TIME.source)
+
+        doit('Random.date()', function(data) {
+            expect(RE_DATE.test(data)).to.be.true
+        })
+
+        doit('Random.time()', function(data) {
+            expect(RE_TIME.test(data)).to.be.true
+        })
+
+        doit('Random.datetime()', function(data) {
+            expect(RE_DATETIME.test(data)).to.be.true
+        })
+        doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("yy-MM-dd HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("y-MM-dd HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("y-M-d H:m:s")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function(data) {
+            expect(data).to.be.ok
+        })
+
+        doit('Random.now()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("year")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("month")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("day")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("hour")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("minute")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("second")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("week")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function(data) {
+            expect(data).to.be.ok
+        })
+    })
+
+    describe('Image', function() {
+        doit('Random.image()', function(data) {
+            expect(data).to.be.ok
+        })
+        it('Random.dataImage()', function() {
+            var data = eval(this.test.title)
+            expect(data).to.be.ok
+            this.test.title = stringify(this.test.title) + ' => '
+        })
+        it('Random.dataImage("200x100")', function() {
+            var data = eval(this.test.title)
+            expect(data).to.be.ok
+            this.test.title = stringify(this.test.title) + ' => '
+        })
+        it('Random.dataImage("200x100", "Hello Mock.js!")', function() {
+            var data = eval(this.test.title)
+            expect(data).to.be.ok
+            this.test.title = stringify(this.test.title) + ' => '
+        })
+    })
+
+    var RE_COLOR = /^#[0-9a-fA-F]{6}$/
+    var RE_COLOR_RGB = /^rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
+    var RE_COLOR_RGBA = /^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0\.\d{1,2}\)$/
+    var RE_COLOR_HSL = /^hsl\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
+    describe('Color', function() {
+        doit('Random.color()', function(data) {
+            expect(RE_COLOR.test(data)).to.true
+        })
+        doit('Random.hex()', function(data) {
+            expect(RE_COLOR.test(data)).to.true
+        })
+        doit('Random.rgb()', function(data) {
+            expect(RE_COLOR_RGB.test(data)).to.true
+        })
+        doit('Random.rgba()', function(data) {
+            expect(RE_COLOR_RGBA.test(data)).to.true
+        })
+        doit('Random.hsl()', function(data) {
+            expect(RE_COLOR_HSL.test(data)).to.true
+        })
+    })
+
+    describe('Text', function() {
+        doit('Random.paragraph()', function(data) {
+            expect(data.split('.').length - 1).to.within(3, 7)
+        })
+        doit('Random.paragraph(2)', function(data) {
+            expect(data.split('.').length - 1).to.equal(2)
+        })
+        doit('Random.paragraph(1, 3)', function(data) {
+            expect(data.split('.').length - 1).to.within(1, 3)
+        })
+
+        doit('Random.sentence()', function(data) {
+            expect(data[0]).to.equal(data.toUpperCase()[0])
+            expect(data.split(' ').length).to.within(12, 18)
+        })
+        doit('Random.sentence(4)', function(data) {
+            expect(data[0]).to.equal(data.toUpperCase()[0])
+            expect(data.split(' ').length).to.equal(4)
+        })
+        doit('Random.sentence(3, 5)', function(data) {
+            expect(data[0]).to.equal(data.toUpperCase()[0])
+            expect(data.split(' ').length).to.within(3, 5)
+        })
+
+        doit('Random.word()', function(data) {
+            expect(data).to.have.length.within(3, 10)
+        })
+        doit('Random.word(4)', function(data) {
+            expect(data).to.have.length(4)
+        })
+        doit('Random.word(3, 5)', function(data) {
+            expect(data).to.have.length.within(3, 5)
+        })
+
+        doit('Random.title()', function(data) {
+            var words = data.split(' ')
+            _.each(words, function(word) {
+                expect(word[0]).to.equal(word[0].toUpperCase())
+            })
+            expect(words).to.have.length.within(3, 7)
+        })
+        doit('Random.title(4)', function(data) {
+            var words = data.split(' ')
+            _.each(words, function(word) {
+                expect(word[0]).to.equal(word[0].toUpperCase())
+            })
+            expect(words).to.have.length(4)
+        })
+        doit('Random.title(3, 5)', function(data) {
+            var words = data.split(' ')
+            _.each(words, function(word) {
+                expect(word[0]).to.equal(word[0].toUpperCase())
+            })
+            expect(words).to.have.length.within(3, 5)
+        })
+    })
+
+    describe('Name', function() {
+        doit('Random.first()', function(data) {
+            expect(data[0]).to.equal(data[0].toUpperCase())
+        })
+        doit('Random.last()', function(data) {
+            expect(data[0]).to.equal(data[0].toUpperCase())
+        })
+        doit('Random.name()', function(data) {
+            var words = data.split(' ')
+            expect(words).to.have.length(2)
+            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
+            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
+        })
+        doit('Random.name(true)', function(data) {
+            var words = data.split(' ')
+            expect(words).to.have.length(3)
+            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
+            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
+            expect(words[2][0]).to.equal(words[2][0].toUpperCase())
+        })
+
+        doit('Random.cfirst()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.clast()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.cname()', function(data) {
+            expect(data).to.be.ok
+        })
+    })
+
+    var RE_URL = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/
+    var RE_IP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
+    describe('Web', function() {
+        doit('Random.url()', function(data) {
+            expect(RE_URL.test(data)).to.be.true
+        })
+        doit('Random.domain()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.domain("com")', function(data) {
+            expect(data).to.include('.com')
+        })
+        doit('Random.tld()', function(data) {
+            expect(data).to.be.ok
+        })
+
+        doit('Random.email()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.email("nuysoft.com")', function(data) {
+            expect(data).to.include('@nuysoft.com')
+        })
+        doit('Random.ip()', function(data) {
+            expect(RE_IP.test(data)).to.be.true
+        })
+    })
+    describe('Address', function() {
+        doit('Random.region()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.province()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.city()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.city(true)', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.county()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.county(true)', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.zip()', function(data) {
+            expect(data).to.be.ok
+        })
+    })
+    describe('Helpers', function() {
+        doit('Random.capitalize()', function(data) {
+            expect(data).to.equal('Undefined')
+        })
+        doit('Random.capitalize("hello")', function(data) {
+            expect(data).to.equal('Hello')
+        })
+
+        doit('Random.upper()', function(data) {
+            expect(data).to.equal('UNDEFINED')
+        })
+        doit('Random.upper("hello")', function(data) {
+            expect(data).to.equal('HELLO')
+        })
+
+        doit('Random.lower()', function(data) {
+            expect(data).to.equal('undefined')
+        })
+        doit('Random.lower("HELLO")', function(data) {
+            expect(data).to.equal('hello')
+        })
+
+        doit('Random.pick()', function(data) {
+            expect(data).to.be.undefined
+        })
+        doit('Random.pick("a", "e", "i", "o", "u")', function(data) {
+            expect(["a", "e", "i", "o", "u"]).to.include(data)
+        })
+        doit('Random.pick(["a", "e", "i", "o", "u"])', function(data) {
+            expect(["a", "e", "i", "o", "u"]).to.include(data)
+        })
+        doit('Random.pick(["a", "e", "i", "o", "u"], 3)', function(data) {
+            expect(data).to.be.an('array').with.length(3)
+        })
+        doit('Random.pick(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
+            expect(data).to.be.an('array').with.length.within(1, 5)
+        })
+
+        doit('Random.shuffle()', function(data) {
+            expect(data).to.deep.equal([])
+        })
+        doit('Random.shuffle(["a", "e", "i", "o", "u"])', function(data) {
+            expect(data.join('')).to.not.equal('aeiou')
+            expect(data.sort().join('')).to.equal('aeiou')
+        })
+        doit('Random.shuffle(["a", "e", "i", "o", "u"], 3)', function(data) {
+            expect(data).to.be.an('array').with.length(3)
+        })
+        doit('Random.shuffle(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
+            expect(data).to.be.an('array').with.length.within(1, 5)
+        })
+    })
+
+    var RE_GUID = /[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}/
+    describe('Miscellaneous', function() {
+        doit('Random.guid()', function(data) {
+            expect(data).to.be.a('string').with.length(36)
+            expect(RE_GUID.test(data)).to.be.true
+        })
+        doit('Random.id()', function(data) {
+            expect(data).to.be.a('string').with.length(18)
+        })
+    })
+})
\ No newline at end of file
diff --git a/test/test.mock.request.js b/test/test.mock.request.js
new file mode 100644
index 00000000..42000d74
--- /dev/null
+++ b/test/test.mock.request.js
@@ -0,0 +1,445 @@
+/* global console, require, chai, describe, before, it */
+// 数据占位符定义(Data Placeholder Definition,DPD)
+var expect = chai.expect
+var Mock, $, _
+
+describe('Request', function() {
+    before(function(done) {
+        require(['mock', 'underscore', 'jquery'], function() {
+            Mock = arguments[0]
+            _ = arguments[1]
+            $ = arguments[2]
+            expect(Mock).to.not.equal(undefined)
+            expect(_).to.not.equal(undefined)
+            expect($).to.not.equal(undefined)
+            done()
+        })
+    })
+
+    function stringify(json) {
+        return JSON.stringify(json /*, null, 4*/ )
+    }
+
+    describe('jQuery.ajax()', function() {
+        it('', function(done) {
+            var that = this
+            var url = Math.random()
+            $.ajax({
+                url: url,
+                dataType: 'json'
+            }).done(function( /*data, textStatus, jqXHR*/ ) {
+                // 不会进入
+            }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) {
+                // 浏览器 || PhantomJS
+                expect([404, 0]).to.include(jqXHR.status)
+                that.test.title += url + ' => ' + jqXHR.status
+            }).always(function() {
+                done()
+            })
+        })
+    })
+    describe('jQuery.getScript()', function() {
+        it('', function(done) {
+            var that = this
+            var url = './materiels/noop.js'
+            $.getScript(url, function(script, textStatus, jqXHR) {
+                expect(script).to.be.ok
+                that.test.title += url + ' => ' + jqXHR.status + ' ' + textStatus
+                done()
+            })
+        })
+    })
+    describe('jQuery.load()', function() {
+        it('', function(done) {
+            var that = this
+            var url = './materiels/noop.html'
+            $('
').load(url, function(responseText /*, textStatus, jqXHR*/ ) { + expect(responseText).to.be.ok + that.test.title += url + ' => ' + responseText + done() + }) + }) + }) + describe('jQuery.ajax() XHR Fields', function() { + it('', function(done) { + var that = this + var url = Math.random() + var xhr + $.ajax({ + xhr: function() { + xhr = $.ajaxSettings.xhr() + return xhr + }, + url: url, + dataType: 'json', + xhrFields: { + timeout: 123, + withCredentials: true + } + }).done(function( /*data, textStatus, jqXHR*/ ) { + // 不会进入 + }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) { + // 浏览器 || PhantomJS + expect([404, 0]).to.include(jqXHR.status) + that.test.title += url + ' => ' + jqXHR.status + expect(xhr.timeout).to.be.equal(123) + expect(xhr.withCredentials).to.be.equal(true) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, template )', function() { + it('', function(done) { + var that = this + var url = 'rurl_template.json' + + Mock.mock(/rurl_template.json/, { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + + Mock.setup({ + // timeout: 100, + timeout: '10-50', + }) + $.ajax({ + url: url, + dataType: 'json' + }).done(function(data /*, textStatus, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, function(options) )', function() { + it('', function(done) { + var that = this + var url = 'rurl_function.json' + + Mock.mock(/rurl_function\.json/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + }) + + $.ajax({ + url: url, + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, function(options) ) + GET + data', function() { + it('', function(done) { + var that = this + var url = 'rurl_function.json' + + Mock.mock(/rurl_function\.json/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url + '?foo=1') + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + }) + + $.ajax({ + url: url, + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, function(options) ) + POST + data', function() { + it('', function(done) { + var that = this + var url = 'rurl_function.json' + + Mock.mock(/rurl_function\.json/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(options.type).to.be.equal('POST') + expect(options.body).to.be.equal('foo=1') + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + }) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, rtype, template )', function() { + it('', function(done) { + var that = this + var url = 'rurl_rtype_template.json' + var count = 0 + + Mock.mock(/rurl_rtype_template\.json/, 'get', { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL', + type: 'get' + }] + }) + Mock.mock(/rurl_rtype_template\.json/, 'post', { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL', + type: 'post' + }] + }) + + $.ajax({ + url: url, + type: 'get', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'GET ' + url + ' => ' + stringify(data) + ' ' + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + expect(item).to.have.property('type').equal('get') + }) + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'POST ' + url + ' => ' + stringify(data) + ' ' + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + expect(item).to.have.property('type').equal('post') + }) + }).done(success).always(complete) + + function success( /*data*/ ) { + count++ + } + + function complete() { + if (count === 2) done() + } + + }) + }) + + describe('Mock.mock( rurl, rtype, function(options) )', function() { + it('', function(done) { + var that = this + var url = 'rurl_rtype_function.json' + var count = 0 + + Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return { + type: 'get' + } + }) + Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(['POST', 'PUT']).to.include(options.type) + expect(options.body).to.be.equal(null) + return { + type: options.type.toLowerCase() + } + }) + + $.ajax({ + url: url, + type: 'get', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'GET ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'get') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'POST ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'post') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'put', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'PUT ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'put') + }).done(success).always(complete) + + + function success( /*data*/ ) { + count++ + } + + function complete() { + if (count === 3) done() + } + + }) + }) + describe('Mock.mock( rurl, rtype, function(options) ) + data', function() { + it('', function(done) { + var that = this + var url = 'rurl_rtype_function.json' + var count = 0 + + Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url + '?foo=1') + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return { + type: 'get' + } + }) + Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(['POST', 'PUT']).to.include(options.type) + expect(options.body).to.be.equal('foo=1') + return { + type: options.type.toLowerCase() + } + }) + + $.ajax({ + url: url, + type: 'get', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'GET ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'get') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'POST ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'post') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'put', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'PUT ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'put') + }).done(success).always(complete) + + + function success( /*data*/ ) { + count++ + } + + function complete() { + if (count === 3) done() + } + + }) + }) + describe('#105 addEventListener', function() { + it('addEventListene => addEventListener', function(done) { + var xhr = new Mock.XHR() + expect(xhr.addEventListener).to.not.equal(undefined) + expect(xhr.addEventListene).to.equal(undefined) + done() + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.schema.js b/test/test.mock.schema.js new file mode 100644 index 00000000..ccffdeeb --- /dev/null +++ b/test/test.mock.schema.js @@ -0,0 +1,205 @@ +/* global require, chai, describe, before, it */ +/* global window */ +// 数据占位符定义(Data Placeholder Definition,DPD) +var expect = chai.expect +var Mock, $, _ + +describe('Schema', function() { + before(function(done) { + require(['mock', 'underscore', 'jquery'], function() { + Mock = arguments[0] + window.XMLHttpRequest = Mock.XHR + _ = arguments[1] + $ = arguments[2] + expect(Mock).to.not.equal(undefined) + expect(_).to.not.equal(undefined) + expect($).to.not.equal(undefined) + done() + }) + }) + + function stringify(json) { + return JSON.stringify(json /*, null, 4*/ ) + } + + function doit(template, validator) { + it('', function() { + var schema = Mock.toJSONSchema(template) + this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) + validator(schema) + }) + } + + describe('Type', function() { + doit(1, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'number') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit(true, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'boolean') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit('', function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'string') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit(function() {}, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'function') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit(/\d/, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'regexp') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit([], function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'array') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + expect(schema).to.have.property('items').with.length(0) + }) + doit({}, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + expect(schema).to.have.property('properties').with.length(0) + }) + + }) + + describe('Object', function() { + doit({ + a: { + b: { + c: { + d: {} + } + } + } + }, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + + var properties; + + // root.properties + properties = schema.properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'a') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.properties + properties = properties[0].properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'b') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.b.properties + properties = properties[0].properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'c') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.b.c.properties + properties = properties[0].properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'd') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.b.c.d.properties + properties = properties[0].properties + expect(properties).to.with.length(0) + }) + + }) + + describe('Array', function() { + doit([ + [ + ['foo', 'bar'] + ] + ], function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'array') + + var items; + + // root.items + items = schema.items + expect(items).to.with.length(1) + expect(items[0]).to.have.property('type', 'array') + + // root[0].items + items = items[0].items + expect(items).to.with.length(1) + expect(items[0]).to.have.property('type', 'array') + + // root[0][0].items + items = items[0].items + expect(items).to.with.length(2) + expect(items[0]).to.have.property('type', 'string') + expect(items[1]).to.have.property('type', 'string') + }) + }) + + describe('String Rule', function() { + doit({ + 'string|1-10': '★' + }, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + + var properties; + // root.properties + properties = schema.properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('type', 'string') + expect(properties[0].rule).to.have.property('min', 1) + expect(properties[0].rule).to.have.property('max', 10) + }) + doit({ + 'string|3': 'value', + }, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + + var properties; + // root.properties + properties = schema.properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('type', 'string') + expect(properties[0].rule).to.have.property('min', 3) + expect(properties[0].rule.max).to.be.an('undefined') + }) + }) + +}) \ No newline at end of file diff --git a/test/test.mock.spec.dpd.js b/test/test.mock.spec.dpd.js new file mode 100644 index 00000000..24648a77 --- /dev/null +++ b/test/test.mock.spec.dpd.js @@ -0,0 +1,245 @@ +/* global require, chai, describe, before, it */ +// 数据占位符定义(Data Placeholder Definition,DPD) +var expect = chai.expect +var Mock, $, _ + +describe('DPD', function() { + before(function(done) { + require(['mock', 'underscore', 'jquery'], function() { + Mock = arguments[0] + _ = arguments[1] + $ = arguments[2] + expect(Mock).to.not.equal(undefined) + expect(_).to.not.equal(undefined) + expect($).to.not.equal(undefined) + done() + }) + }) + describe('Reference', function() { + it('@EMAIL', function() { + var data = Mock.mock(this.test.title) + expect(data).to.not.equal(this.test.title) + }) + }) + describe('Priority', function() { + it('@EMAIL', function() { + var data = Mock.mock({ + email: 'nuysoft@gmail.com', + name: '@EMAIL' + }) + this.test.title += ' => ' + data.name + expect(data.name).to.not.equal(data.email) + }) + it('@email', function() { + var data = Mock.mock({ + email: 'nuysoft@gmail.com', + name: '@email' + }) + this.test.title += ' => ' + data.name + expect(data.name).to.equal(data.email) + }) + }) + describe('Escape', function() { + it('\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + it('\\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + it('\\\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + it('\\\\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + }) + describe('Path', function() { + it('Absolute Path', function() { + var data = Mock.mock({ + id: '@UUID', + children: [{ + parentId: '@/id' + }], + child: { + parentId: '@/id' + } + }) + expect(data.children[0]).to.have.property('parentId', data.id) + expect(data.child).to.have.property('parentId', data.id) + }) + it('Relative Path', function() { + var data = Mock.mock({ + id: '@UUID', + children: [{ + parentId: '@../../id' + }], + child: { + parentId: '@../id' + } + }) + expect(data.children[0]).to.have.property('parentId', data.id) + expect(data.child).to.have.property('parentId', data.id) + }) + + it('Relative Path Fallback in Corner Case', function() { + const STRING = 'https://test.org/@a/build/test.html' + var data = Mock.mock({ + a: STRING + }) + expect(data.a).to.equal(STRING) + }) + }) + describe('Complex', function() { + var tpl = { + basics: { + boolean1: '@BOOLEAN', + boolean2: '@BOOLEAN(1, 9, true)', + + natural1: '@NATURAL', + natural2: '@NATURAL(10000)', + natural3: '@NATURAL(60, 100)', + + integer1: '@INTEGER', + integer2: '@INTEGER(10000)', + integer3: '@INTEGER(60, 100)', + + float1: '@FLOAT', + float2: '@FLOAT(0)', + float3: '@FLOAT(60, 100)', + float4: '@FLOAT(60, 100, 3)', + float5: '@FLOAT(60, 100, 3, 5)', + + character1: '@CHARACTER', + character2: '@CHARACTER("lower")', + character3: '@CHARACTER("upper")', + character4: '@CHARACTER("number")', + character5: '@CHARACTER("symbol")', + character6: '@CHARACTER("aeiou")', + + string1: '@STRING', + string2: '@STRING(5)', + string3: '@STRING("lower",5)', + string4: '@STRING(7, 10)', + string5: '@STRING("aeiou", 1, 3)', + + range1: '@RANGE(10)', + range2: '@RANGE(3, 7)', + range3: '@RANGE(1, 10, 2)', + range4: '@RANGE(1, 10, 3)', + + date: '@DATE', + time: '@TIME', + + datetime1: '@DATETIME', + datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")', + datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")', + datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")', + datetime5: '@DATETIME("y-MM-dd HH:mm:ss")', + datetime6: '@DATETIME("y-M-d H:m:s")', + + now: '@NOW', + nowYear: '@NOW("year")', + nowMonth: '@NOW("month")', + nowDay: '@NOW("day")', + nowHour: '@NOW("hour")', + nowMinute: '@NOW("minute")', + nowSecond: '@NOW("second")', + nowWeek: '@NOW("week")', + nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")' + }, + image: { + image1: '@IMAGE', + image2: '@IMAGE("100x200", "#000")', + image3: '@IMAGE("100x200", "#000", "hello")', + image4: '@IMAGE("100x200", "#000", "#FFF", "hello")', + image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")', + + dataImage1: '@DATAIMAGE', + dataImage2: '@DATAIMAGE("200x100")', + dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")' + }, + color: { + color: '@COLOR', + render: function() { + $('.header').css('background', this.color) + } + }, + text: { + title1: '@TITLE', + title2: '@TITLE(5)', + title3: '@TITLE(3, 5)', + + word1: '@WORD', + word2: '@WORD(5)', + word3: '@WORD(3, 5)', + + sentence1: '@SENTENCE', + sentence2: '@SENTENCE(5)', + sentence3: '@SENTENCE(3, 5)', + + paragraph1: '@PARAGRAPH', + paragraph2: '@PARAGRAPH(2)', + paragraph3: '@PARAGRAPH(1, 3)' + }, + name: { + first: '@FIRST', + last: '@LAST', + name1: '@NAME', + name2: '@NAME(true)' + }, + web: { + url: '@URL', + domain: '@DOMAIN', + email: '@EMAIL', + ip: '@IP', + tld: '@TLD', + }, + address: { + region: '@REGION', + province: '@PROVINCE', + city: '@CITY', + county: '@COUNTY' + }, + miscellaneous: { + guid: '@GUID', + id: '@ID', + 'increment1|3': [ + '@INCREMENT' + ], + 'increment2|3': [ + '@INCREMENT(10)' + ] + }, + helpers: { + capitalize1: '@CAPITALIZE()', + capitalize2: '@CAPITALIZE("hello")', + + upper1: '@UPPER', + upper2: '@UPPER("hello")', + + lower1: '@LOWER', + lower2: '@LOWER("HELLO")', + + pick1: '@PICK', + pick2: '@PICK("abc")', + pick3: '@PICK(["a", "b", "c"])', + + shuffle1: '@SHUFFLE', + shuffle2: '@SHUFFLE(["a", "b", "c"])' + } + } + it('', function() { + var data = Mock.mock(tpl) + // this.test.title += JSON.stringify(data, null, 4) + expect(data).to.be.a('object') + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.spec.dtd.js b/test/test.mock.spec.dtd.js new file mode 100644 index 00000000..44fe72d5 --- /dev/null +++ b/test/test.mock.spec.dtd.js @@ -0,0 +1,677 @@ +/* global require, chai, describe, before, it */ +// 数据模板定义(Data Temaplte Definition,DTD) +/* + ## BDD + 1. 结构 + describe suite + [ describe ] + before after beforeEach afterEach + it test + done + 搜索 this.async = fn && fn.length + 2. 常用 expect + expect().to + .equal .deep.equal .not.equal + .match + .have.length .with.length + .have.property .have.deep.property + .to.be.a .to.be.an + .that + .least .most .within + 3. 速度 + 搜索 test.speed + slow > 75 + 75 / 2 < medium < 75 + fast < 75 / 2 + */ +var expect = chai.expect +var Mock, $, _ + +describe('DTD', function() { + before(function(done) { + require(['mock', 'underscore', 'jquery'], function() { + Mock = arguments[0] + _ = arguments[1] + $ = arguments[2] + expect(Mock).to.not.equal(undefined) + expect(_).to.not.equal(undefined) + expect($).to.not.equal(undefined) + done() + }) + }) + describe('Literal', function() { + it('', function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it('foo', function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it(1, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it(true, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it(false, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it({}, function() { + var data = Mock.mock(this.test.title) + expect(data).to.deep.equal(this.test.title) + }) + it([], function() { + var data = Mock.mock(this.test.title) + expect(data).to.deep.equal(this.test.title) + }) + it(function() {}, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(undefined) + }) + }) + describe('String', function() { + // `'name|min-max': 'value'` + it('name|min-max', function() { + var data = Mock.mock({ + 'name|1-10': '★号' + }) + expect(data.name).to.have.length.within(2, 20) + }) + + // `'name|count': 'value'` + it('name|count', function() { + var data = Mock.mock({ + 'name|10': '★号' + }) + expect(data.name).to.be.a('string') + .that.have.length(20) + }) + }) + describe('Number', function() { + // `'name|+step': value` + it('name|+step', function() { + var data = Mock.mock({ + 'list|10': [{ + 'name|+1': 100 + }] + }) + expect(data.list).to.be.an('array').with.length(10) + _.each(data.list, function(item, index) { + expect(item).to.have.property('name') + .that.be.a('number') + if (index === 0) expect(item.name).to.equal(100) + else expect(item.name).to.equal( + data.list[index - 1].name + 1 + ) + }) + }) + + // `'name|min-max': value` + it('name|min-max', function() { + var data = Mock.mock({ + 'name|1-100': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(1, 100) + }) + it('name|max-min', function() { + var data = Mock.mock({ + 'name|100-1': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(1, 100) + }) + it('name|-min--max', function() { + var data = Mock.mock({ + 'name|-100--1': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(-100, -1) + }) + it('name|-max--min', function() { + var data = Mock.mock({ + 'name|-1--100': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(-100, -1) + }) + it('name|min-min', function() { + var data = Mock.mock({ + 'name|10-10': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').equal(10) + }) + it('name|count', function() { + var data = Mock.mock({ + 'name|10': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').equal(10) + }) + + // `'name|min-max.dmin-dmax': value` + + // 1 整数部分 2 小数部分 + var RE_FLOAT = /([\+\-]?\d+)\.?(\d+)?/ + + function validNumber(number, min, max, dmin, dmax) { + expect(number).to.be.a('number') + RE_FLOAT.lastIndex = 0 + var parts = RE_FLOAT.exec('' + number) + expect(+parts[1]).to.be.a('number').within(min, max) + expect(parts[2]).to.have.length.within(dmin, dmax) + } + + it('name|min-max.dmin-dmax', function() { + var data = Mock.mock({ + 'name|1-10.1-10': 123.456 + }) + validNumber(data.name, 1, 10, 1, 10) + }) + it('name|min-max.dcount', function() { + var data = Mock.mock({ + 'name|1-10.10': 123.456 + }) + validNumber(data.name, 1, 10, 10, 10) + }) + it('name|count.dmin-dmax', function() { + var data = Mock.mock({ + 'name|10.1-10': 123.456 + }) + validNumber(data.name, 10, 10, 1, 10) + }) + it('name|count.dcount', function() { + var data = Mock.mock({ + 'name|10.10': 123.456 + }) + validNumber(data.name, 10, 10, 10, 10) + }) + it('name|.dmin-dmax', function() { + var data = Mock.mock({ + 'name|.1-10': 123.456 + }) + validNumber(data.name, 123, 123, 1, 10) + }) + it('name|.dcount', function() { + var data = Mock.mock({ + 'name|.10': 123.456 + }) + validNumber(data.name, 123, 123, 10, 10) + }) + }) + describe('Boolean', function() { + // `'name|1': value` + it('name|1', function() { + var data = Mock.mock({ + 'name|1': true + }) + expect(data).to.have.property('name') + .that.be.a('boolean') + }) + + // `'name|min-max': value` + it('name|min-max', function() { + var data = Mock.mock({ + 'name|8-2': true + }) + expect(data).to.have.property('name') + .that.be.a('boolean') + }) + }) + describe('Object', function() { + var methods = { + GET: '@URL', + POST: '@URL', + HEAD: '@URL', + PUT: '@URL', + DELETE: '@URL' + } + var methodCount, tpl, data + + // `'name|min-max': {}` + it('name|min-max', function() { + methodCount = _.keys(methods).length // 5 + for (var min = 0, max; min <= methodCount + 1; min++) { + tpl = {} + max = Mock.Random.integer(0, methodCount) + + // methods|0-? |1-? |2-? |3-? |4-? |5-? |6-? + tpl['methods|' + min + '-' + max] = methods + data = Mock.mock(tpl) + expect(_.keys(data.methods)).to.have.length + .that.within(Math.min(min, max), Math.max(min, max)) + } + }) + + // `'name|count': {}` + it('name|count', function() { + methodCount = _.keys(methods).length // 5 + for (var count = 0; count <= methodCount + 1; count++) { + tpl = {} + tpl['methods|' + count] = methods + data = Mock.mock(tpl) + expect(_.keys(data.methods)).to.have.length( + Math.min(count, methodCount) + ) + } + }) + }) + describe('Array', function() { + // `'name': [{}, {} ...]` + it('name', function() { + var value = [{ + foo: 'foo' + }, { + bar: 'bar' + }, { + foobar: 'foobar' + }] + var data = Mock.mock({ + name: value + }) + expect(data).to.have.property('name') + .that.be.an('array').with.length(3) + .that.not.equal(value) + expect(data).to.have.property('name') + + for (var i = 0; i < data.name.length; i++) { + expect(data.name[i]).to.not.equal(value[i]) + expect(data.name[i]).to.deep.equal(value[i]) + } + }) + + // `'name|1': [{}, {} ...]` + it('name|1: [1, 2, 4, 8]', function() { + // number array + var value = [1, 2, 4, 8] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('number') + expect(value).to.include(data.name) + }) + it('name|1: ["GET", "POST", "HEAD", "DELETE"]', function() { + // string array + var value = ['GET', 'POST', 'HEAD', 'DELETE'] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('string') + expect(value).to.include(data.name) + }) + it('name|1 [{}]', function() { + // object array + var value = [{}] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('object') + .that.deep.equal({}) + expect(data.name).to.not.equal(value[0]) + }) + it('name|1 [{}, {}, {}]', function() { + // object array + var data = Mock.mock({ + 'name|1': [{}, {}, {}] + }) + expect(data).to.have.property('name') + .that.be.a('object') + .that.deep.equal({}) + }) + it('name|1 [{}, {}, {}]', function() { + // object array + var value = [{ + method: 'GET' + }, { + method: 'POST' + }, { + method: 'HEAD' + }, { + method: 'DELETE' + }] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('object') + .that.have.property('method') + .that.be.a('string') + expect(_.pluck(value, 'method')).include(data.name.method) + }) + + // `'name|+1': [{}, {} ...]` + it('name|+1: ["a", "b", "c"]', function() { + var data = Mock.mock({ + 'list|5': [{ + 'name|+1': ['a', 'b', 'c'] + }] + }) + expect(data).to.have.property('list') + .that.be.an('array').with.length(5) + expect(data.list[0].name).to.equal('a') + expect(data.list[1].name).to.equal('b') + expect(data.list[2].name).to.equal('c') + expect(data.list[3].name).to.equal('a') + expect(data.list[4].name).to.equal('b') + }) + it('name|+1: ["@integer", "@email", "@boolean"]', function() { + var data = Mock.mock({ + 'list|5-10': [{ + 'name|+1': ['@integer', '@email', '@boolean'] + }] + }) + expect(data).to.have.property('list') + .that.be.an('array').have.length.within(5, 10) + expect(data.list[0].name).to.be.a('number') + expect(data.list[1].name).to.be.a('string') + expect(data.list[2].name).to.be.a('boolean') + expect(data.list[3].name).to.be.a('number') + expect(data.list[4].name).to.be.a('string') + }) + + // `'name|min-max': [{}, {} ...]` + it('name|min-min', function() { + var data = Mock.mock({ + 'name|1-1': [{}] + }) + expect(data.name).to.be.an('array').with.length(1) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|min-max [{}]', function() { + var data = Mock.mock({ + 'name|1-10': [{}] + }) + expect(data.name).to.be.an('array').with.length.within(1, 10) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|max-min [{}]', function() { + var data = Mock.mock({ + 'name|10-1': [{}] + }) + expect(data.name).to.be.an('array').with.length.within(1, 10) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|min-max [{}, {}]', function() { + var data = Mock.mock({ + 'name|1-10': [{}, {}] + }) + expect(data.name).to.be.an('array').with.length.within(2, 20) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|max-min [{}, {}]', function() { + var data = Mock.mock({ + 'name|10-1': [{}, {}] + }) + expect(data.name).to.be.an('array').with.length.within(2, 20) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + + // `'name|count': [{}, {} ...]` + it('name|count [{}]', function() { + var data = Mock.mock({ + 'name|10': [{}] + }) + expect(data.name).to.be.an('array').with.length(10) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|count [{}, {}]', function() { + var data = Mock.mock({ + 'name|10': [{}, {}] + }) + expect(data.name).to.be.an('array').with.length(20) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + }) + describe('Function', function() { + // `'name': function(){}` + it('name: function', function() { + var data = Mock.mock({ + prop: 'hello', + name: function( /*root, path*/ ) { + return this.prop + } + }) + expect(data).to.have.property('name') + .that.be.a('string').equal('hello') + }) + + // 无序的 function + it('name: function', function() { + var data = Mock.mock({ + name2: function() { + return this.prop * 2 + }, + prop: 1, + name4: function() { + return this.prop * 4 + } + }) + expect(data.name2).to.equal(2) + expect(data.name4).to.equal(4) + }) + + // #25 改变了非函数属性的顺序,查找起来不方便 + it('name: function', function() { + var data = Mock.mock({ + name: function() {}, + first: '', + second: '', + third: '' + }) + var keys = _.keys(data) + expect(keys[0]).equal('first') + expect(keys[1]).equal('second') + expect(keys[2]).equal('third') + expect(keys[3]).equal('name') + }) + }) + + /* + 按照 http://www.regexr.com/ 的 Reference 设计测试用例。 + https://github.com/nuysoft/Mock/blob/7c1e3a686bcc515855f1f583d70ae0ee89acc65e/test/regexp.js#L120 + */ + describe('RegExp', function() { + function validRegExp(regexp) { + if (arguments.length > 1) { + for (var i = 0; i < arguments.length; i++) { + validRegExp(arguments[i]) + } + } + + it(regexp, function() { + var data = Mock.mock(regexp) + this.test.title += ' => ' + data + expect(regexp.test(data)).to.be.true + }) + } + + describe('Character Classes', function() { + validRegExp(/./) + validRegExp( + /[a-z]/, + /[A-Z]/, + /[0-9]/ + ) + validRegExp( + /\w/, + /\W/, + /\s/, + /\S/, + /\d/, + /\D/ + ) + validRegExp( + /[.]/, + /[\w]/, + /[\W]/, + /[\s]/, + /[\S]/, + /[\d]/, + /[\D]/ + ) + validRegExp( + /[^.]/, + /[^\w]/, + /[^\W]/, + /[^\s]/, + /[^\S]/, + /[^\d]/, + /[^\D]/ + ) + }) + describe('Quantifiers', function() { + validRegExp( + /\d?/, + /\d+/, + /\d*/ + ) + + // {n}, {n,}, {n,m}, {0,1} ?, {1,0} +, {0,} * + validRegExp( + /\d{5}/, + /\d{5,}/, + /\d{5,10}/, + /\d{0,1}/, + /\d{0,}/ + ) + + validRegExp(/[\u4E00-\u9FA5]+/) // 汉字 + }) + describe('Anchors', function() { + validRegExp(/^/) + validRegExp(/$/) + validRegExp(/^foo/) + validRegExp(/foo$/) + validRegExp(/\bfoo/) + validRegExp(/\Bfoo/) + }) + + describe('Escaped Characters', function() { + validRegExp(/\000/) + validRegExp(/\xFF/) + validRegExp(/\uFFFF/) + validRegExp(/\cI/) + }) + + describe('Groups & Lookaround', function() { + validRegExp(/(ABC)/) + validRegExp(/(ABC)\1/) + validRegExp(/(?:ABC)/) + validRegExp(/(?=ABC)/) + validRegExp(/(?!ABC)/) + // validRegExp(/(?<=ABC)/) + // validRegExp(/(? Date: Sat, 12 Jun 2021 11:02:57 +0800 Subject: [PATCH 06/65] =?UTF-8?q?esm=20=E5=9F=BA=E7=A1=80=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 20435 +++++++++++++++--------------- dist/mock.js | 1637 ++- src/mock.js | 47 +- src/mock/handle/array.js | 74 + src/mock/handle/boolean.js | 6 + src/mock/handle/function.js | 9 + src/mock/handle/gen.js | 46 + src/mock/handle/index.js | 7 + src/mock/handle/number.js | 24 + src/mock/handle/object.js | 64 + src/mock/handle/path.js | 69 + src/mock/handle/placeholder.js | 89 + src/mock/handle/regexp.js | 8 + src/mock/handle/string.js | 52 + src/mock/handler.js | 503 +- src/mock/parser.js | 7 +- src/mock/random/address.js | 81 +- src/mock/random/address_dict.js | 19 +- src/mock/random/date.js | 144 +- src/mock/random/image.js | 124 +- src/mock/random/index.js | 22 +- src/mock/random/misc/guid.js | 1 + src/mock/random/name.js | 2 +- src/mock/random/text/text-ch.js | 20 +- src/mock/random/text/text_en.js | 2 +- src/mock/random/web/web_func.js | 2 +- src/mock/schema/schema.js | 4 +- src/mock/utils/extend.js | 5 +- src/mock/xhr/index.js | 2 +- src/mock/xhr/xhr.js | 26 +- test/allTemplate.js | 4 + test/bower.json | 11 - test/index.css | 44 + test/index.html | 21 + test/materiels/noop.html | 2 - test/materiels/noop.js | 1 - test/package.json | 6 - test/test.coveralls.js | 35 - test/test.js | 589 + test/test.mock.html | 58 - test/test.mock.mock.js | 62 - test/test.mock.random.js | 464 - test/test.mock.request.js | 445 - test/test.mock.schema.js | 205 - test/test.mock.spec.dpd.js | 245 - test/test.mock.spec.dtd.js | 677 - test/test.mock.valid.js | 308 - test/valid.js | 264 - 48 files changed, 12420 insertions(+), 14552 deletions(-) create mode 100644 src/mock/handle/array.js create mode 100644 src/mock/handle/boolean.js create mode 100644 src/mock/handle/function.js create mode 100644 src/mock/handle/gen.js create mode 100644 src/mock/handle/index.js create mode 100644 src/mock/handle/number.js create mode 100644 src/mock/handle/object.js create mode 100644 src/mock/handle/path.js create mode 100644 src/mock/handle/placeholder.js create mode 100644 src/mock/handle/regexp.js create mode 100644 src/mock/handle/string.js create mode 100644 test/allTemplate.js delete mode 100644 test/bower.json create mode 100644 test/index.css create mode 100644 test/index.html delete mode 100644 test/materiels/noop.html delete mode 100644 test/materiels/noop.js delete mode 100644 test/package.json delete mode 100644 test/test.coveralls.js create mode 100644 test/test.js delete mode 100644 test/test.mock.html delete mode 100644 test/test.mock.mock.js delete mode 100644 test/test.mock.random.js delete mode 100644 test/test.mock.request.js delete mode 100644 test/test.mock.schema.js delete mode 100644 test/test.mock.spec.dpd.js delete mode 100644 test/test.mock.spec.dtd.js delete mode 100644 test/test.mock.valid.js delete mode 100644 test/valid.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index a16afcd4..e73e8a21 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,10375 +1,10364 @@ (function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); var Mock = (function () { - 'use strict'; - - /* - ## Constant - - 常量集合。 - */ - /* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 - */ - var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ - }; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + 'use strict'; - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - /** Built-in value references. */ - var Symbol = root.Symbol; + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); - /** Used for built-in method references. */ - var objectProto$8 = Object.prototype; + /** Built-in value references. */ + var Symbol = root.Symbol; - /** Used to check objects for own properties. */ - var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + /** Used for built-in method references. */ + var objectProto$8 = Object.prototype; - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString$1 = objectProto$8.toString; + /** Used to check objects for own properties. */ + var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - /** Built-in value references. */ - var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$8.toString; - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; + /** Built-in value references. */ + var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; } - return result; } - - /** Used for built-in method references. */ - var objectProto$7 = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto$7.toString; - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); + return result; + } + + /** Used for built-in method references. */ + var objectProto$7 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$7.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; } - - /** `Object#toString` result references. */ - var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - - /** Built-in value references. */ - var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} } - - /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); + return ''; + } + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); while (++index < length) { - result[index] = iteratee(array[index], index, array); + array[index] = args[start + index]; } - return result; + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0; - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } + return object; + }); + } + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; + } + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + /** Detect free variable `exports`. */ + var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + + /** Built-in value references. */ + var Buffer = moduleExports$1 ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = + typedArrayTags[setTag] = typedArrayTags[stringTag$1] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - /** `Object#toString` result references. */ - var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; - } + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; - /** Used to detect overreaching core-js shims. */ - var coreJsData = root['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; - /** Used for built-in method references. */ - var funcProto$1 = Function.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString$1 = funcProto$1.toString; - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used for built-in method references. */ - var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; + if (types) { + return types; } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { + result.push(key); + } } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); } - return func.apply(thisArg, args); } + return result; + } - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; + /** Used for built-in method references. */ + var objectProto = Object.prototype; - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeNow = Date.now; - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); } + var isProto = isPrototype(object), + result = []; - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ - function constant(value) { - return function() { - return value; - }; + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } } - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsZWJ$1 = '\\u200d'; + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER$1 = 9007199254740991; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); + } + + /** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ + var upperFirst = createCaseFirst('toUpperCase'); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** `Object#toString` result references. */ + var stringTag = '[object String]'; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); + } + + /** `Object#toString` result references. */ + var regexpTag = '[object RegExp]'; + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /* Node.js helper references. */ + var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeRandom = Math.random; + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + // 使用 lodash 提供的方式 + function type$1(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); + } + + function isObjectOrArray(value) { + return isObject(value) || isArray(value); + } + + function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); + } + + // import { isObject, isArray } from "./type.js"; + function extend(...args) { + return assignIn(this, ...args); + } + + function each(obj, iterator, context) { + // each + var i, key; + if (type(obj) === "number") { + //表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } } else { - object[key] = value; + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } } - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** Used for built-in method references. */ - var objectProto$5 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); + } + + /* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 + */ + function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, "") + .replace(/\*\/[^\/]+$/, "") + .replace(/^[\s\xA0]+/, "") + .replace(/[\s\xA0]+$/, ""); // .trim() + } + + /* + ## Utilities + */ + function keys(obj) { + return Object.keys(obj); + } + function values(obj) { + return Object.values(obj); + } + function noop() {} + + var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc + }); + + const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); + }; + const random = function (min, max) { + return Math.random() * (max - min) + min; + }; + + // 返回一个随机的整数。 + const integer = function (min, max) { + min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; + max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 + return Math.round(random(min, max)); + }; + const natural = function (min, max) { + return Math.abs(integer(min, max)); + }; + + const boolean$1 = function (min, max, cur) { + if (cur) { + min = isNumber(min) ? parseInt(min, 10) : 1; + max = isNumber(max) ? parseInt(max, 10) : 1; + return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; } - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; + return Math.random() >= 0.5; + }; + + const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", + }; + pools.alpha = pools.lower + pools.upper; + pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + + const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); + }; - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; + const string$1 = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map((i) => character(pool)).join(""); + }; + + const range$1 = function (...args) { + // range( stop ) + let start, stop, step; + if (arguments.length <= 1) { + [stop] = args; + return [...Array(stop).keys()]; + } - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } + // range( start, stop ,step=1) + // range(10,20,3) = [10,13,16,19] + [start, stop, step = 1] = args; + let arrayLength = Math.ceil((stop - start) / step); + return [...Array(arrayLength).keys()].map((index) => { + return start + index * step; + }); + }; + + const float = function (min, max, dmin, dmax) { + dmin = isNumber(dmin) ? dmin : 0; + dmax = isNumber(dmax) ? dmax : 17; + dmin = Math.max(Math.min(dmin, 17), 0); + dmax = Math.max(Math.min(dmax, 17), 0); + let dcount = natural(dmin, dmax); + var ret = + integer(min, max) + + "." + + [...Array(dcount).keys()] + .map((i) => { + // 最后一位不能为 0,所以必须进行处理 + return i < dcount - 1 ? this.character("number") : this.character("123456789"); + }) + .join(""); + return parseFloat(ret, 10); + }; + + /* + ## Color Convert + + http://blog.csdn.net/idfaya/article/details/6770414 + 颜色空间RGB与HSV(HSL)的转换 + */ + function hsv2rgb(hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - s * f); + var t = 255 * v * (1 - s * (1 - f)); + + v = 255 * v; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; } - return object; - } + } + function hsv2hsl(hsv) { + var h = hsv[0], + s = hsv[1] / 100, + v = hsv[2] / 100, + sl, + l; + l = (2 - s) * v; + sl = s * v; + sl /= l <= 1 ? l : 2 - l; + l /= 2; + return [h, sl * 100, l * 100]; + } + // http://www.140byt.es/keywords/color + function rgb2hex(a, b, c) { + return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); + } + + /* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) + */ + var DICT$1 = { + // name value nicer + navy: { + value: "#000080", + nicer: "#001F3F", + }, + blue: { + value: "#0000ff", + nicer: "#0074D9", + }, + aqua: { + value: "#00ffff", + nicer: "#7FDBFF", + }, + teal: { + value: "#008080", + nicer: "#39CCCC", + }, + olive: { + value: "#008000", + nicer: "#3D9970", + }, + green: { + value: "#008000", + nicer: "#2ECC40", + }, + lime: { + value: "#00ff00", + nicer: "#01FF70", + }, + yellow: { + value: "#ffff00", + nicer: "#FFDC00", + }, + orange: { + value: "#ffa500", + nicer: "#FF851B", + }, + red: { + value: "#ff0000", + nicer: "#FF4136", + }, + maroon: { + value: "#800000", + nicer: "#85144B", + }, + fuchsia: { + value: "#ff00ff", + nicer: "#F012BE", + }, + purple: { + value: "#800080", + nicer: "#B10DC9", + }, + silver: { + value: "#c0c0c0", + nicer: "#DDDDDD", + }, + gray: { + value: "#808080", + nicer: "#AAAAAA", + }, + black: { + value: "#000000", + nicer: "#111111", + }, + white: { + value: "#FFFFFF", + nicer: "#FFFFFF", + }, + }; + + /* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() + */ + + // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + // https://github.com/devongovett/color-generator/blob/master/index.js + // 随机生成一个有吸引力的颜色。 + + let _hue; + function _goldenRatioColor(saturation, value) { + let _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return [_hue * 360, saturation * 100, value * 100]; + } + + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 + function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return hex(); + } + + // #DAC0DE + function hex() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); + return hex; + } + + // rgb(128,255,255) + function rgb() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; + } + // rgba(128,255,255,0.3) + function rgba() { + var hsv = _goldenRatioColor(); + var rgb = hsv2rgb(hsv); + return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; + } + + // hsl(300,80%,90%) + function hsl() { + var hsv = _goldenRatioColor(); + var hsl = hsv2hsl(hsv); + return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; + } + + var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] + }; + var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" + ]; + var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" + ]; + var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" + ]; + var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 + }; + + /* + ## Helpers + */ + const upper = function (str) { + return (str + "").toUpperCase(); + }; + const lower = function (str) { + return (str + "").toLowerCase(); + }; + // 从数组中随机选取一个元素,并返回。 + const pick = function (...args) { + let [arr, min, max] = args; + // pick( item1, item2 ... ) + if (!(arr instanceof Array)) { + arr = args; + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + return this.shuffle(arr, min, max); + }; + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + + 其他的实现思路: + // https://code.google.com/p/jslibs/wiki/JavascriptTips + result = result.sort(function() { + return Math.random() - 0.5 + }) + */ + const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; + /* falls through */ + case 3: + min = parseInt(min, 10); + max = parseInt(max, 10); + return result.slice(0, natural(min, max)); + } + }; + /* + * Random.order(item, item) + * Random.order([item, item ...]) - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax = Math.max; - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } + 顺序获取数组中的元素 - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER = 9007199254740991; - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } + 不支持单独调用! + */ + const order = function order(array) { + order.cache = order.cache || {}; - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } + if (arguments.length > 1) array = [].slice.call(arguments, 0); - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; + var cache = (order.cache[templatePath] = order.cache[templatePath] || { + index: 0, + array: array, }); - } - - /** Used for built-in method references. */ - var objectProto$4 = Object.prototype; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; - } - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); + return cache.array[cache.index++ % cache.array.length]; + }; + + /* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) + */ + let { firstName, lastName, cfirstName, clastName } = Name; + // 随机生成一个常见的英文名。 + function first() { + var names = firstName.male.concat(); + return pick(names); + } + // 随机生成一个常见的英文姓。 + function last() { + return pick(lastName); + } + // 随机生成一个常见的英文姓名。 + function name(middle) { + middle = middle ? ` ${first()} ` : " "; + return `${first()}${middle}${last()}`; + } + /* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + */ + function cfirst() { + return pick(cfirstName); + } /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + */ + function clast() { + return pick(clastName); + } + // 随机生成一个常见的中文姓名。 + function cname() { + return cfirst() + clast(); + } + + // Unique ID creation requires a high quality random # generator. In the browser we therefore + // require the crypto API and do not support built-in fallback to lower quality random number + // generators (like Math.random()). + var getRandomValues; + var rnds8 = new Uint8Array(16); + function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - while (++index < n) { - result[index] = iteratee(index); + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); } - return result; } - /** `Object#toString` result references. */ - var argsTag$1 = '[object Arguments]'; - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; - } + return getRandomValues(rnds8); + } - /** Used for built-in method references. */ - var objectProto$3 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - - /** Built-in value references. */ - var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; + var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - /** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ - function stubFalse() { - return false; - } + function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); + } - /** Detect free variable `exports`. */ - var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - - /** Built-in value references. */ - var Buffer = moduleExports$1 ? root.Buffer : undefined; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = - typedArrayTags[setTag] = typedArrayTags[stringTag$1] = - typedArrayTags[weakMapTag] = false; - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } + /** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } + var byteToHex = []; - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); + } - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; + return uuid; + } - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; + function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - if (types) { - return types; - } + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** Used for built-in method references. */ - var objectProto$2 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; } - return result; - } - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); + return buf; + } + + return stringify(rnds); + } + + var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" + }; + + /* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 + */ + + // id pid/parentId name children + + // 将扁平数组转化为树状 + function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 + result.push(item); + return { mapped, result }; + } + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; + } + const ids = Object.keys(DICT); + + // 转化数组内对象的表现形式 + const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!ids.includes(pid)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + "0000"; + } + return { + id, + pid, + name: value, }; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeKeys = overArg(Object.keys, Object); - - /** Used for built-in method references. */ - var objectProto$1 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); + }); + + const DICT_FIXED = createTree(fixed); + + var _patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", + }; + + /* + ## Date + */ + + const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + + // 返回一个随机的日期字符串。 + function date(format = "yyyy-MM-dd") { + return _formatDate(_randomDate(), format); + } + function datetime(format = "yyyy-MM-dd HH:mm:ss") { + return date(format); + } + function time(format = "HH:mm:ss") { + return date(format); + } + function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); } - return result; - } - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } + return _formatDate(date, format); + } - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } + function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); + } + + function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + } + + function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max); + return _randomDate(); + } + + /* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) + */ + function id() { + var id, + sum = 0, + rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], + last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + + id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; } - return result; - } - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); + id += last[sum % 11]; + + return id; + } + + /* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ + function guid() { + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); + } + + /* + ## Miscellaneous + */ + + /* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 + */ + let key = 0; + const increment = function (step) { + return (key += +step || 1); + }; + const inc = increment; + + // Dice + function d4() { + return this.natural(1, 4); + } + function d6() { + return this.natural(1, 6); + } + function d8() { + return this.natural(1, 8); + } + function d12() { + return this.natural(1, 12); + } + function d20() { + return this.natural(1, 20); + } + function d100() { + return this.natural(1, 100); + } + + function range(defaultMin, defaultMax, min, max) { + return min === undefined + ? natural(defaultMin, defaultMax) // () + : max === undefined + ? min // ( len ) + : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) + } + + // 随机生成一个句子,第一个单词的首字母大写。 + function sentence(min, max) { + var len = range(12, 18, min, max); + let string = [...Array(len)].map(() => word()).join(""); + return capitalize(string) + "."; + } + + // 随机生成一个单词。 + function word(min, max) { + var len = range(3, 10, min, max); + return [...Array(len)].map(() => character("lower")).join(""); + } + + // 随机生成一段文本。 + function paragraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map((i) => sentence()); + } + + // 随机生成一句标题,其中每个单词的首字母大写。 + function title(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => capitalize(word())).join(""); + } + + function cparagraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => csentence()).join(""); + } + + // 随机生成一个中文句子。 + function csentence(min, max) { + var len = range(12, 18, min, max); + return [...Array(len)].map(() => cword()).join("") + "。"; + } + // 随机生成一句中文标题。 + function ctitle(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => cword()).join(""); + } + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + const DICT_KANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; + // 随机生成一个或多个汉字。 + function cword(...args) { + var len = 1, + pool = DICT_KANZI, + min, + max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === "string") { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof args[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } + const poolLength = pool.length; + if (len === 1) return pool.charAt(natural(0, poolLength)); + + return [...Array(len)] + .map(() => { + return pool.charAt(natural(0, poolLength)); + }) + .join(""); + } + + // 协议簇 + const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); + const tlds = // 域名后缀 + ( + "com net org edu gov int mil cn " + + // 国内域名 + "com.cn net.cn gov.cn org.cn " + + // 中文国内域名 + "中国 中国互联.公司 中国互联.网络 " + + // 新国际域名 + "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + // 世界各国域名后缀 + "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" + ).split(" "); + + /* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers + */ + function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; + } + + // 随机生成一个 URL 协议。 + function protocol() { + return pick(protocols); + } + // 随机生成一个域名。 + function domain(Tld) { + return `${word()}.${Tld || tld()}`; + } + /* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) + */ + function tld() { + // Top Level Domain + return pick(tlds); + } + + // 随机生成一个邮件地址。 + function email(domain) { + return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; + } + // 随机生成一个 IP 地址。 + function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join("."); + } + + var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" + ]; + var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" + ]; + var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" + ]; + var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 + }; + + var Addvocate = "#ff6138"; + var Adobe = "#ff0000"; + var Aim = "#fcd20b"; + var Amazon = "#e47911"; + var Android = "#a4c639"; + var AOL = "#0060a3"; + var Atlassian = "#003366"; + var Behance = "#053eff"; + var bitly = "#ee6123"; + var Blogger = "#fc4f08"; + var Boeing = "#0039a6"; + var Carbonmade = "#613854"; + var Cheddar = "#ff7243"; + var Delicious = "#205cc0"; + var Dell = "#3287c1"; + var Designmoo = "#e54a4f"; + var Deviantart = "#4e6252"; + var Devour = "#fd0001"; + var DEWALT = "#febd17"; + var Dribbble = "#ea4c89"; + var Dropbox = "#3d9ae8"; + var Drupal = "#0c76ab"; + var Dunked = "#2a323a"; + var eBay = "#89c507"; + var Ember = "#f05e1b"; + var Engadget = "#00bdf6"; + var Envato = "#528036"; + var Etsy = "#eb6d20"; + var Evernote = "#5ba525"; + var Facebook = "#3b5998"; + var Firefox = "#e66000"; + var Forrst = "#5b9a68"; + var Foursquare = "#25a0ca"; + var Garmin = "#007cc3"; + var GetGlue = "#2d75a2"; + var Gimmebar = "#f70078"; + var GitHub = "#171515"; + var Grooveshark = "#f77f00"; + var Groupon = "#82b548"; + var HelloWallet = "#0085ca"; + var HootSuite = "#003366"; + var Houzz = "#73ba37"; + var HTML5 = "#ec6231"; + var IKEA = "#ffcc33"; + var IMDb = "#f3ce13"; + var Instagram = "#3f729b"; + var Intel = "#0071c5"; + var Intuit = "#365ebf"; + var Kickstarter = "#76cc1e"; + var kippt = "#e03500"; + var Kodery = "#00af81"; + var LastFM = "#c3000d"; + var LinkedIn = "#0e76a8"; + var Livestream = "#cf0005"; + var Lumo = "#576396"; + var Mixpanel = "#a086d3"; + var Meetup = "#e51937"; + var Nokia = "#183693"; + var NVIDIA = "#76b900"; + var Opera = "#cc0f16"; + var Path = "#e41f11"; + var Pinboard = "#0000e6"; + var Pinterest = "#c8232c"; + var PlayStation = "#665cbe"; + var Pocket = "#ee4056"; + var Prezi = "#318bff"; + var Pusha = "#0f71b4"; + var Quora = "#a82400"; + var Rdio = "#008fd5"; + var Readability = "#9c0000"; + var Resource = "#7eb400"; + var Rockpack = "#0ba6ab"; + var Roon = "#62b0d9"; + var RSS = "#ee802f"; + var Salesforce = "#1798c1"; + var Samsung = "#0c4da2"; + var Shopify = "#96bf48"; + var Skype = "#00aff0"; + var Snagajob = "#f47a20"; + var Softonic = "#008ace"; + var SoundCloud = "#ff7700"; + var Spotify = "#81b71a"; + var Sprint = "#fee100"; + var Squarespace = "#121212"; + var StackOverflow = "#ef8236"; + var Staples = "#cc0000"; + var Stripe = "#008cdd"; + var StudyBlue = "#00afe1"; + var StumbleUpon = "#f74425"; + var Technorati = "#40a800"; + var Treehouse = "#5cb868"; + var Trulia = "#5eab1f"; + var Tumblr = "#34526f"; + var Twitter = "#00acee"; + var TYPO3 = "#ff8700"; + var Ubuntu = "#dd4814"; + var Ustream = "#3388ff"; + var Verizon = "#ef1d1d"; + var Vimeo = "#86c9ef"; + var Vine = "#00a478"; + var Virb = "#06afd8"; + var Wooga = "#5b009c"; + var Wunderlist = "#2b88d9"; + var XBOX = "#9bc848"; + var XING = "#126567"; + var Yandex = "#ffcc00"; + var Yelp = "#c41200"; + var YouTube = "#c4302b"; + var Zalongo = "#5498dc"; + var Zendesk = "#78a300"; + var Zerply = "#9dcc7a"; + var Zootool = "#5e8b1d"; + var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool + }; + + /* global document */ + let { _adSize, _screenSize, _videoSize } = size; + const _brandNames = Object.keys(_brandColors); + + /* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 + */ + function image(...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; } - return result; - } - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = (foreground || hex()).replace(/^#/, ""); + background = (background || hex()).replace(/^#/, ""); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; + } + /* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, + */ + function dataImage(size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); + } + + /* + ## Address + */ + var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; + + // 随机生成一个大区。 + function region() { + return pick(REGION); + } + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + function province() { + return pick(DICT_FIXED).name; + } + // 随机生成一个(中国)市。 + function city(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; + } + // 随机生成一个(中国)县。 + function county(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + var county = pick(city.children) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; + } + // 随机生成一个邮政编码(六位数字)。 + function zip(len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; + } + + /* + ## Mock.Random + + 工具类,用于生成各种随机数据。 + */ + + var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range$1, + float: float, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip + }); + + /* + ## Constant + + 常量集合。 + */ + /* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 + */ + var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ + }; + + /* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + /* jshint -W041 */ + function parser$1(name = "") { + if (typeof name !== "string") name = name + ""; + var parameters = name.match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; + } - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; + function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { + var result = []; - if (start < 0) { - start = -start > length ? 0 : (length + start); + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + }); + } + } } - end = end > length ? length : end; - if (end < 0) { - end += length; + return result; + } + + function boolean({ rule: { max, min, parameters }, template = "" }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; + } + + function _function(options) { + let { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); + } + + function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { + var result; + if (decimal) { + let [Integer, Decimal] = ("" + template).split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + Integer = range ? count : Integer; + Decimal = (Decimal || "").slice(0, dcount); + while (Decimal.length < dcount) { + Decimal += + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + Decimal.length < dcount - 1 ? character("number") : character("123456789"); + } + result = parseFloat(Integer + "." + Decimal, 10); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; + return result; + } + + function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + var result = {}, + keys = [], + fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (let key in template) { + (typeof template[key] === "function" ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + let inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type$1(template[key]) === "number") { + template[key] += parseInt(inc[2], 10); + } + }); } return result; - } - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsZWJ$1 = '\\u200d'; - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } + } - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } + // https://github.com/nuysoft/regexp - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } + function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); + } - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } + function Alternate(n, l) { + Token.call(this, "alternate"), (this.left = n), (this.right = l); + } - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } + function Match(n) { + Token.call(this, "match"), (this.body = n.filter(Boolean)); + } - /** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ - var upperFirst = createCaseFirst('toUpperCase'); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize$1(string) { - return upperFirst(toString(string).toLowerCase()); - } + function Group(n, l) { + Token.call(this, n), (this.body = l); + } - /** `Object#toString` result references. */ - var stringTag = '[object String]'; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } + function CaptureGroup(n) { + Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); + } - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } + function Quantified(n, l) { + Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); + } - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); - } + function Quantifier(n, l) { + Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); + } - /** `Object#toString` result references. */ - var regexpTag = '[object RegExp]'; - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } + function CharSet(n, l) { + Token.call(this, "charset"), (this.invert = n), (this.body = l); + } - /* Node.js helper references. */ - var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeFloor = Math.floor, - nativeRandom = Math.random; - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } + function CharacterRange(n, l) { + Token.call(this, "range"), (this.start = n), (this.end = l); + } - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; + function Literal(n) { + Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); + } - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; + function Unicode(n) { + Token.call(this, "unicode"), (this.code = n.toUpperCase()); + } - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } + function Hex(n) { + Token.call(this, "hex"), (this.code = n.toUpperCase()); + } - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } + function Octal(n) { + Token.call(this, "octal"), (this.code = n.toUpperCase()); + } - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); - } + function BackReference(n) { + Token.call(this, "back-reference"), (this.code = n.toUpperCase()); + } - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } + function ControlCharacter(n) { + Token.call(this, "control-character"), (this.code = n.toUpperCase()); + } - // 使用 lodash 提供的方式 - function type$1(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); - } + var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, "\\\\") + .replace(/"/g, '\\"') + .replace(/\x08/g, "\\b") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\f/g, "\\f") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return "\\x0" + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return "\\x" + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return "\\u0" + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; + } + (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + "\n" === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : "\r" === e || "\u2028" === e || "\u2029" === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null === t && (t = al), + null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function s() { + var l, u; + return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function h() { + var n, l, u; + return ( + (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), + null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function g() { + var l, u; + return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function b() { + var l, u; + return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) + for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) + if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function M() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function D() { + var l, u; + return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function H() { + var l, u; + return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function O() { + var l, u; + return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function W() { + var l, u; + return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function z() { + var l, u; + return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function I() { + var l, u; + return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function J() { + var l, u; + return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function K() { + var l, u; + return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function N() { + var l, u; + return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function P() { + var l, u; + return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function V() { + var l, u; + return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function X() { + var l, u; + return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { + if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) + for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = "", + fl = "|", + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = "^", + vl = '"^"', + wl = function () { + return new Token("start"); + }, + Al = "$", + Cl = '"$"', + gl = function () { + return new Token("end"); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = "Quantifier", + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = "{", + yl = '"{"', + ml = ",", + Rl = '","', + Fl = "}", + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ",}", + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = "+", + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = "*", + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = "?", + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = "[0-9]", + Jl = function (n) { + return +n.join(""); + }, + Kl = "(", + Nl = '"("', + Pl = ")", + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = "?:", + _l = '"?:"', + nu = function (n) { + return new Group("non-capture-group", n); + }, + lu = "?=", + uu = '"?="', + tu = function (n) { + return new Group("positive-lookahead", n); + }, + ru = "?!", + eu = '"?!"', + ou = function (n) { + return new Group("negative-lookahead", n); + }, + cu = "CharacterSet", + iu = "[", + au = '"["', + fu = "]", + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = "CharacterRange", + pu = "-", + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = "Character", + Cu = /^[^\\\]]/, + gu = "[^\\\\\\]]", + bu = function (n) { + return new Literal(n); + }, + ku = ".", + Tu = '"."', + xu = function () { + return new Token("any-character"); + }, + yu = "Literal", + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = "[^|\\\\\\/.[()?+*$\\^]", + Fu = "\\b", + Qu = '"\\\\b"', + Su = function () { + return new Token("backspace"); + }, + Uu = function () { + return new Token("word-boundary"); + }, + Eu = "\\B", + Gu = '"\\\\B"', + Bu = function () { + return new Token("non-word-boundary"); + }, + ju = "\\d", + $u = '"\\\\d"', + qu = function () { + return new Token("digit"); + }, + Lu = "\\D", + Mu = '"\\\\D"', + Du = function () { + return new Token("non-digit"); + }, + Hu = "\\f", + Ou = '"\\\\f"', + Wu = function () { + return new Token("form-feed"); + }, + zu = "\\n", + Iu = '"\\\\n"', + Ju = function () { + return new Token("line-feed"); + }, + Ku = "\\r", + Nu = '"\\\\r"', + Pu = function () { + return new Token("carriage-return"); + }, + Vu = "\\s", + Xu = '"\\\\s"', + Yu = function () { + return new Token("white-space"); + }, + Zu = "\\S", + _u = '"\\\\S"', + nt = function () { + return new Token("non-white-space"); + }, + lt = "\\t", + ut = '"\\\\t"', + tt = function () { + return new Token("tab"); + }, + rt = "\\v", + et = '"\\\\v"', + ot = function () { + return new Token("vertical-tab"); + }, + ct = "\\w", + it = '"\\\\w"', + at = function () { + return new Token("word"); + }, + ft = "\\W", + st = '"\\\\W"', + ht = function () { + return new Token("non-word"); + }, + dt = "\\c", + pt = '"\\\\c"', + vt = "any character", + wt = function (n) { + return new ControlCharacter(n); + }, + At = "\\", + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = "[1-9]", + kt = function (n) { + return new BackReference(n); + }, + Tt = "\\0", + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = "[0-7]", + Rt = function (n) { + return new Octal(n.join("")); + }, + Ft = "\\x", + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = "[0-9a-fA-F]", + Et = function (n) { + return new Hex(n.join("")); + }, + Gt = "\\u", + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join("")); + }, + $t = function () { + return new Token("null-character"); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + + /* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } - function isObjectOrArray(value) { - return isObject(value) || isArray(value); - } + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ + /* + + */ + var Handler$2 = { + extend: extend, + }; + + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart + /*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] + }*/ + + // ASCII printable code chart + // var LOWER = 'abcdefghijklmnopqrstuvwxyz' + // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + // var NUMBER = '0123456789' + // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' + var LOWER = ascii(97, 122); + var UPPER = ascii(65, 90); + var NUMBER = ascii(48, 57); + var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) + var PRINTABLE = ascii(32, 126); + var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; + var CHARACTER_CLASSES = { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ""); + } + return result; + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, + }; + + // 从 from 到 to 包含两个端点的字符串 + function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); + } + + // var ast = RegExpParser.parse(regexp.source) + Handler$2.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); + }; + + Handler$2.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case "start": + case "end": + return ""; + case "any-character": + return character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return pick(NUMBER.split("")); + case "non-digit": + return pick((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return pick(SPACE.split("")); + case "non-white-space": + return pick((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return pick(OTHER.replace("_", "").split("")); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean$1() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ""; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + "capture-group": function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + "non-capture-group": function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + "positive-lookahead": function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + "negative-lookahead": function (node, result, cache) { + // node.body + return ""; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this["invert-charset"](node, result, cache); + + // node.body [] + var literal = pick(node.body); + return this.gen(literal, result, cache); + }, + "invert-charset": function (node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ""); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ""); + } + } + } + } + return pick(pool.split("")); + }, + range: function (node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, + }); + + var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$2 + }); + + function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + let Source = count === undefined ? source : Array(count).fill(source).join(""); + return Handler$2.gen(parser.parse(Source)); + } + + function getValueByKeyPath(key, options) { + var originalKey = key; + var keyPathParts = splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } - function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); - } + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); + } + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + function normalizePath(pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; + } + function splitPathToArray(path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + } + + const _all = Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + function placeholder(placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var parts = Constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = _all[lkey], + params = (parts && parts[2]) || ""; + var pathParts = splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } - function each(obj, iterator, context) { - // each - var i, key; - if (type(obj) === "number") { - //表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } - } + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } - /* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 - */ - function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, "") - .replace(/\*\/[^\/]+$/, "") - .replace(/^[\s\xA0]+/, "") - .replace(/[\s\xA0]+$/, ""); // .trim() - } + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; - /* - ## Utilities - */ - function keys(obj) { - return Object.keys(obj); - } - function values(obj) { - return Object.values(obj); - } - function noop() {} - - var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: assignIn, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc - }); + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = placeholder(params[i], obj, templateContext, options); + } + } - const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); - }; - const random = function (min, max) { - return Math.random() * (max - min) + min; - }; - - // 返回一个随机的整数。 - const integer = function (min, max) { - min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; - max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 - return Math.round(random(min, max)); - }; - const natural = function (min, max) { - return Math.abs(integer(min, max)); - }; - - const boolean = function (min, max, cur) { - if (cur) { - min = isNumber(min) ? parseInt(min, 10) : 1; - max = isNumber(max) ? parseInt(max, 10) : 1; - return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - } - return Math.random() >= 0.5; - }; - - const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", - }; - pools.alpha = pools.lower + pools.upper; - pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - - const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); - }; - - const string = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map((i) => character(pool)).join(""); - }; - - const range$1 = function (...args) { - // range( stop ) - let start, stop, step; - if (arguments.length <= 1) { - [stop] = args; - return [...Array(stop).keys()]; - } - - // range( start, stop ,step=1) - // range(10,20,3) = [10,13,16,19] - [start, stop, step = 1] = args; - let arrayLength = Math.ceil((stop - start) / step); - return [...Array(arrayLength).keys()].map((index) => { - return start + index * step; - }); - }; - - const float = function (min, max, dmin, dmax) { - dmin = isNumber(dmin) ? dmin : 0; - dmax = isNumber(dmax) ? dmax : 17; - dmin = Math.max(Math.min(dmin, 17), 0); - dmax = Math.max(Math.min(dmax, 17), 0); - let dcount = natural(dmin, dmax); - var ret = - integer(min, max) + - "." + - [...Array(dcount).keys()] - .map((i) => { - // 最后一位不能为 0,所以必须进行处理 - return i < dcount - 1 ? this.character("number") : this.character("123456789"); - }) - .join(""); - return parseFloat(ret, 10); - }; - - /* - ## Color Convert - - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 - */ - function hsv2rgb(hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - s * f); - var t = 255 * v * (1 - s * (1 - f)); - - v = 255 * v; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } - } - function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, - l; - l = (2 - s) * v; - sl = s * v; - sl /= l <= 1 ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; - } - // http://www.140byt.es/keywords/color - function rgb2hex(a, b, c) { - return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); - } - - /* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) - */ - var DICT$1 = { - // name value nicer - navy: { - value: "#000080", - nicer: "#001F3F", - }, - blue: { - value: "#0000ff", - nicer: "#0074D9", - }, - aqua: { - value: "#00ffff", - nicer: "#7FDBFF", - }, - teal: { - value: "#008080", - nicer: "#39CCCC", - }, - olive: { - value: "#008000", - nicer: "#3D9970", - }, - green: { - value: "#008000", - nicer: "#2ECC40", - }, - lime: { - value: "#00ff00", - nicer: "#01FF70", - }, - yellow: { - value: "#ffff00", - nicer: "#FFDC00", - }, - orange: { - value: "#ffa500", - nicer: "#FF851B", - }, - red: { - value: "#ff0000", - nicer: "#FF4136", - }, - maroon: { - value: "#800000", - nicer: "#85144B", - }, - fuchsia: { - value: "#ff00ff", - nicer: "#F012BE", - }, - purple: { - value: "#800080", - nicer: "#B10DC9", - }, - silver: { - value: "#c0c0c0", - nicer: "#DDDDDD", - }, - gray: { - value: "#808080", - nicer: "#AAAAAA", - }, - black: { - value: "#000000", - nicer: "#111111", - }, - white: { - value: "#FFFFFF", - nicer: "#FFFFFF", - }, - }; - - /* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() - */ - - // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - // https://github.com/devongovett/color-generator/blob/master/index.js - // 随机生成一个有吸引力的颜色。 - - let _hue; - function _goldenRatioColor(saturation, value) { - let _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return [_hue * 360, saturation * 100, value * 100]; - } - - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 - function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return hex(); - } - - // #DAC0DE - function hex() { - var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); - return hex; - } - - // rgb(128,255,255) - function rgb() { - var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; - } - // rgba(128,255,255,0.3) - function rgba() { - var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; - } - - // hsl(300,80%,90%) - function hsl() { - var hsv = _goldenRatioColor(); - var hsl = hsv2hsl(hsv); - return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; - } - - var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] - }; - var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" - ]; - var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" - ]; - var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" - ]; - var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 - }; - - /* - ## Helpers - */ - const upper = function (str) { - return (str + "").toUpperCase(); - }; - const lower = function (str) { - return (str + "").toLowerCase(); - }; - // 从数组中随机选取一个元素,并返回。 - const pick$1 = function (...args) { - let [arr, min, max] = args; - // pick( item1, item2 ... ) - if (!(arr instanceof Array)) { - arr = args; - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max); - }; - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) - */ - const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; - /* falls through */ - case 3: - min = parseInt(min, 10); - max = parseInt(max, 10); - return result.slice(0, natural(min, max)); - } - }; - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - const order = function order(array) { - order.cache = order.cache || {}; - - if (arguments.length > 1) array = [].slice.call(arguments, 0); - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; - }; - - /* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) - */ - let { firstName, lastName, cfirstName, clastName } = Name; - // 随机生成一个常见的英文名。 - function first() { - var names = firstName.male.concat(); - return pick$1(names); - } - // 随机生成一个常见的英文姓。 - function last() { - return this.pick(lastName); - } - // 随机生成一个常见的英文姓名。 - function name(middle) { - middle = middle ? ` ${first()} ` : " "; - return `${first()}${middle}${last()}`; - } - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - function cfirst() { - return pick$1(cfirstName); - } /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - function clast() { - return pick$1(clastName); - } - // 随机生成一个常见的中文姓名。 - function cname() { - return cfirst() + clast(); - } - - // Unique ID creation requires a high quality random # generator. In the browser we therefore - // require the crypto API and do not support built-in fallback to lower quality random number - // generators (like Math.random()). - var getRandomValues; - var rnds8 = new Uint8Array(16); - function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (type$1(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; } - - return getRandomValues(rnds8); - } - - var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - - function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); - } - - /** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - - var byteToHex = []; - - for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); - } - - function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); + } + + function string(options) { + let { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = "", + } = options; + var result = ""; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(""); + + // 'email|1-10': '@EMAIL, ', + let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + let phed = placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; } - - return uuid; - } - - function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; + return result; + } + + var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string + }); + + let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 + function gen(template, name = "", context = {}) { + var newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + var type = type$1(template); + let func = typeset[type]; + var data; + + if (func) { + data = func({ + // 属性值类型 + type, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, + // 解析后的生成规则 + rule: parser$1(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; + } + + /* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + + */ + /* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot + */ + var Handler$1 = { + gen, + extend, + }; + Handler$1.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, + }); + Handler$1.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, + }); + + /* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + + function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + var result = { + name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + template, + type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? "ROOT" : result.name); + + switch (result.type) { + case "array": + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case "object": + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; } - return stringify(rnds); - } - - var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" - }; - - /* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - */ - - // id pid/parentId name children - - // 将扁平数组转化为树状 - function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; - mapped[id] = item; - /* jshint -W041 */ - // undefined 时是一个顶级元素 - if (pid === undefined) { - result.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - if (!parent) { - //父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - } - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; - } - const ids = Object.keys(DICT); - // 转化数组内对象的表现形式 - const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? undefined : id.slice(4, 6) == "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!(pid in ids)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + "0000"; - } - return { - id, - pid, - name: value, - }; - }); - - const DICT_FIXED = createTree(fixed); - - var _patternLetters = { - yyyy: "getFullYear", - yy: function (date) { - return ("" + date.getFullYear()).slice(2); - }, - y: "yy", - - MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; - }, - d: "getDate", - - HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; - }, - H: "getHours", - hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; - }, - m: "getMinutes", - - ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; - }, - s: "getSeconds", - - SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; - }, - S: "getMilliseconds", - - A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; - }, - a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; - }, - T: "getTime", - }; - - /* - ## Date - */ - const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - // 返回一个随机的日期字符串。 - function date(format = "yyyy-MM-dd") { - return this._formatDate(this._randomDate(), format); - } - var date$1 = { - // 日期占位符集合。 - _patternLetters, - // 日期占位符正则。 - _rformat: reRule, - // 格式化日期。 - _formatDate: function (date, format) { - return format.replace(this._rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); - }, - // 生成一个随机的 Date 对象。 - _randomDate: function (min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - }, - - // 返回一个随机的时间字符串。 - time: function (format = "HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, - // 返回一个随机的日期和时间字符串。 - datetime: function (format = "yyyy-MM-dd HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, - date, - - // 返回当前的日期和时间字符串。 - now: function (unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); - } - - return this._formatDate(date, format); - }, - // KonghaYao 新增函数:生成固定时间段的时间戳 - timestamp: function (min, max) { - if (min instanceof Date && max instanceof Date) return this._randomDate(min, max); - return this._randomDate(); - }, - }; - - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - function id() { - var id, - sum = 0, - rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], - last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; - - id = pick$1(DICT_FIXED).id + date("yyyyMMdd") + string("number", 3); - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; - } - - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ - function guid() { - return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); - } - - /* - ## Miscellaneous - */ - - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - let key = 0; - const increment = function (step) { - return (key += +step || 1); - }; - const inc = increment; - - // Dice - function d4() { - return this.natural(1, 4); - } - function d6() { - return this.natural(1, 6); - } - function d8() { - return this.natural(1, 8); - } - function d12() { - return this.natural(1, 12); - } - function d20() { - return this.natural(1, 20); - } - function d100() { - return this.natural(1, 100); - } - - function range(defaultMin, defaultMax, min, max) { - return min === undefined - ? natural(defaultMin, defaultMax) // () - : max === undefined - ? min // ( len ) - : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) - } - - // 随机生成一个句子,第一个单词的首字母大写。 - function sentence(min, max) { - var len = range(12, 18, min, max); - let string = [...Array(len)].map(() => word()).join(""); - return capitalize(string) + "."; - } - - // 随机生成一个单词。 - function word(min, max) { - var len = range(3, 10, min, max); - return [...Array(len)].map(() => character("lower")).join(""); - } - - // 随机生成一段文本。 - function paragraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map((i) => sentence()); - } - - // 随机生成一句标题,其中每个单词的首字母大写。 - function title(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => capitalize(word())).join(""); - } - - function cparagraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => csentence()).join(""); - } - - // 随机生成一个中文句子。 - function csentence(min, max) { - var len = range(12, 18, min, max); - return [...Array(len)].map(() => cword()).join("") + "。"; - } - // 随机生成一句中文标题。 - function ctitle(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => cword()).join(""); - } - // 随机生成一个或多个汉字。 - function cword(...args) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; - - var len = 1, - pool = DICT_KANZI, - min, - max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === "string") { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(pool, min); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len)].map(() => pool.charAt(natural(0, pool.length - 1))).join(""); - } - - // 协议簇 - const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); - // 域名后缀 - ( - "com net org edu gov int mil cn " + - // 国内域名 - "com.cn net.cn gov.cn org.cn " + - // 中文国内域名 - "中国 中国互联.公司 中国互联.网络 " + - // 新国际域名 - "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + - // 世界各国域名后缀 - "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" - ).split(" "); - - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; - } - - // 随机生成一个 URL 协议。 - function protocol() { - return pick$1(protocols); - } - // 随机生成一个域名。 - function domain(Tld) { - return `${word()}.${Tld || tld()}`; - } - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - function tld() { - // Top Level Domain - return pick$1(tlds); - } - - // 随机生成一个邮件地址。 - function email(domain) { - return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; - } - // 随机生成一个 IP 地址。 - function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join("."); - } - - var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" - ]; - var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" - ]; - var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" - ]; - var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 - }; - - var Addvocate = "#ff6138"; - var Adobe = "#ff0000"; - var Aim = "#fcd20b"; - var Amazon = "#e47911"; - var Android = "#a4c639"; - var AOL = "#0060a3"; - var Atlassian = "#003366"; - var Behance = "#053eff"; - var bitly = "#ee6123"; - var Blogger = "#fc4f08"; - var Boeing = "#0039a6"; - var Carbonmade = "#613854"; - var Cheddar = "#ff7243"; - var Delicious = "#205cc0"; - var Dell = "#3287c1"; - var Designmoo = "#e54a4f"; - var Deviantart = "#4e6252"; - var Devour = "#fd0001"; - var DEWALT = "#febd17"; - var Dribbble = "#ea4c89"; - var Dropbox = "#3d9ae8"; - var Drupal = "#0c76ab"; - var Dunked = "#2a323a"; - var eBay = "#89c507"; - var Ember = "#f05e1b"; - var Engadget = "#00bdf6"; - var Envato = "#528036"; - var Etsy = "#eb6d20"; - var Evernote = "#5ba525"; - var Facebook = "#3b5998"; - var Firefox = "#e66000"; - var Forrst = "#5b9a68"; - var Foursquare = "#25a0ca"; - var Garmin = "#007cc3"; - var GetGlue = "#2d75a2"; - var Gimmebar = "#f70078"; - var GitHub = "#171515"; - var Grooveshark = "#f77f00"; - var Groupon = "#82b548"; - var HelloWallet = "#0085ca"; - var HootSuite = "#003366"; - var Houzz = "#73ba37"; - var HTML5 = "#ec6231"; - var IKEA = "#ffcc33"; - var IMDb = "#f3ce13"; - var Instagram = "#3f729b"; - var Intel = "#0071c5"; - var Intuit = "#365ebf"; - var Kickstarter = "#76cc1e"; - var kippt = "#e03500"; - var Kodery = "#00af81"; - var LastFM = "#c3000d"; - var LinkedIn = "#0e76a8"; - var Livestream = "#cf0005"; - var Lumo = "#576396"; - var Mixpanel = "#a086d3"; - var Meetup = "#e51937"; - var Nokia = "#183693"; - var NVIDIA = "#76b900"; - var Opera = "#cc0f16"; - var Path = "#e41f11"; - var Pinboard = "#0000e6"; - var Pinterest = "#c8232c"; - var PlayStation = "#665cbe"; - var Pocket = "#ee4056"; - var Prezi = "#318bff"; - var Pusha = "#0f71b4"; - var Quora = "#a82400"; - var Rdio = "#008fd5"; - var Readability = "#9c0000"; - var Resource = "#7eb400"; - var Rockpack = "#0ba6ab"; - var Roon = "#62b0d9"; - var RSS = "#ee802f"; - var Salesforce = "#1798c1"; - var Samsung = "#0c4da2"; - var Shopify = "#96bf48"; - var Skype = "#00aff0"; - var Snagajob = "#f47a20"; - var Softonic = "#008ace"; - var SoundCloud = "#ff7700"; - var Spotify = "#81b71a"; - var Sprint = "#fee100"; - var Squarespace = "#121212"; - var StackOverflow = "#ef8236"; - var Staples = "#cc0000"; - var Stripe = "#008cdd"; - var StudyBlue = "#00afe1"; - var StumbleUpon = "#f74425"; - var Technorati = "#40a800"; - var Treehouse = "#5cb868"; - var Trulia = "#5eab1f"; - var Tumblr = "#34526f"; - var Twitter = "#00acee"; - var TYPO3 = "#ff8700"; - var Ubuntu = "#dd4814"; - var Ustream = "#3388ff"; - var Verizon = "#ef1d1d"; - var Vimeo = "#86c9ef"; - var Vine = "#00a478"; - var Virb = "#06afd8"; - var Wooga = "#5b009c"; - var Wunderlist = "#2b88d9"; - var XBOX = "#9bc848"; - var XING = "#126567"; - var Yandex = "#ffcc00"; - var Yelp = "#c41200"; - var YouTube = "#c4302b"; - var Zalongo = "#5498dc"; - var Zendesk = "#78a300"; - var Zerply = "#9dcc7a"; - var Zootool = "#5e8b1d"; - var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool - }; - - /* global document */ - let { _adSize, _screenSize, _videoSize } = size; - const _brandNames = Object.keys(_brandColors); - - /* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - function image(...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = foreground.replace(/^#/, ""); - background = background.replace(/^#/, ""); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${backgroound ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; - } - - var image$1 = { - ...size, - image, - img: image, - - _brandColors, - _brandNames, - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - dataImage: function (size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); - }, - }; - - /* - ## Address - */ - var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - var address = { - // 随机生成一个大区。 - region: function () { - return pick$1(REGION); - }, - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - province: function () { - return pick$1(DICT_FIXED).name; - }, - // 随机生成一个(中国)市。 - city: function (prefix) { - var province = pick$1(DICT_FIXED); - var city = pick$1(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; - }, - // 随机生成一个(中国)县。 - county: function (prefix) { - var province = pick$1(DICT_FIXED); - var city = pick$1(province.children); - var county = pick$1(city.children) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; - }, - // 随机生成一个邮政编码(六位数字)。 - zip: function (len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; - }, - - // address: function() {}, - // phone: function() {}, - // areacode: function() {}, - // street: function() {}, - // street_suffixes: function() {}, - // street_suffix: function() {}, - // states: function() {}, - // state: function() {}, - }; - - /* - ## Mock.Random - - 工具类,用于生成各种随机数据。 - */ - - var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - date: date$1, - image: image$1, - address: address, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - boolean: boolean, - bool: boolean, - character: character, - char: character, - string: string, - str: string, - range: range$1, - float: float, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize$1, - upper: upper, - lower: lower, - pick: pick$1, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url - }); - - /* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - /* jshint -W041 */ - function parser$1(name) { - name = name == undefined ? "" : name + ""; - - var parameters = (name || "").match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - } - - // https://github.com/nuysoft/regexp - - function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); - } - - function Alternate(n, l) { - Token.call(this, "alternate"), (this.left = n), (this.right = l); - } - - function Match(n) { - Token.call(this, "match"), (this.body = n.filter(Boolean)); - } - - function Group(n, l) { - Token.call(this, n), (this.body = l); - } - - function CaptureGroup(n) { - Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); - } - - function Quantified(n, l) { - Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); - } - - function Quantifier(n, l) { - Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); - } - - function CharSet(n, l) { - Token.call(this, "charset"), (this.invert = n), (this.body = l); - } - - function CharacterRange(n, l) { - Token.call(this, "range"), (this.start = n), (this.end = l); - } - - function Literal(n) { - Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); - } - - function Unicode(n) { - Token.call(this, "unicode"), (this.code = n.toUpperCase()); - } - - function Hex(n) { - Token.call(this, "hex"), (this.code = n.toUpperCase()); - } - - function Octal(n) { - Token.call(this, "octal"), (this.code = n.toUpperCase()); - } - - function BackReference(n) { - Token.call(this, "back-reference"), (this.code = n.toUpperCase()); - } - - function ControlCharacter(n) { - Token.call(this, "control-character"), (this.code = n.toUpperCase()); - } - - var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, "\\\\") - .replace(/"/g, '\\"') - .replace(/\x08/g, "\\b") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\f/g, "\\f") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return "\\x0" + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return "\\x" + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return "\\u0" + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; - } - (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - "\n" === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : "\r" === e || "\u2028" === e || "\u2029" === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), - null === t && (t = al), - null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function s() { - var l, u; - return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function h() { - var n, l, u; - return ( - (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), - null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function g() { - var l, u; - return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function b() { - var l, u; - return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) - for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) - if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function M() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function D() { - var l, u; - return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function H() { - var l, u; - return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function O() { - var l, u; - return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function W() { - var l, u; - return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function z() { - var l, u; - return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function I() { - var l, u; - return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function J() { - var l, u; - return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function K() { - var l, u; - return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function N() { - var l, u; - return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function P() { - var l, u; - return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function V() { - var l, u; - return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function X() { - var l, u; - return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { - if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) - for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = "", - fl = "|", - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = "^", - vl = '"^"', - wl = function () { - return new Token("start"); - }, - Al = "$", - Cl = '"$"', - gl = function () { - return new Token("end"); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = "Quantifier", - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = "{", - yl = '"{"', - ml = ",", - Rl = '","', - Fl = "}", - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ",}", - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = "+", - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = "*", - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = "?", - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = "[0-9]", - Jl = function (n) { - return +n.join(""); - }, - Kl = "(", - Nl = '"("', - Pl = ")", - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = "?:", - _l = '"?:"', - nu = function (n) { - return new Group("non-capture-group", n); - }, - lu = "?=", - uu = '"?="', - tu = function (n) { - return new Group("positive-lookahead", n); - }, - ru = "?!", - eu = '"?!"', - ou = function (n) { - return new Group("negative-lookahead", n); - }, - cu = "CharacterSet", - iu = "[", - au = '"["', - fu = "]", - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = "CharacterRange", - pu = "-", - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = "Character", - Cu = /^[^\\\]]/, - gu = "[^\\\\\\]]", - bu = function (n) { - return new Literal(n); - }, - ku = ".", - Tu = '"."', - xu = function () { - return new Token("any-character"); - }, - yu = "Literal", - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = "[^|\\\\\\/.[()?+*$\\^]", - Fu = "\\b", - Qu = '"\\\\b"', - Su = function () { - return new Token("backspace"); - }, - Uu = function () { - return new Token("word-boundary"); - }, - Eu = "\\B", - Gu = '"\\\\B"', - Bu = function () { - return new Token("non-word-boundary"); - }, - ju = "\\d", - $u = '"\\\\d"', - qu = function () { - return new Token("digit"); - }, - Lu = "\\D", - Mu = '"\\\\D"', - Du = function () { - return new Token("non-digit"); - }, - Hu = "\\f", - Ou = '"\\\\f"', - Wu = function () { - return new Token("form-feed"); - }, - zu = "\\n", - Iu = '"\\\\n"', - Ju = function () { - return new Token("line-feed"); - }, - Ku = "\\r", - Nu = '"\\\\r"', - Pu = function () { - return new Token("carriage-return"); - }, - Vu = "\\s", - Xu = '"\\\\s"', - Yu = function () { - return new Token("white-space"); - }, - Zu = "\\S", - _u = '"\\\\S"', - nt = function () { - return new Token("non-white-space"); - }, - lt = "\\t", - ut = '"\\\\t"', - tt = function () { - return new Token("tab"); - }, - rt = "\\v", - et = '"\\\\v"', - ot = function () { - return new Token("vertical-tab"); - }, - ct = "\\w", - it = '"\\\\w"', - at = function () { - return new Token("word"); - }, - ft = "\\W", - st = '"\\\\W"', - ht = function () { - return new Token("non-word"); - }, - dt = "\\c", - pt = '"\\\\c"', - vt = "any character", - wt = function (n) { - return new ControlCharacter(n); - }, - At = "\\", - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = "[1-9]", - kt = function (n) { - return new BackReference(n); - }, - Tt = "\\0", - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = "[0-7]", - Rt = function (n) { - return new Octal(n.join("")); - }, - Ft = "\\x", - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = "[0-9a-fA-F]", - Et = function (n) { - return new Hex(n.join("")); - }, - Gt = "\\u", - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join("")); - }, - $t = function () { - return new Token("null-character"); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - - /* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ - /* - - */ - var Handler$1 = { - extend: assignIn, - }; - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart - /*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] - }*/ - - // ASCII printable code chart - // var LOWER = 'abcdefghijklmnopqrstuvwxyz' - // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - // var NUMBER = '0123456789' - // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' - var LOWER = ascii(97, 122); - var UPPER = ascii(65, 90); - var NUMBER = ascii(48, 57); - var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) - var PRINTABLE = ascii(32, 126); - var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; - var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); - } - return result; - })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, - }; - - // 从 from 到 to 包含两个端点的字符串 - function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); - } - - // var ast = RegExpParser.parse(regexp.source) - Handler$1.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); - }; - - Handler$1.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": - return character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO - break; - case "digit": - return pick$1(NUMBER.split("")); - case "non-digit": - return pick$1((LOWER + UPPER + OTHER).split("")); - case "form-feed": - break; - case "line-feed": - return node.body || node.text; - case "carriage-return": - break; - case "white-space": - return pick$1(SPACE.split("")); - case "non-white-space": - return pick$1((LOWER + UPPER + NUMBER).split("")); - case "tab": - break; - case "vertical-tab": - break; - case "word": // \w [a-zA-Z0-9] - return pick$1((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return pick$1(OTHER.replace("_", "").split("")); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ""; - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - "capture-group": function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - "non-capture-group": function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - "positive-lookahead": function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - "negative-lookahead": function (node, result, cache) { - // node.body - return ""; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ""; - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); - - // node.body [] - var literal = pick$1(node.body); - return this.gen(literal, result, cache); - }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); - break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); - } - } - } - } - return pick$1(pool.split("")); - }, - range: function (node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " - ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - "control-character": function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, - }); - - var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$1 - }); - - /* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) + return result; + } + + /* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) + */ + + function valid(template, data) { + var schema = toJSONSchema(template); + var result = Diff.diff(schema, data); + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; + } + + /* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 + */ + var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + var result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } - */ + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + var length = result.length; + + Assert.equal("name", schema.path, name + "", schema.name + "", result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + var length = result.length; + + switch (schema.type) { + case "string": + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case "array": + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case "function": + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } - var Handler = { - extend: assignIn, - }; + Assert.equal("type", schema.path, type$1(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var templateType = schema.type; + if (templateType === "object" || templateType === "array" || templateType === "function") return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case "regexp": + Assert.match("value", schema.path, data, schema.template, result); + return result.length === length; + case "string": + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal("value", schema.path, data, schema.template, result); + return result.length === length; + } - /* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot - */ - Handler.gen = function (template, name, context) { - /* jshint -W041 */ - name = name == undefined ? "" : name + ""; - - context = context || {}; - context = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [Constant.GUID], - templatePath: context.templatePath || [Constant.GUID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var rule = parser$1(name); - var type = type(template); - var data; - - if (Handler[type]) { - data = Handler[type]({ - // 属性值类型 - type: type, - // 属性值模板 - template: template, - // 属性名 + 生成规则 - name: name, - // 属性名 - parsedName: name ? name.replace(Constant.RE_KEY, "$1") : name, - - // 解析后的生成规则 - rule: rule, - // 相关上下文 - context: context, - }); - - if (!context.root) context.root = data; - return data; - } + // 有生成规则 + var actualRepeatCount; + switch (templateType) { + case "number": + var parts = (data + "").split("."); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case "boolean": + break; + + case "string": + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case "regexp": + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + break; + } - return template; - }; + return result.length === length; + }, + properties: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); + } + } - Handler.extend({ - array: function (options) { - var result = [], - i, - ii; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (options.template.length === 0) return result; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!options.rule.parameters) { - for (i = 0; i < options.template.length; i++) { - options.context.path.push(i); - options.context.templatePath.push(i); - result.push( - Handler.gen(options.template[i], i, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (options.rule.min === 1 && options.rule.max === undefined) { - // fix #17 - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = pick$1( - Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|+1': [{}, {}] - if (options.rule.parameters[2]) { - options.template.__order_index = options.template.__order_index || 0; - - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - })[options.template.__order_index % options.template.length]; - - options.template.__order_index += +options.rule.parameters[2]; - - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|1-10': [{}] - for (i = 0; i < options.rule.count; i++) { - // 'data|1-10': [{}, {}] - for (ii = 0; ii < options.template.length; ii++) { - options.context.path.push(result.length); - options.context.templatePath.push(ii); - result.push( - Handler.gen(options.template[ii], result.length, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } - } - } - } - return result; - }, - object: function (options) { - var result = {}, - keys, - fnKeys, - key, - parsedKey, - inc, - i; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (options.rule.min != undefined) { - keys = Object.keys(options.template); - keys = shuffle(keys); - keys = keys.slice(0, options.rule.count); - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(Constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'obj': {} - keys = []; - fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 - for (key in options.template) { - (typeof options.template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(options.template) - keys.sort(function(a, b) { - var afn = typeof options.template[a] === 'function' - var bfn = typeof options.template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(Constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - // 'id|+1': 1 - inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type$1(options.template[key]) === "number") { - options.template[key] += parseInt(inc[2], 10); - } - } - } - return result; - }, - number: function (options) { - var result, parts; - if (options.rule.decimal) { - // float - options.template += ""; - parts = options.template.split("."); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parts[0] = options.rule.range ? options.rule.count : parts[0]; - parts[1] = (parts[1] || "").slice(0, options.rule.dcount); - while (parts[1].length < options.rule.dcount) { - parts[1] += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - parts[1].length < options.rule.dcount - 1 ? character("number") : character("123456789"); - } - result = parseFloat(parts.join("."), 10); - } else { - // integer - // 'grade1|1-100': 1, - result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; - } - return result; - }, - boolean: function (options) { - var result; - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? boolean(options.rule.min, options.rule.max, options.template) : options.template; - return result; - }, - string: function (options) { - var result = "", - i, - placeholders, - ph, - phed; - if (options.template.length) { - // 'foo': '★', - /* jshint -W041 */ - if (options.rule.count == undefined) { - result += options.template; - } - - // 'star|1-5': '★', - for (i = 0; i < options.rule.count; i++) { - result += options.template; - } - // 'email|1-10': '@EMAIL, ', - placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - for (i = 0; i < placeholders.length; i++) { - ph = placeholders[i]; - - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(i--, 1); - continue; - } - - phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - break; - } - result = result.replace(ph, phed); - } - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = options.rule.range ? string(options.rule.count) : options.template; - } - return result; - }, - function: function (options) { - // ( context, options ) - return options.template.call(options.context.currentContext, options); - }, - regexp: function (options) { - var source = ""; - - // 'name': /regexp/, - /* jshint -W041 */ - if (options.rule.count == undefined) { - source += options.template.source; // regexp.source - } - - // 'name|1-5': /regexp/, - for (var i = 0; i < options.rule.count; i++) { - source += options.template.source; - } - - return Handler$1.gen(parser.parse(source)); - }, - }); + if (result.length !== length) return false; + + for (var i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + var property; + each(schema.properties, function (item /*, index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i] + ) + ); + } - Handler.extend({ - _all: function () { - var re = {}; - for (var key in Random) re[key.toLowerCase()] = key; - return re; - }, - // 处理占位符,转换为最终值 - placeholder: function (placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = this._all()[lkey], - params = (parts && parts[2]) || ""; - var pathParts = this.splitPathToArray(key); - - // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = Handler.gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = Handler.placeholder(params[i], obj, templateContext, options); - } - } - - var handle = Random[key] || Random[lkey] || Random[okey]; - switch (type$1(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick$1(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - }, - getValueByKeyPath: function (key, options) { - var originalKey = key; - var keyPathParts = this.splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); - }, - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function (pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - }, - splitPathToArray: function (path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; - }, - }); + return result.length === length; + }, + items: function (schema, data, name, result) { + var length = result.length; + + if (!schema.items) return; + + var rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("items length", schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + "items", + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + ); + Assert.lessThanOrEqualTo( + "items", + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } - /* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - - function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - var result = { - name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, - template, - type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? "ROOT" : result.name); - - switch (result.type) { - case "array": - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case "object": - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } + if (result.length !== length) return false; - return result; - } + for (var i = 0; i < data.length; i++) { + result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); + } - /* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) - */ - - function valid(template, data) { - var schema = toJSONSchema(template); - var result = Diff.diff(schema, data); - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; - } + return result.length === length; + }, + }; + + /* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + + */ + var Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace("{utype}", item.type.toUpperCase()) + .replace("{ltype}", item.type.toLowerCase()) + .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) + .replace("{action}", item.action) + .replace("{expected}", item.expected) + .replace("{actual}", item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case "type": + // 正则模板 === 字符串最终值 + if (expected === "regexp" && actual === "string") return true; + break; + } - /* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 - */ - var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - var result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - var length = result.length; - - Assert.equal("name", schema.path, name + "", schema.name + "", result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - var length = result.length; - - switch (schema.type) { - case "string": - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case "array": - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case "function": - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal("type", schema.path, type$1(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var templateType = schema.type; - if (templateType === "object" || templateType === "array" || templateType === "function") return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case "regexp": - Assert.match("value", schema.path, data, schema.template, result); - return result.length === length; - case "string": - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal("value", schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - var actualRepeatCount; - switch (templateType) { - case "number": - var parts = (data + "").split("."); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case "boolean": - break; - - case "string": - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case "regexp": - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (var i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - var property; - each(schema.properties, function (item /*, index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i] - ) - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - var length = result.length; - - if (!schema.items) return; - - var rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("items length", schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - "items", - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" - ); - Assert.lessThanOrEqualTo( - "items", - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (var i = 0; i < data.length; i++) { - result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); - } - - return result.length === length; - }, - }; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "matches", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is not equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + }; + + valid.Diff = Diff; + valid.Assert = Assert; + + /* global window, document, location, Event, setTimeout */ + // 备份原生 XMLHttpRequest + window._XMLHttpRequest = window.XMLHttpRequest; + window._ActiveXObject = window.ActiveXObject; + + /* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 + */ + try { + new window.Event("custom"); + } catch (exception) { + window.Event = function (type, bubbles, cancelable, detail) { + var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event; + }; + } + + var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4, + }; + + var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); + var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); + var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); + + // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 + var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + }; + + /* + MockXMLHttpRequest + */ + + function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {}, + }; + } + + MockXMLHttpRequest._settings = { + timeout: "10-100", + /* + timeout: 50, + timeout: '10-100', + */ + }; + + MockXMLHttpRequest.setup = function (settings) { + assignIn(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings; + }; + + assignIn(MockXMLHttpRequest, XHR_STATES); + assignIn(MockXMLHttpRequest.prototype, XHR_STATES); + + // 标记当前对象为 MockXMLHttpRequest + MockXMLHttpRequest.prototype.mock = true; + + // 是否拦截 Ajax 请求 + MockXMLHttpRequest.prototype.match = false; + + // 初始化 Request 相关的属性和方法 + assignIn(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function (method, url, async = true, username, password) { + var that = this; + + assignIn(this.custom, { + method: method, + url: url, + async: typeof async === "boolean" ? async : true, + username: username, + password: password, + options: { + url: url, + type: method, + }, + }); + + this.custom.timeout = (function (timeout) { + if (typeof timeout === "number") return timeout; + if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); + if (typeof timeout === "string" && ~timeout.indexOf("-")) { + var tmp = timeout.split("-"); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min; + } + })(MockXMLHttpRequest._settings.timeout); + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options); + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/)); + } - /* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - - */ - var Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace("{utype}", item.type.toUpperCase()) - .replace("{ltype}", item.type.toLowerCase()) - .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) - .replace("{action}", item.action) - .replace("{expected}", item.expected) - .replace("{actual}", item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case "type": - // 正则模板 === 字符串最终值 - if (expected === "regexp" && actual === "string") return true; - break; - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "matches", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is not equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - }; + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; + + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle); + } + + // xhr.open() + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); + + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; + } catch (e) {} + } + + return; + } - valid.Diff = Diff; - valid.Assert = Assert; + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function (name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value); + return; + } - /* global window, document, location, Event, setTimeout */ + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += "," + value; + else requestHeaders[name] = value; + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this; + this.custom.options.body = data; + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data); + return; + } - // 备份原生 XMLHttpRequest - window._XMLHttpRequest = window.XMLHttpRequest; - window._ActiveXObject = window.ActiveXObject; + // 拦截 XHR - /* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + // X-Requested-With header + this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 - */ - try { - new window.Event("custom"); - } catch (exception) { - window.Event = function (type, bubbles, cancelable, detail) { - var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event; - }; - } + // loadstart The fetch initiates. + this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4, - }; + if (this.custom.async) setTimeout(done, this.custom.timeout); + // 异步 + else done(); // 同步 - var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); - var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); - var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); - - // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 - var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", - }; + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - /* - MockXMLHttpRequest - */ - - function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {}, - }; - } + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; - MockXMLHttpRequest._settings = { - timeout: "10-100", - /* - timeout: 50, - timeout: '10-100', - */ - }; - - MockXMLHttpRequest.setup = function (settings) { - assignIn(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings; - }; - - assignIn(MockXMLHttpRequest, XHR_STATES); - assignIn(MockXMLHttpRequest.prototype, XHR_STATES); - - // 标记当前对象为 MockXMLHttpRequest - MockXMLHttpRequest.prototype.mock = true; - - // 是否拦截 Ajax 请求 - MockXMLHttpRequest.prototype.match = false; - - // 初始化 Request 相关的属性和方法 - assignIn(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async, username, password) { - var that = this; - - assignIn(this.custom, { - method: method, - url: url, - async: typeof async === "boolean" ? async : true, - username: username, - password: password, - options: { - url: url, - type: method, - }, - }); - - this.custom.timeout = (function (timeout) { - if (typeof timeout === "number") return timeout; - if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); - if (typeof timeout === "string" && ~timeout.indexOf("-")) { - var tmp = timeout.split("-"); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min; - } - })(MockXMLHttpRequest._settings.timeout); - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/)); - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } - - return; - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function (name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return; - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += "," + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return; - } - - // 拦截 XHR - - // X-Requested-With header - this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); - - // loadstart The fetch initiates. - this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - - if (this.custom.async) setTimeout(done, this.custom.timeout); - // 异步 - else done(); // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.dispatchEvent(new Event("load" /*, false, false, that*/)); - that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return; - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event("abort", false, false, this)); - this.dispatchEvent(new Event("error", false, false, this)); - }, - }); + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - // 初始化 Response 相关的属性和方法 - assignIn(MockXMLHttpRequest.prototype, { - responseURL: "", - status: MockXMLHttpRequest.UNSENT, - statusText: "", - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function (name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name); - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()]; - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function () { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders(); - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ""; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue; - headers += h + ": " + responseHeaders[h] + "\r\n"; - } - return headers; - }, - overrideMimeType: function (/*mime*/) {}, - responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: "", - responseXML: null, - }); - - // EventTarget - assignIn(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); - } - } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } - - var ontype = "on" + event.type; - if (this[ontype]) this[ontype](event); - }, - }); + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.dispatchEvent(new Event("load" /*, false, false, that*/)); + that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); + } + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort(); + return; + } - // Inspired by jQuery - function createNativeXMLHttpRequest() { - var isLocal = (function () { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]); - })(); - - return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} - } + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event("abort", false, false, this)); + this.dispatchEvent(new Event("error", false, false, this)); + }, + }); + + // 初始化 Response 相关的属性和方法 + assignIn(MockXMLHttpRequest.prototype, { + responseURL: "", + status: MockXMLHttpRequest.UNSENT, + statusText: "", + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function (name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name); + } - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} - } - } + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()]; + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function () { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders(); + } - // 查找与请求参数匹配的数据模板:URL,Type - function find(options) { - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; - if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { - // console.log('[mock]', options.url, '>', item.rurl) - return item; - } - } + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders; + var headers = ""; + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue; + headers += h + ": " + responseHeaders[h] + "\r\n"; + } + return headers; + }, + overrideMimeType: function (/*mime*/) {}, + responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: "", + responseXML: null, + }); + + // EventTarget + assignIn(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || []; + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1); + } + } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || []; + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event); + } - function match(expected, actual) { - if (type$1(expected) === "string") { - return expected === actual; - } - if (type$1(expected) === "regexp") { - return expected.test(actual); - } - } - } + var ontype = "on" + event.type; + if (this[ontype]) this[ontype](event); + }, + }); + + // Inspired by jQuery + function createNativeXMLHttpRequest() { + var isLocal = (function () { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]); + })(); + + return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} + } - // 数据模板 => 响应数据 - function convert(item, options) { - return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); - } + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } + } + + // 查找与请求参数匹配的数据模板:URL,Type + function find(options) { + for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { + var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; + if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { + // console.log('[mock]', options.url, '>', item.rurl) + return item; + } + } - /* global require, module, window */ - - var XHR; - if (typeof window !== "undefined") XHR = MockXMLHttpRequest; - - /*! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - */ - var Mock = { - Handler, - Random, - Util, - XHR, - RE, - toJSONSchema, - valid, - heredoc: heredoc, - setup: function (settings) { - return XHR.setup(settings); - }, - _mocked: {}, - }; + function match(expected, actual) { + if (type$1(expected) === "string") { + return expected === actual; + } + if (type$1(expected) === "regexp") { + return expected.test(actual); + } + } + } + + // 数据模板 => 响应数据 + function convert(item, options) { + return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); + } + + /* global require, module, window */ + + var XHR; + if (typeof window !== "undefined") XHR = MockXMLHttpRequest; + + /*! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao + */ + var Mock = { + Handler: Handler$1, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked: {}, + }; + + Mock.version = "1.1.1-es6"; + + // 避免循环依赖 + if (XHR) XHR.Mock = Mock; + + /* + * Mock.mock( template ) + * Mock.mock( function() ) + * Mock.mock( rurl, template ) + * Mock.mock( rurl, function(options) ) + * Mock.mock( rurl, rtype, template ) + * Mock.mock( rurl, rtype, function(options) ) + + 根据数据模板生成模拟数据。 + */ + Mock.mock = function (...args) { + let rurl, + rtype = "", + template; - Mock.version = "1.0.1-beta3"; - - // 避免循环依赖 - if (XHR) XHR.Mock = Mock; - - /* - * Mock.mock( template ) - * Mock.mock( function() ) - * Mock.mock( rurl, template ) - * Mock.mock( rurl, function(options) ) - * Mock.mock( rurl, rtype, template ) - * Mock.mock( rurl, rtype, function(options) ) - - 根据数据模板生成模拟数据。 - */ - Mock.mock = function (rurl, rtype, template) { - // Mock.mock(template) - if (arguments.length === 1) { - return Handler.gen(rurl); - } - // Mock.mock(rurl, template) - if (arguments.length === 2) { - template = rtype; - rtype = undefined; - } - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - Mock._mocked[rurl + (rtype || "")] = { - rurl: rurl, - rtype: rtype, - template: template, - }; - return Mock; - }; + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler$1.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + case 3: + default: + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + rtype] = { + rurl, + rtype, + template, + }; + return Mock; + } + }; - return Mock; + return Mock; }()); diff --git a/dist/mock.js b/dist/mock.js index 7c323cfc..e07da352 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -1,39 +1,5 @@ (function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); -/* - ## Constant - - 常量集合。 - */ -/* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 -*/ -var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ -}; - /** Detect free variable `global` from Node.js. */ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; @@ -1592,7 +1558,7 @@ var upperFirst = createCaseFirst('toUpperCase'); * _.capitalize('FRED'); * // => 'Fred' */ -function capitalize$1(string) { +function capitalize(string) { return upperFirst(toString(string).toLowerCase()); } @@ -1805,6 +1771,11 @@ function isNumeric(value) { return !isNaN(parseFloat(value)) && isFinite(value); } +// import { isObject, isArray } from "./type.js"; +function extend(...args) { + return assignIn(this, ...args); +} + function each(obj, iterator, context) { // each var i, key; @@ -1868,21 +1839,21 @@ function values(obj) { function noop() {} var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: assignIn, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc }); const isNumber = function (el) { @@ -1902,7 +1873,7 @@ const natural = function (min, max) { return Math.abs(integer(min, max)); }; -const boolean = function (min, max, cur) { +const boolean$1 = function (min, max, cur) { if (cur) { min = isNumber(min) ? parseInt(min, 10) : 1; max = isNumber(max) ? parseInt(max, 10) : 1; @@ -1927,7 +1898,7 @@ const character = function (pool = "default") { return pool.charAt(natural(0, pool.length - 1)); }; -const string = function (...args) { +const string$1 = function (...args) { var len, pool, min, max; switch (args.length) { case 0: // () @@ -2493,7 +2464,7 @@ const lower = function (str) { return (str + "").toLowerCase(); }; // 从数组中随机选取一个元素,并返回。 -const pick$1 = function (...args) { +const pick = function (...args) { let [arr, min, max] = args; // pick( item1, item2 ... ) if (!(arr instanceof Array)) { @@ -2571,11 +2542,11 @@ let { firstName, lastName, cfirstName, clastName } = Name; // 随机生成一个常见的英文名。 function first() { var names = firstName.male.concat(); - return pick$1(names); + return pick(names); } // 随机生成一个常见的英文姓。 function last() { - return this.pick(lastName); + return pick(lastName); } // 随机生成一个常见的英文姓名。 function name(middle) { @@ -2588,13 +2559,13 @@ function name(middle) { [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) */ function cfirst() { - return pick$1(cfirstName); + return pick(cfirstName); } /* 随机生成一个常见的中文名。 [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) */ function clast() { - return pick$1(clastName); + return pick(clastName); } // 随机生成一个常见的中文姓名。 function cname() { @@ -6699,19 +6670,20 @@ function createTree(list) { (all, item) => { let { mapped, result } = all; let { id, pid } = item; - mapped[id] = item; - /* jshint -W041 */ - // undefined 时是一个顶级元素 - if (pid === undefined) { + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 result.push(item); return { mapped, result }; } - const parent = mapped[pid]; - if (!parent) { + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { //父级尚未插入到mapped记录中 bugList.push(item); return { mapped, result }; } + const parent = mapped[pid]; parent.children = [...(parent.children || []), item]; return { mapped, result }; }, @@ -6727,10 +6699,11 @@ function createTree(list) { return result; } const ids = Object.keys(DICT); + // 转化数组内对象的表现形式 const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? undefined : id.slice(4, 6) == "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!(pid in ids)) { + var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!ids.includes(pid)) { // 修复 pid 并不存在,但是是归属于顶级的错误 pid = id.slice(0, 2) + "0000"; } @@ -6807,84 +6780,74 @@ var _patternLetters = { /* ## Date */ -const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + +const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + // 返回一个随机的日期字符串。 function date(format = "yyyy-MM-dd") { - return this._formatDate(this._randomDate(), format); -} -var date$1 = { - // 日期占位符集合。 - _patternLetters, - // 日期占位符正则。 - _rformat: reRule, - // 格式化日期。 - _formatDate: function (date, format) { - return format.replace(this._rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); - }, - // 生成一个随机的 Date 对象。 - _randomDate: function (min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - }, - - // 返回一个随机的时间字符串。 - time: function (format = "HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, - // 返回一个随机的日期和时间字符串。 - datetime: function (format = "yyyy-MM-dd HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, - date, - - // 返回当前的日期和时间字符串。 - now: function (unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); + return _formatDate(_randomDate(), format); +} +function datetime(format = "yyyy-MM-dd HH:mm:ss") { + return date(format); +} +function time(format = "HH:mm:ss") { + return date(format); +} +function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } - return this._formatDate(date, format); - }, - // KonghaYao 新增函数:生成固定时间段的时间戳 - timestamp: function (min, max) { - if (min instanceof Date && max instanceof Date) return this._randomDate(min, max); - return this._randomDate(); - }, -}; + return _formatDate(date, format); +} + +function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); +} + +function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); +} + +function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max); + return _randomDate(); +} /* 随机生成一个 18 位身份证。 @@ -6899,7 +6862,7 @@ function id() { rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; - id = pick$1(DICT_FIXED).id + date("yyyyMMdd") + string("number", 3); + id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); for (var i = 0; i < id.length; i++) { sum += id[i] * rank[i]; @@ -6941,7 +6904,7 @@ function id() { GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) */ function guid() { - return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); } /* @@ -7026,12 +6989,11 @@ function ctitle(min, max) { var len = range(3, 7, min, max); return [...Array(len)].map(() => cword()).join(""); } +// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm +const DICT_KANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; // 随机生成一个或多个汉字。 function cword(...args) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; - var len = 1, pool = DICT_KANZI, min, @@ -7049,12 +7011,12 @@ function cword(...args) { break; case 2: // ( pool, length ) - if (typeof arguments[0] === "string") { + if (typeof args[0] === "string") { [pool, len] = args; } else { // ( min, max ) [min, max] = args; - len = natural(pool, min); + len = natural(min, max); } break; case 3: @@ -7063,12 +7025,19 @@ function cword(...args) { len = natural(min, max); break; } - return [...Array(len)].map(() => pool.charAt(natural(0, pool.length - 1))).join(""); + const poolLength = pool.length; + if (len === 1) return pool.charAt(natural(0, poolLength)); + + return [...Array(len)] + .map(() => { + return pool.charAt(natural(0, poolLength)); + }) + .join(""); } // 协议簇 const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); -// 域名后缀 +const tlds = // 域名后缀 ( "com net org edu gov int mil cn " + // 国内域名 @@ -7103,7 +7072,7 @@ function url(Protocol, host) { // 随机生成一个 URL 协议。 function protocol() { - return pick$1(protocols); + return pick(protocols); } // 随机生成一个域名。 function domain(Tld) { @@ -7117,7 +7086,7 @@ function domain(Tld) { */ function tld() { // Top Level Domain - return pick$1(tlds); + return pick(tlds); } // 随机生成一个邮件地址。 @@ -7467,121 +7436,102 @@ function image(...args) { if (!size) size = pick(_adSize); // 去除前面的 # 号 - foreground = foreground.replace(/^#/, ""); - background = background.replace(/^#/, ""); + foreground = (foreground || hex()).replace(/^#/, ""); + background = (background || hex()).replace(/^#/, ""); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${backgroound ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; + return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; } +/* + 生成一段随机的 Base64 图片编码。 -var image$1 = { - ...size, - image, - img: image, + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. - _brandColors, - _brandNames, - /* - 生成一段随机的 Base64 图片编码。 + dataImageHolder: function(size) { + return 'holder.js/' + size + }, +*/ +function dataImage(size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - dataImage: function (size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); - }, -}; + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); +} /* ## Address */ var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; -var address = { - // 随机生成一个大区。 - region: function () { - return pick$1(REGION); - }, - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - province: function () { - return pick$1(DICT_FIXED).name; - }, - // 随机生成一个(中国)市。 - city: function (prefix) { - var province = pick$1(DICT_FIXED); - var city = pick$1(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; - }, - // 随机生成一个(中国)县。 - county: function (prefix) { - var province = pick$1(DICT_FIXED); - var city = pick$1(province.children); - var county = pick$1(city.children) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; - }, - // 随机生成一个邮政编码(六位数字)。 - zip: function (len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; - }, - // address: function() {}, - // phone: function() {}, - // areacode: function() {}, - // street: function() {}, - // street_suffixes: function() {}, - // street_suffix: function() {}, - // states: function() {}, - // state: function() {}, -}; +// 随机生成一个大区。 +function region() { + return pick(REGION); +} +// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 +function province() { + return pick(DICT_FIXED).name; +} +// 随机生成一个(中国)市。 +function city(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; +} +// 随机生成一个(中国)县。 +function county(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + var county = pick(city.children) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; +} +// 随机生成一个邮政编码(六位数字)。 +function zip(len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; +} /* ## Mock.Random @@ -7590,68 +7540,121 @@ var address = { */ var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - date: date$1, - image: image$1, - address: address, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - boolean: boolean, - bool: boolean, - character: character, - char: character, - string: string, - str: string, - range: range$1, - float: float, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize$1, - upper: upper, - lower: lower, - pick: pick$1, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range$1, + float: float, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip }); +/* + ## Constant + + 常量集合。 + */ +/* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 +*/ +var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ +}; + /* ## Parser @@ -7676,10 +7679,9 @@ var Random = /*#__PURE__*/Object.freeze({ ``` */ /* jshint -W041 */ -function parser$1(name) { - name = name == undefined ? "" : name + ""; - - var parameters = (name || "").match(Constant.RE_KEY); +function parser$1(name = "") { + if (typeof name !== "string") name = name + ""; + var parameters = name.match(Constant.RE_KEY); var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); var min = range && range[1] && parseInt(range[1], 10); // || 1 @@ -7715,6 +7717,179 @@ function parser$1(name) { return {}; } +function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { + var result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + }); + } + } + } + return result; +} + +function boolean({ rule: { max, min, parameters }, template = "" }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; +} + +function _function(options) { + let { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); +} + +function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { + var result; + if (decimal) { + let [Integer, Decimal] = ("" + template).split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + Integer = range ? count : Integer; + Decimal = (Decimal || "").slice(0, dcount); + while (Decimal.length < dcount) { + Decimal += + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + Decimal.length < dcount - 1 ? character("number") : character("123456789"); + } + result = parseFloat(Integer + "." + Decimal, 10); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; +} + +function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + var result = {}, + keys = [], + fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (let key in template) { + (typeof template[key] === "function" ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + let inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type$1(template[key]) === "number") { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; +} + // https://github.com/nuysoft/regexp function Token(n) { @@ -8619,8 +8794,8 @@ var parser = (function () { /* */ -var Handler$1 = { - extend: assignIn, +var Handler$2 = { + extend: extend, }; // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart @@ -8691,14 +8866,14 @@ function ascii(from, to) { } // var ast = RegExpParser.parse(regexp.source) -Handler$1.gen = function (node, result, cache) { +Handler$2.gen = function (node, result, cache) { cache = cache || { guid: 1, }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); + return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); }; -Handler$1.extend({ +Handler$2.extend({ /* jshint unused:false */ token: function (node, result, cache) { switch (node.type) { @@ -8714,9 +8889,9 @@ Handler$1.extend({ case "non-word-boundary": // TODO break; case "digit": - return pick$1(NUMBER.split("")); + return pick(NUMBER.split("")); case "non-digit": - return pick$1((LOWER + UPPER + OTHER).split("")); + return pick((LOWER + UPPER + OTHER).split("")); case "form-feed": break; case "line-feed": @@ -8724,17 +8899,17 @@ Handler$1.extend({ case "carriage-return": break; case "white-space": - return pick$1(SPACE.split("")); + return pick(SPACE.split("")); case "non-white-space": - return pick$1((LOWER + UPPER + NUMBER).split("")); + return pick((LOWER + UPPER + NUMBER).split("")); case "tab": break; case "vertical-tab": break; case "word": // \w [a-zA-Z0-9] - return pick$1((LOWER + UPPER + NUMBER).split("")); + return pick((LOWER + UPPER + NUMBER).split("")); case "non-word": // \W [^a-zA-Z0-9] - return pick$1(OTHER.replace("_", "").split("")); + return pick(OTHER.replace("_", "").split("")); } return node.body || node.text; }, @@ -8753,7 +8928,7 @@ Handler$1.extend({ */ alternate: function (node, result, cache) { // node.left/right {} - return this.gen(boolean() ? node.left : node.right, result, cache); + return this.gen(boolean$1() ? node.left : node.right, result, cache); }, /* { @@ -8848,7 +9023,7 @@ Handler$1.extend({ if (node.invert) return this["invert-charset"](node, result, cache); // node.body [] - var literal = pick$1(node.body); + var literal = pick(node.body); return this.gen(literal, result, cache); }, "invert-charset": function (node, result, cache) { @@ -8875,7 +9050,7 @@ Handler$1.extend({ } } } - return pick$1(pool.split("")); + return pick(pool.split("")); }, range: function (node, result, cache) { // node.start, node.end @@ -8923,69 +9098,228 @@ Handler$1.extend({ }); var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$1 + __proto__: null, + Parser: parser, + Handler: Handler$2 }); -/* - ## Handler +function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + let Source = count === undefined ? source : Array(count).fill(source).join(""); + return Handler$2.gen(parser.parse(Source)); +} - 处理数据模板。 - - * Handler.gen( template, name?, context? ) +function getValueByKeyPath(key, options) { + var originalKey = key; + var keyPathParts = splitPathToArray(key); + var absolutePathParts = []; - 入口方法。 + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } - * Data Template Definition, DTD - - 处理数据模板定义。 + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} - * Handler.getValueByKeyPath( key, options ) + return "@" + keyPathParts.join("/"); +} +// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js +function normalizePath(pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; +} +function splitPathToArray(path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; +} + +const _all = Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; +}, {}); +function placeholder(placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var parts = Constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = _all[lkey], + params = (parts && parts[2]) || ""; + var pathParts = splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } - * Data Placeholder Definition, DPD + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } - 处理数据占位符定义 + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; - * Handler.placeholder( placeholder, context, templateContext, options ) + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = placeholder(params[i], obj, templateContext, options); + } + } -*/ + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (type$1(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } +} -var Handler = { - extend: assignIn, -}; +function string(options) { + let { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = "", + } = options; + var result = ""; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(""); + + // 'email|1-10': '@EMAIL, ', + let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } -/* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, + let phed = placeholder(ph, currentContext, templateCurrentContext, options); - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot -*/ -Handler.gen = function (template, name, context) { - /* jshint -W041 */ - name = name == undefined ? "" : name + ""; + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; + } + return result; +} - context = context || {}; - context = { +var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string +}); + +let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 +function gen(template, name = "", context = {}) { + var newContext = { // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [Constant.GUID], - templatePath: context.templatePath || [Constant.GUID++], + path: context.path || [GID], + templatePath: context.templatePath || [GID++], // 最终属性值的上下文 currentContext: context.currentContext, // 属性值模板的上下文 @@ -8997,456 +9331,101 @@ Handler.gen = function (template, name, context) { }; // console.log('path:', context.path.join('.'), template) - var rule = parser$1(name); - var type = type(template); + var type = type$1(template); + let func = typeset[type]; var data; - if (Handler[type]) { - data = Handler[type]({ + if (func) { + data = func({ // 属性值类型 - type: type, + type, // 属性值模板 - template: template, + template, // 属性名 + 生成规则 - name: name, + name, // 属性名 - parsedName: name ? name.replace(Constant.RE_KEY, "$1") : name, - + parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, // 解析后的生成规则 - rule: rule, + rule: parser$1(name), // 相关上下文 - context: context, + context: newContext, }); - - if (!context.root) context.root = data; + // 循环引用 + if (!newContext.root) newContext.root = data; return data; } - return template; -}; - -Handler.extend({ - array: function (options) { - var result = [], - i, - ii; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (options.template.length === 0) return result; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!options.rule.parameters) { - for (i = 0; i < options.template.length; i++) { - options.context.path.push(i); - options.context.templatePath.push(i); - result.push( - Handler.gen(options.template[i], i, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (options.rule.min === 1 && options.rule.max === undefined) { - // fix #17 - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = pick$1( - Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|+1': [{}, {}] - if (options.rule.parameters[2]) { - options.template.__order_index = options.template.__order_index || 0; - - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - })[options.template.__order_index % options.template.length]; - - options.template.__order_index += +options.rule.parameters[2]; - - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|1-10': [{}] - for (i = 0; i < options.rule.count; i++) { - // 'data|1-10': [{}, {}] - for (ii = 0; ii < options.template.length; ii++) { - options.context.path.push(result.length); - options.context.templatePath.push(ii); - result.push( - Handler.gen(options.template[ii], result.length, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } - } - } - } - return result; - }, - object: function (options) { - var result = {}, - keys, - fnKeys, - key, - parsedKey, - inc, - i; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (options.rule.min != undefined) { - keys = Object.keys(options.template); - keys = shuffle(keys); - keys = keys.slice(0, options.rule.count); - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(Constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'obj': {} - keys = []; - fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 - for (key in options.template) { - (typeof options.template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(options.template) - keys.sort(function(a, b) { - var afn = typeof options.template[a] === 'function' - var bfn = typeof options.template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(Constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - // 'id|+1': 1 - inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type$1(options.template[key]) === "number") { - options.template[key] += parseInt(inc[2], 10); - } - } - } - return result; - }, - number: function (options) { - var result, parts; - if (options.rule.decimal) { - // float - options.template += ""; - parts = options.template.split("."); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parts[0] = options.rule.range ? options.rule.count : parts[0]; - parts[1] = (parts[1] || "").slice(0, options.rule.dcount); - while (parts[1].length < options.rule.dcount) { - parts[1] += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - parts[1].length < options.rule.dcount - 1 ? character("number") : character("123456789"); - } - result = parseFloat(parts.join("."), 10); - } else { - // integer - // 'grade1|1-100': 1, - result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; - } - return result; - }, - boolean: function (options) { - var result; - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? boolean(options.rule.min, options.rule.max, options.template) : options.template; - return result; - }, - string: function (options) { - var result = "", - i, - placeholders, - ph, - phed; - if (options.template.length) { - // 'foo': '★', - /* jshint -W041 */ - if (options.rule.count == undefined) { - result += options.template; - } - - // 'star|1-5': '★', - for (i = 0; i < options.rule.count; i++) { - result += options.template; - } - // 'email|1-10': '@EMAIL, ', - placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - for (i = 0; i < placeholders.length; i++) { - ph = placeholders[i]; - - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(i--, 1); - continue; - } - - phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - break; - } - result = result.replace(ph, phed); - } - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = options.rule.range ? string(options.rule.count) : options.template; - } - return result; - }, - function: function (options) { - // ( context, options ) - return options.template.call(options.context.currentContext, options); - }, - regexp: function (options) { - var source = ""; - - // 'name': /regexp/, - /* jshint -W041 */ - if (options.rule.count == undefined) { - source += options.template.source; // regexp.source - } - - // 'name|1-5': /regexp/, - for (var i = 0; i < options.rule.count; i++) { - source += options.template.source; - } +} - return Handler$1.gen(parser.parse(source)); - }, -}); +/* + ## Handler -Handler.extend({ - _all: function () { - var re = {}; - for (var key in Random) re[key.toLowerCase()] = key; - return re; - }, - // 处理占位符,转换为最终值 - placeholder: function (placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = this._all()[lkey], - params = (parts && parts[2]) || ""; - var pathParts = this.splitPathToArray(key); - - // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } + 处理数据模板。 + + * Handler.gen( template, name?, context? ) - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; + 入口方法。 - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name + * Data Template Definition, DTD + + 处理数据模板定义。 - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = Handler.gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } + * Handler.getValueByKeyPath( key, options ) - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + * Data Placeholder Definition, DPD - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = Handler.placeholder(params[i], obj, templateContext, options); - } - } + 处理数据占位符定义 - var handle = Random[key] || Random[lkey] || Random[okey]; - switch (type$1(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick$1(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - }, - getValueByKeyPath: function (key, options) { - var originalKey = key; - var keyPathParts = this.splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); - } - } + * Handler.placeholder( placeholder, context, templateContext, options ) - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} +*/ +/* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, - return "@" + keyPathParts.join("/"); - }, - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function (pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - }, - splitPathToArray: function (path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot +*/ +var Handler$1 = { + gen, + extend, +}; +Handler$1.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, +}); +Handler$1.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, }); /* @@ -9923,7 +9902,6 @@ valid.Diff = Diff; valid.Assert = Assert; /* global window, document, location, Event, setTimeout */ - // 备份原生 XMLHttpRequest window._XMLHttpRequest = window.XMLHttpRequest; window._ActiveXObject = window.ActiveXObject; @@ -10046,7 +10024,7 @@ MockXMLHttpRequest.prototype.match = false; assignIn(MockXMLHttpRequest.prototype, { // https://xhr.spec.whatwg.org/#the-open()-method // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async, username, password) { + open: function (method, url, async = true, username, password) { var that = this; assignIn(this.custom, { @@ -10316,9 +10294,13 @@ if (typeof window !== "undefined") XHR = MockXMLHttpRequest; Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao */ var Mock = { - Handler, + Handler: Handler$1, Random, Util, XHR, @@ -10332,7 +10314,7 @@ var Mock = { _mocked: {}, }; -Mock.version = "1.0.1-beta3"; +Mock.version = "1.1.1-es6"; // 避免循环依赖 if (XHR) XHR.Mock = Mock; @@ -10347,24 +10329,31 @@ if (XHR) XHR.Mock = Mock; 根据数据模板生成模拟数据。 */ -Mock.mock = function (rurl, rtype, template) { - // Mock.mock(template) - if (arguments.length === 1) { - return Handler.gen(rurl); - } - // Mock.mock(rurl, template) - if (arguments.length === 2) { - template = rtype; - rtype = undefined; +Mock.mock = function (...args) { + let rurl, + rtype = "", + template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler$1.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + case 3: + default: + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + rtype] = { + rurl, + rtype, + template, + }; + return Mock; } - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - Mock._mocked[rurl + (rtype || "")] = { - rurl: rurl, - rtype: rtype, - template: template, - }; - return Mock; }; export default Mock; diff --git a/src/mock.js b/src/mock.js index e73e1b6c..62750b95 100644 --- a/src/mock.js +++ b/src/mock.js @@ -15,6 +15,10 @@ if (typeof window !== "undefined") XHR = MockXMLHttpRequest; Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao */ var Mock = { Handler, @@ -31,7 +35,7 @@ var Mock = { _mocked: {}, }; -Mock.version = "1.0.1-beta3"; +Mock.version = "1.1.1-es6"; // 避免循环依赖 if (XHR) XHR.Mock = Mock; @@ -46,24 +50,31 @@ if (XHR) XHR.Mock = Mock; 根据数据模板生成模拟数据。 */ -Mock.mock = function (rurl, rtype, template) { - // Mock.mock(template) - if (arguments.length === 1) { - return Handler.gen(rurl); - } - // Mock.mock(rurl, template) - if (arguments.length === 2) { - template = rtype; - rtype = undefined; +Mock.mock = function (...args) { + let rurl, + rtype = "", + template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + case 3: + default: + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + Mock._mocked[rurl + rtype] = { + rurl, + rtype, + template, + }; + return Mock; } - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - Mock._mocked[rurl + (rtype || "")] = { - rurl: rurl, - rtype: rtype, - template: template, - }; - return Mock; }; export default Mock; diff --git a/src/mock/handle/array.js b/src/mock/handle/array.js new file mode 100644 index 00000000..79e75177 --- /dev/null +++ b/src/mock/handle/array.js @@ -0,0 +1,74 @@ +import { pick } from "../random/index.js"; +import { gen } from "./gen.js"; +export function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { + var result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + }); + } + } + } + return result; +} diff --git a/src/mock/handle/boolean.js b/src/mock/handle/boolean.js new file mode 100644 index 00000000..d601254e --- /dev/null +++ b/src/mock/handle/boolean.js @@ -0,0 +1,6 @@ +import { bool } from "../random/index.js"; +export function boolean({ rule: { max, min, parameters }, template = "" }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? bool(min, max, template) : template; +} diff --git a/src/mock/handle/function.js b/src/mock/handle/function.js new file mode 100644 index 00000000..5d32328b --- /dev/null +++ b/src/mock/handle/function.js @@ -0,0 +1,9 @@ +function _function(options) { + let { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); +} +export { _function as function }; diff --git a/src/mock/handle/gen.js b/src/mock/handle/gen.js new file mode 100644 index 00000000..d8ba0720 --- /dev/null +++ b/src/mock/handle/gen.js @@ -0,0 +1,46 @@ +import Constant from "../constant.js"; +import { type as Type } from "../util.js"; +import { parser as Parser } from "../parser.js"; +import * as typeset from "./index.js"; +let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 +export function gen(template, name = "", context = {}) { + var newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + var type = Type(template); + let func = typeset[type]; + var data; + + if (func) { + data = func({ + // 属性值类型 + type, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, + // 解析后的生成规则 + rule: Parser(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; +} diff --git a/src/mock/handle/index.js b/src/mock/handle/index.js new file mode 100644 index 00000000..19fb23a3 --- /dev/null +++ b/src/mock/handle/index.js @@ -0,0 +1,7 @@ +export { array } from "./array.js"; +export { boolean } from "./boolean.js"; +export { function } from "./function.js"; +export { number } from "./number.js"; +export { object } from "./object.js"; +export { regexp } from "./regexp.js"; +export { string } from "./string.js"; diff --git a/src/mock/handle/number.js b/src/mock/handle/number.js new file mode 100644 index 00000000..06c09521 --- /dev/null +++ b/src/mock/handle/number.js @@ -0,0 +1,24 @@ +import { character } from "../random/index.js"; +export function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { + var result; + if (decimal) { + let [Integer, Decimal] = ("" + template).split("."); + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + Integer = range ? count : Integer; + Decimal = (Decimal || "").slice(0, dcount); + while (Decimal.length < dcount) { + Decimal += + // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 + Decimal.length < dcount - 1 ? character("number") : character("123456789"); + } + result = parseFloat(Integer + "." + Decimal, 10); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; +} diff --git a/src/mock/handle/object.js b/src/mock/handle/object.js new file mode 100644 index 00000000..435bcf36 --- /dev/null +++ b/src/mock/handle/object.js @@ -0,0 +1,64 @@ +import { shuffle } from "../random/index.js"; +import Constant from "../constant.js"; +import { type as Type } from "../util.js"; +import { gen } from "./gen.js"; +export function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + var result = {}, + keys = [], + fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (let key in template) { + (typeof template[key] === "function" ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + let inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && Type(template[key]) === "number") { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; +} diff --git a/src/mock/handle/path.js b/src/mock/handle/path.js new file mode 100644 index 00000000..23a9472e --- /dev/null +++ b/src/mock/handle/path.js @@ -0,0 +1,69 @@ +function getValueByKeyPath(key, options) { + var originalKey = key; + var keyPathParts = splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); +} +// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js +function normalizePath(pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; +} +function splitPathToArray(path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; +} +export { getValueByKeyPath, normalizePath, splitPathToArray }; diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js new file mode 100644 index 00000000..529ae3d9 --- /dev/null +++ b/src/mock/handle/placeholder.js @@ -0,0 +1,89 @@ +import Constant from "../constant.js"; +import { type as Type } from "../util.js"; +import { pick } from "../random/index.js"; +import * as Random from "../random/index.js"; +import { gen } from "./gen.js"; +import { splitPathToArray, getValueByKeyPath } from "./path.js"; +const _all = Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; +}, {}); +export function placeholder(placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var parts = Constant.RE_PLACEHOLDER.exec(placeholder), + key = parts && parts[1], + lkey = key && key.toLowerCase(), + okey = _all[lkey], + params = (parts && parts[2]) || ""; + var pathParts = splitPathToArray(key); + + // 解析占位符的参数 + try { + // 1. 尝试保持参数的类型 + /* + #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) + [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) + 应该属于 Window Firefox 30.0 的 BUG + */ + /* jshint -W061 */ + params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); + } catch (error) { + // 2. 如果失败,只能解析为字符串 + // console.error(error) + // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); + // else throw error + params = parts[2].split(/,\s*/); + } + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // @index @key + // if (Constant.RE_INDEX.test(key)) return +options.name + // if (Constant.RE_KEY.test(key)) return options.name + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + + // 递归解析参数中的占位符 + for (var i = 0; i < params.length; i++) { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(params[i])) { + params[i] = placeholder(params[i], obj, templateContext, options); + } + } + + var handle = Random[key] || Random[lkey] || Random[okey]; + switch (Type(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params); + if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } +} diff --git a/src/mock/handle/regexp.js b/src/mock/handle/regexp.js new file mode 100644 index 00000000..305d9b21 --- /dev/null +++ b/src/mock/handle/regexp.js @@ -0,0 +1,8 @@ +import * as RE from "../regexp/index.js"; + +export function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + let Source = count === undefined ? source : Array(count).fill(source).join(""); + return RE.Handler.gen(RE.Parser.parse(Source)); +} diff --git a/src/mock/handle/string.js b/src/mock/handle/string.js new file mode 100644 index 00000000..37a58777 --- /dev/null +++ b/src/mock/handle/string.js @@ -0,0 +1,52 @@ +import Constant from "../constant.js"; +import { isNumeric } from "../util.js"; +import { string as _string } from "../random/index.js"; +import { placeholder as Placeholder } from "./placeholder.js"; +export function string(options) { + let { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = "", + } = options; + var result = ""; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(""); + + // 'email|1-10': '@EMAIL, ', + let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + let phed = Placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + // + result = phed; + return true; + + if (isNumeric(phed)) { + result = parseFloat(phed, 10); + return true; + } + if (/^(true|false)$/.test(phed)) { + result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 + return true; + } + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? _string(count) : template; + } + return result; +} diff --git a/src/mock/handler.js b/src/mock/handler.js index 6870d6f6..3164541a 100644 --- a/src/mock/handler.js +++ b/src/mock/handler.js @@ -31,17 +31,9 @@ */ -import Constant from "./constant.js"; -import { type, isNumeric, extend } from "./util.js"; -import { parser as Parser } from "./parser.js"; -import { bool, character, pick, shuffle, string } from "./random/index.js"; +import { extend } from "./util.js"; import * as Random from "./random/index.js"; -import * as RE from "./regexp/index.js"; - -var Handler = { - extend: extend, -}; - +import { gen } from "./handle/gen.js"; /* template 属性值(即数据模板) name 属性名 @@ -54,485 +46,36 @@ var Handler = { path, templatePath root, templateRoot */ -Handler.gen = function (template, name, context) { - /* jshint -W041 */ - name = name == undefined ? "" : name + ""; - - context = context || {}; - context = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [Constant.GUID], - templatePath: context.templatePath || [Constant.GUID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var rule = Parser(name); - var type = type(template); - var data; - - if (Handler[type]) { - data = Handler[type]({ - // 属性值类型 - type: type, - // 属性值模板 - template: template, - // 属性名 + 生成规则 - name: name, - // 属性名 - parsedName: name ? name.replace(Constant.RE_KEY, "$1") : name, - - // 解析后的生成规则 - rule: rule, - // 相关上下文 - context: context, - }); - - if (!context.root) context.root = data; - return data; - } - - return template; +var Handler = { + gen, + extend, }; +import { array, object, number, boolean, string as _string, function as _function, regexp } from "./handle/index.js"; Handler.extend({ - array: function (options) { - var result = [], - i, - ii; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (options.template.length === 0) return result; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!options.rule.parameters) { - for (i = 0; i < options.template.length; i++) { - options.context.path.push(i); - options.context.templatePath.push(i); - result.push( - Handler.gen(options.template[i], i, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (options.rule.min === 1 && options.rule.max === undefined) { - // fix #17 - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = pick( - Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|+1': [{}, {}] - if (options.rule.parameters[2]) { - options.template.__order_index = options.template.__order_index || 0; - - options.context.path.push(options.name); - options.context.templatePath.push(options.name); - result = Handler.gen(options.template, undefined, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - })[options.template.__order_index % options.template.length]; - - options.template.__order_index += +options.rule.parameters[2]; - - options.context.path.pop(); - options.context.templatePath.pop(); - } else { - // 'data|1-10': [{}] - for (i = 0; i < options.rule.count; i++) { - // 'data|1-10': [{}, {}] - for (ii = 0; ii < options.template.length; ii++) { - options.context.path.push(result.length); - options.context.templatePath.push(ii); - result.push( - Handler.gen(options.template[ii], result.length, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }) - ); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } - } - } - } - return result; - }, - object: function (options) { - var result = {}, - keys, - fnKeys, - key, - parsedKey, - inc, - i; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (options.rule.min != undefined) { - keys = Object.keys(options.template); - keys = shuffle(keys); - keys = keys.slice(0, options.rule.count); - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(Constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - } - } else { - // 'obj': {} - keys = []; - fnKeys = []; // #25 改变了非函数属性的顺序,查找起来不方便 - for (key in options.template) { - (typeof options.template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(options.template) - keys.sort(function(a, b) { - var afn = typeof options.template[a] === 'function' - var bfn = typeof options.template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - for (i = 0; i < keys.length; i++) { - key = keys[i]; - parsedKey = key.replace(Constant.RE_KEY, "$1"); - options.context.path.push(parsedKey); - options.context.templatePath.push(key); - result[parsedKey] = Handler.gen(options.template[key], key, { - path: options.context.path, - templatePath: options.context.templatePath, - currentContext: result, - templateCurrentContext: options.template, - root: options.context.root || result, - templateRoot: options.context.templateRoot || options.template, - }); - options.context.path.pop(); - options.context.templatePath.pop(); - // 'id|+1': 1 - inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type(options.template[key]) === "number") { - options.template[key] += parseInt(inc[2], 10); - } - } - } - return result; - }, - number: function (options) { - var result, parts; - if (options.rule.decimal) { - // float - options.template += ""; - parts = options.template.split("."); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parts[0] = options.rule.range ? options.rule.count : parts[0]; - parts[1] = (parts[1] || "").slice(0, options.rule.dcount); - while (parts[1].length < options.rule.dcount) { - parts[1] += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - parts[1].length < options.rule.dcount - 1 ? character("number") : character("123456789"); - } - result = parseFloat(parts.join("."), 10); - } else { - // integer - // 'grade1|1-100': 1, - result = options.rule.range && !options.rule.parameters[2] ? options.rule.count : options.template; - } - return result; - }, - boolean: function (options) { - var result; - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - result = options.rule.parameters ? bool(options.rule.min, options.rule.max, options.template) : options.template; - return result; - }, - string: function (options) { - var result = "", - i, - placeholders, - ph, - phed; - if (options.template.length) { - // 'foo': '★', - /* jshint -W041 */ - if (options.rule.count == undefined) { - result += options.template; - } - - // 'star|1-5': '★', - for (i = 0; i < options.rule.count; i++) { - result += options.template; - } - // 'email|1-10': '@EMAIL, ', - placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - for (i = 0; i < placeholders.length; i++) { - ph = placeholders[i]; - - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(i--, 1); - continue; - } - - phed = Handler.placeholder(ph, options.context.currentContext, options.context.templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - break; - - if (isNumeric(phed)) { - result = parseFloat(phed, 10); - break; - } - if (/^(true|false)$/.test(phed)) { - result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 - break; - } - } - result = result.replace(ph, phed); - } - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = options.rule.range ? string(options.rule.count) : options.template; - } - return result; - }, - function: function (options) { - // ( context, options ) - return options.template.call(options.context.currentContext, options); - }, - regexp: function (options) { - var source = ""; - - // 'name': /regexp/, - /* jshint -W041 */ - if (options.rule.count == undefined) { - source += options.template.source; // regexp.source - } - - // 'name|1-5': /regexp/, - for (var i = 0; i < options.rule.count; i++) { - source += options.template.source; - } - - return RE.Handler.gen(RE.Parser.parse(source)); - }, + array, + object, + number, + boolean, + string: _string, + function: _function, + regexp, }); +import { placeholder } from "./handle/placeholder.js"; +import { getValueByKeyPath, normalizePath, splitPathToArray } from "./handle/path.js"; Handler.extend({ _all: function () { - var re = {}; - for (var key in Random) re[key.toLowerCase()] = key; - return re; + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); }, // 处理占位符,转换为最终值 - placeholder: function (placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = this._all()[lkey], - params = (parts && parts[2]) || ""; - var pathParts = this.splitPathToArray(key); - - // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return this.getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = Handler.gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = Handler.placeholder(params[i], obj, templateContext, options); - } - } - - var handle = Random[key] || Random[lkey] || Random[okey]; - switch (type(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - }, - getValueByKeyPath: function (key, options) { - var originalKey = key; - var keyPathParts = this.splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(this.normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = this.normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); - }, - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - normalizePath: function (pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - }, - splitPathToArray: function (path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; - }, + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, }); export default Handler; diff --git a/src/mock/parser.js b/src/mock/parser.js index f5cfa3c3..52403db4 100644 --- a/src/mock/parser.js +++ b/src/mock/parser.js @@ -25,10 +25,9 @@ import Constant from "./constant.js"; import { integer } from "./random/index.js"; /* jshint -W041 */ -export function parser(name) { - name = name == undefined ? "" : name + ""; - - var parameters = (name || "").match(Constant.RE_KEY); +export function parser(name = "") { + if (typeof name !== "string") name = name + ""; + var parameters = name.match(Constant.RE_KEY); var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); var min = range && range[1] && parseInt(range[1], 10); // || 1 diff --git a/src/mock/random/address.js b/src/mock/random/address.js index 225fd9b4..3a8962e9 100644 --- a/src/mock/random/address.js +++ b/src/mock/random/address.js @@ -1,47 +1,48 @@ /* ## Address */ -import DICT from "./address_dict"; +import DICT from "./address_dict.js"; var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; import { pick } from "./helper.js"; import { natural } from "./basic/number.js"; -export default { - // 随机生成一个大区。 - region: function () { - return pick(REGION); - }, - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - province: function () { - return pick(DICT).name; - }, - // 随机生成一个(中国)市。 - city: function (prefix) { - var province = pick(DICT); - var city = pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; - }, - // 随机生成一个(中国)县。 - county: function (prefix) { - var province = pick(DICT); - var city = pick(province.children); - var county = pick(city.children) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; - }, - // 随机生成一个邮政编码(六位数字)。 - zip: function (len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; - }, - // address: function() {}, - // phone: function() {}, - // areacode: function() {}, - // street: function() {}, - // street_suffixes: function() {}, - // street_suffix: function() {}, - // states: function() {}, - // state: function() {}, -}; +// 随机生成一个大区。 +function region() { + return pick(REGION); +} +// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 +function province() { + return pick(DICT).name; +} +// 随机生成一个(中国)市。 +function city(prefix) { + var province = pick(DICT); + var city = pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; +} +// 随机生成一个(中国)县。 +function county(prefix) { + var province = pick(DICT); + var city = pick(province.children); + var county = pick(city.children) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; +} +// 随机生成一个邮政编码(六位数字)。 +function zip(len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; +} + +// function address() {} +// function phone() {} +// function areacode() {} +// function street() {} +// function street_suffixes() {} +// function street_suffix() {} +// function states() {} +// function state() {} + +export { region, province, city, county, zip }; diff --git a/src/mock/random/address_dict.js b/src/mock/random/address_dict.js index bfcc7f2f..8be6e532 100644 --- a/src/mock/random/address_dict.js +++ b/src/mock/random/address_dict.js @@ -31,19 +31,20 @@ function createTree(list) { (all, item) => { let { mapped, result } = all; let { id, pid } = item; - mapped[id] = item; - /* jshint -W041 */ - // undefined 时是一个顶级元素 - if (pid === undefined) { + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 result.push(item); return { mapped, result }; } - const parent = mapped[pid]; - if (!parent) { + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { //父级尚未插入到mapped记录中 bugList.push(item); return { mapped, result }; } + const parent = mapped[pid]; parent.children = [...(parent.children || []), item]; return { mapped, result }; }, @@ -59,11 +60,11 @@ function createTree(list) { return result; } const ids = Object.keys(DICT); -function isInIds(what) {} + // 转化数组内对象的表现形式 const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? undefined : id.slice(4, 6) == "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!(pid in ids)) { + var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!ids.includes(pid)) { // 修复 pid 并不存在,但是是归属于顶级的错误 pid = id.slice(0, 2) + "0000"; } diff --git a/src/mock/random/date.js b/src/mock/random/date.js index 128b2e23..3cba824e 100644 --- a/src/mock/random/date.js +++ b/src/mock/random/date.js @@ -1,84 +1,94 @@ /* ## Date */ -import { integer } from "./basic/number.js"; // 随机生成整数的函数 +import { integer } from "./basic/number.js"; + +// 日期占位符集合。 import _patternLetters from "./date/_patternLetters.js"; -const reRule = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + +const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + // 返回一个随机的日期字符串。 function date(format = "yyyy-MM-dd") { - return this._formatDate(this._randomDate(), format); + return _formatDate(_randomDate(), format); +} +function datetime(format = "yyyy-MM-dd HH:mm:ss") { + return date(format); } -export default { - // 日期占位符集合。 +function time(format = "HH:mm:ss") { + return date(format); +} +function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } + + return _formatDate(date, format); +} + +function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); +} + +function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); +} + +function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max); + return _randomDate(); +} + +export { _patternLetters, // 日期占位符正则。 - _rformat: reRule, + _rformat, // 格式化日期。 - _formatDate: function (date, format) { - return format.replace(this._rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); - }, + _formatDate, // 生成一个随机的 Date 对象。 - _randomDate: function (min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - }, - + _randomDate, // 返回一个随机的时间字符串。 - time: function (format = "HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, + time, // 返回一个随机的日期和时间字符串。 - datetime: function (format = "yyyy-MM-dd HH:mm:ss") { - return this._formatDate(this._randomDate(), format); - }, + datetime, date, - // 返回当前的日期和时间字符串。 - now: function (unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); - } - - return this._formatDate(date, format); - }, + now, // KonghaYao 新增函数:生成固定时间段的时间戳 - timestamp: function (min, max) { - if (min instanceof Date && max instanceof Date) return this._randomDate(min, max); - return this._randomDate(); - }, + timestamp, }; -export { date }; diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 9da00371..d73246d0 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -4,6 +4,7 @@ */ import size from "./image.json"; +import { pick } from "./helper.js"; let { _adSize, _screenSize, _videoSize } = size; /* @@ -19,6 +20,7 @@ let { _adSize, _screenSize, _videoSize } = size; }) */ import _brandColors from "./brandColors.json"; +import { color, hex } from "./color"; const _brandNames = Object.keys(_brandColors); /* @@ -47,73 +49,65 @@ function image(...args) { if (!size) size = pick(_adSize); // 去除前面的 # 号 - foreground = foreground.replace(/^#/, ""); - background = background.replace(/^#/, ""); + foreground = (foreground || hex()).replace(/^#/, ""); + background = (background || hex()).replace(/^#/, ""); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${backgroound ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; + return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; } +/* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. -export default { - ...size, - image, - img: image, - - _brandColors, - _brandNames, - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - dataImage: function (size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); + dataImageHolder: function(size) { + return 'holder.js/' + size }, -}; +*/ +function dataImage(size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); +} +export { _adSize, _screenSize, _videoSize, image, image as img, _brandColors, _brandNames, dataImage }; diff --git a/src/mock/random/index.js b/src/mock/random/index.js index 6eae7d57..08bed89b 100644 --- a/src/mock/random/index.js +++ b/src/mock/random/index.js @@ -4,15 +4,13 @@ 工具类,用于生成各种随机数据。 */ -export * from "./basic"; -export * from "./color"; -export * from "./name"; -export * from "./helper"; -export * from "./misc"; -export * from "./text"; -export * from "./web"; -import date from "./date"; -import image from "./image"; -import address from "./address"; - -export { date, image, address }; +export * from "./basic.js"; +export * from "./color.js"; +export * from "./name.js"; +export * from "./helper.js"; +export * from "./misc.js"; +export * from "./text.js"; +export * from "./web.js"; +export * from "./date.js"; +export * from "./image.js"; +export * from "./address.js"; diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js index bffd422f..e1812a2f 100644 --- a/src/mock/random/misc/guid.js +++ b/src/mock/random/misc/guid.js @@ -29,6 +29,7 @@ UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) */ +import { v4 as uuid } from "uuid"; export default function guid() { return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); } diff --git a/src/mock/random/name.js b/src/mock/random/name.js index 03516f4e..36640ee3 100644 --- a/src/mock/random/name.js +++ b/src/mock/random/name.js @@ -13,7 +13,7 @@ function first() { } // 随机生成一个常见的英文姓。 function last() { - return this.pick(lastName); + return pick(lastName); } // 随机生成一个常见的英文姓名。 function name(middle) { diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js index 4e037c79..c38e9423 100644 --- a/src/mock/random/text/text-ch.js +++ b/src/mock/random/text/text-ch.js @@ -16,12 +16,11 @@ function ctitle(min, max) { var len = range(3, 7, min, max); return [...Array(len)].map(() => cword()).join(""); } +// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm +const DICT_KANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; // 随机生成一个或多个汉字。 function cword(...args) { - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - var DICT_KANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; - var len = 1, pool = DICT_KANZI, min, @@ -39,12 +38,12 @@ function cword(...args) { break; case 2: // ( pool, length ) - if (typeof arguments[0] === "string") { + if (typeof args[0] === "string") { [pool, len] = args; } else { // ( min, max ) [min, max] = args; - len = natural(pool, min); + len = natural(min, max); } break; case 3: @@ -53,7 +52,14 @@ function cword(...args) { len = natural(min, max); break; } - return [...Array(len)].map(() => pool.charAt(natural(0, pool.length - 1))).join(""); + const poolLength = pool.length; + if (len === 1) return pool.charAt(natural(0, poolLength)); + + return [...Array(len)] + .map(() => { + return pool.charAt(natural(0, poolLength)); + }) + .join(""); } export { ctitle, csentence, cparagraph, cword }; diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index 01b55190..723a30f9 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -1,6 +1,6 @@ import range from "./range.js"; import { character } from "../basic.js"; - +import { capitalize } from "../helper.js"; // 随机生成一个句子,第一个单词的首字母大写。 function sentence(min, max) { var len = range(12, 18, min, max); diff --git a/src/mock/random/web/web_func.js b/src/mock/random/web/web_func.js index 0ff8d762..e81da8d0 100644 --- a/src/mock/random/web/web_func.js +++ b/src/mock/random/web/web_func.js @@ -1,6 +1,6 @@ import { pick } from "../helper.js"; import { word } from "../text.js"; -import { protocols } from "./web_dict.js"; +import { protocols, tlds } from "./web_dict.js"; /* 随机生成一个 URL。 diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index 3683dbad..7c538289 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -6,7 +6,7 @@ > [JSON Schema](http://json-schema.org/) */ import Constant from "../constant.js"; -import * as Util from "../util.js"; +import { type } from "../util.js"; import { parser } from "../parser.js"; function toJSONSchema(template, name, path = [] /* Internal Use Only */) { @@ -14,7 +14,7 @@ function toJSONSchema(template, name, path = [] /* Internal Use Only */) { var result = { name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, template, - type: Util.type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } rule: parser.parse(name), path: path.slice(0), }; diff --git a/src/mock/utils/extend.js b/src/mock/utils/extend.js index a7f5299a..3a19b763 100644 --- a/src/mock/utils/extend.js +++ b/src/mock/utils/extend.js @@ -38,4 +38,7 @@ // return target; // } -export { assignIn as extend } from "lodash-es"; +import { assignIn } from "lodash-es"; +export function extend(...args) { + return assignIn(this, ...args); +} diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index c103d525..fa1bf020 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1 +1 @@ -export { MockXMLHttpRequest } from "./xhr"; +export { MockXMLHttpRequest } from "./xhr.js"; diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/xhr.js index 15980107..aa4c602c 100644 --- a/src/mock/xhr/xhr.js +++ b/src/mock/xhr/xhr.js @@ -44,8 +44,8 @@ onreadystatechange readystatechange */ -import * as Util from "../util.js"; - +import { type, isFunction } from "../util.js"; +import { assignIn as extend } from "lodash-es"; // 备份原生 XMLHttpRequest window._XMLHttpRequest = window.XMLHttpRequest; window._ActiveXObject = window.ActiveXObject; @@ -151,12 +151,12 @@ MockXMLHttpRequest._settings = { }; MockXMLHttpRequest.setup = function (settings) { - Util.extend(MockXMLHttpRequest._settings, settings); + extend(MockXMLHttpRequest._settings, settings); return MockXMLHttpRequest._settings; }; -Util.extend(MockXMLHttpRequest, XHR_STATES); -Util.extend(MockXMLHttpRequest.prototype, XHR_STATES); +extend(MockXMLHttpRequest, XHR_STATES); +extend(MockXMLHttpRequest.prototype, XHR_STATES); // 标记当前对象为 MockXMLHttpRequest MockXMLHttpRequest.prototype.mock = true; @@ -165,13 +165,13 @@ MockXMLHttpRequest.prototype.mock = true; MockXMLHttpRequest.prototype.match = false; // 初始化 Request 相关的属性和方法 -Util.extend(MockXMLHttpRequest.prototype, { +extend(MockXMLHttpRequest.prototype, { // https://xhr.spec.whatwg.org/#the-open()-method // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async, username, password) { + open: function (method, url, async = true, username, password) { var that = this; - Util.extend(this.custom, { + extend(this.custom, { method: method, url: url, async: typeof async === "boolean" ? async : true, @@ -315,7 +315,7 @@ Util.extend(MockXMLHttpRequest.prototype, { }); // 初始化 Response 相关的属性和方法 -Util.extend(MockXMLHttpRequest.prototype, { +extend(MockXMLHttpRequest.prototype, { responseURL: "", status: MockXMLHttpRequest.UNSENT, statusText: "", @@ -354,7 +354,7 @@ Util.extend(MockXMLHttpRequest.prototype, { }); // EventTarget -Util.extend(MockXMLHttpRequest.prototype, { +extend(MockXMLHttpRequest.prototype, { addEventListener: function addEventListener(type, handle) { var events = this.custom.events; if (!events[type]) events[type] = []; @@ -415,10 +415,10 @@ function find(options) { } function match(expected, actual) { - if (Util.type(expected) === "string") { + if (type(expected) === "string") { return expected === actual; } - if (Util.type(expected) === "regexp") { + if (type(expected) === "regexp") { return expected.test(actual); } } @@ -426,6 +426,6 @@ function find(options) { // 数据模板 => 响应数据 function convert(item, options) { - return Util.isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); + return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); } export { MockXMLHttpRequest }; diff --git a/test/allTemplate.js b/test/allTemplate.js new file mode 100644 index 00000000..5d04d315 --- /dev/null +++ b/test/allTemplate.js @@ -0,0 +1,4 @@ +const template = { + String: {}, +}; +Mock.mock(template); diff --git a/test/bower.json b/test/bower.json deleted file mode 100644 index 3485bbe8..00000000 --- a/test/bower.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "test", - "dependencies": {}, - "devDependencies": { - "requirejs": "*", - "mocha": "*", - "chai": "*", - "underscore": "*", - "jquery": "~2.1.1" - } -} diff --git a/test/index.css b/test/index.css new file mode 100644 index 00000000..4483f8ff --- /dev/null +++ b/test/index.css @@ -0,0 +1,44 @@ +.badge { + box-sizing: border-box; + min-width: 10px; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: middle; + position: absolute; + right: 0; + top: 0; + border-radius: 0 6px 0 6px; + padding: 5px 6px; + font-weight: normal; + color: #999; + background-color: #e6e6e6; + display: inline-block; + width: 120px; + font-size: 10px; +} + +.code, +.result, +.result { + position: relative; +} +.rerun { + position: absolute; + right: 10px; + bottom: 10px; + opacity: 0.3; + color: #339966; +} +.definition .result .mockicon.rerun:after, +.definition .code .mockicon.rerun:after { + font-family: "mockicon"; + content: "\e606"; + font-size: 20px; + line-height: 1; +} +.row { + display: grid; + grid-template-columns: 1fr 1fr; + grid-column-gap: 2em; +} diff --git a/test/index.html b/test/index.html new file mode 100644 index 00000000..437588b7 --- /dev/null +++ b/test/index.html @@ -0,0 +1,21 @@ + + + + + + + + Document + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/materiels/noop.html b/test/materiels/noop.html deleted file mode 100644 index bdef09c7..00000000 --- a/test/materiels/noop.html +++ /dev/null @@ -1,2 +0,0 @@ - -
noop.html
\ No newline at end of file diff --git a/test/materiels/noop.js b/test/materiels/noop.js deleted file mode 100644 index 247b5720..00000000 --- a/test/materiels/noop.js +++ /dev/null @@ -1 +0,0 @@ -(function noop() {})(); \ No newline at end of file diff --git a/test/package.json b/test/package.json deleted file mode 100644 index b26a3b84..00000000 --- a/test/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "test", - "dependencies": { - "chai": "^1.10.0" - } -} diff --git a/test/test.coveralls.js b/test/test.coveralls.js deleted file mode 100644 index 6166cb79..00000000 --- a/test/test.coveralls.js +++ /dev/null @@ -1,35 +0,0 @@ -/* global require */ -/* global describe, it */ -var assert = require("assert") -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) \ No newline at end of file diff --git a/test/test.js b/test/test.js new file mode 100644 index 00000000..1ac89cbc --- /dev/null +++ b/test/test.js @@ -0,0 +1,589 @@ +Mock.mock({ + "string|1-10": "★", +}); +Mock.mock({ + "string|3": "★★★", +}); +Mock.mock({ + "number|+1": 202, +}); +Mock.mock({ + "number|1-100": 100, +}); +Mock.mock({ + "number|1-100.1-10": 1, +}); +Mock.mock({ + "number|123.1-10": 1, +}); +Mock.mock({ + "number|123.3": 1, +}); +Mock.mock({ + "number|123.10": 1.123, +}); +Mock.mock({ + "boolean|1": true, +}); +Mock.mock({ + "boolean|1-2": true, +}); +Mock.mock({ + "object|2": { + 310000: "上海市", + 320000: "江苏省", + 330000: "浙江省", + 340000: "安徽省", + }, +}); +Mock.mock({ + "object|2-4": { + 110000: "北京市", + 120000: "天津市", + 130000: "河北省", + 140000: "山西省", + }, +}); +Mock.mock({ + "array|1": ["AMD", "CMD", "UMD"], +}); +Mock.mock({ + "array|+1": ["AMD", "CMD", "UMD"], +}); +Mock.mock({ + "array|1-10": [ + { + "name|+1": ["Hello", "Mock.js", "!"], + }, + ], +}); +Mock.mock({ + "array|1-10": ["Mock.js"], +}); +Mock.mock({ + "array|1-10": ["Hello", "Mock.js", "!"], +}); +Mock.mock({ + "array|3": ["Mock.js"], +}); +Mock.mock({ + "array|3": ["Hello", "Mock.js", "!"], +}); +Mock.mock({ + foo: "Syntax Demo", + name: function () { + return this.foo; + }, +}); +Mock.mock({ + regexp: /[a-z][A-Z][0-9]/, +}); +Mock.mock({ + regexp: /\w\W\s\S\d\D/, +}); +Mock.mock({ + regexp: /\d{5,10}/, +}); +Mock.mock({ + "regexp|3": /\d{5,10}\-/, +}); +Mock.mock({ + "regexp|1-5": /\d{5,10}\-/, +}); +Mock.mock({ + foo: "Hello", + nested: { + a: { + b: { + c: "Mock.js", + }, + }, + }, + absolutePath: "@/foo @/nested/a/b/c", +}); +Mock.mock({ + foo: "Hello", + nested: { + a: { + b: { + c: "Mock.js", + }, + }, + }, + relativePath: { + a: { + b: { + c: "@../../../foo @../../../nested/a/b/c", + }, + }, + }, +}); +// Mock.Random.boolean() +Mock.Random.boolean(); +Mock.mock("@boolean"); +Mock.mock("@boolean()"); + +// Mock.Random.boolean( min, max, current ) +Mock.Random.boolean(1, 9, true); +Mock.mock("@boolean(1, 9, true)"); +// Mock.Random.natural() +Mock.Random.natural(); +Mock.mock("@natural"); +Mock.mock("@natural()"); + +// Mock.Random.natural( min ) +Mock.Random.natural(10000); +Mock.mock("@natural(10000)"); + +// Mock.Random.natural( min, max ) +Mock.Random.natural(60, 100); +Mock.mock("@natural(60, 100)"); +// Mock.Random.integer() +Mock.Random.integer(); +Mock.mock("@integer"); +Mock.mock("@integer()"); + +// Mock.Random.integer( min ) +Mock.Random.integer(10000); +Mock.mock("@integer(10000)"); + +// Mock.Random.integer( min, max ) +Mock.Random.integer(60, 100); +Mock.mock("@integer(60, 100)"); +// Mock.Random.float() +Mock.Random.float(); +Mock.mock("@float"); +Mock.mock("@float()"); + +// Mock.Random.float( min ) +Mock.Random.float(0); +Mock.mock("@float(0)"); + +// Mock.Random.float( min, max ) +Mock.Random.float(60, 100); +Mock.mock("@float(60, 100)"); + +// Mock.Random.float( min, max, dmin ) +Mock.Random.float(60, 100, 3); +Mock.mock("@float(60, 100, 3)"); + +// Mock.Random.float( min, max, dmin, dmax ) +Mock.Random.float(60, 100, 3, 5); +Mock.mock("@float(60, 100, 3, 5)"); + +// Mock.Random.character() +Mock.Random.character(); +Mock.mock("@character"); +Mock.mock("@character()"); + +// Mock.Random.character( 'lower/upper/number/symbol' ) +Mock.Random.character("lower"); +Mock.Random.character("upper"); +Mock.Random.character("number"); +Mock.Random.character("symbol"); + +Mock.mock('@character("lower")'); +Mock.mock('@character("upper")'); +Mock.mock('@character("number")'); +Mock.mock('@character("symbol")'); + +// Mock.Random.character( pool ) +Mock.Random.character("aeiou"); +Mock.mock('@character("aeiou")'); +// Mock.Random.string() +Mock.Random.string(); +Mock.mock("@string"); +Mock.mock("@string()"); + +// Mock.Random.string( length ) +Mock.Random.string(5); +Mock.mock("@string(5)"); + +// Mock.Random.string( pool, length ) +Mock.Random.string("lower", 5); +Mock.Random.string("upper", 5); +Mock.Random.string("number", 5); +Mock.Random.string("symbol", 5); +Mock.Random.string("aeiou", 5); + +Mock.mock('@string("lower", 5)'); +Mock.mock('@string("upper", 5)'); +Mock.mock('@string("number", 5)'); +Mock.mock('@string("symbol", 5)'); +Mock.mock('@string("aeiou", 5)'); + +// Mock.Random.string( min, max ) +Mock.Random.string(7, 10); +Mock.mock("@string(7, 10)"); + +// Mock.Random.string( pool, min, max ) +Mock.Random.string("lower", 1, 3); +Mock.Random.string("upper", 1, 3); +Mock.Random.string("number", 1, 3); +Mock.Random.string("symbol", 1, 3); +Mock.Random.string("aeiou", 1, 3); + +Mock.mock('@string("lower", 1, 3)'); +Mock.mock('@string("upper", 1, 3)'); +Mock.mock('@string("number", 1, 3)'); +Mock.mock('@string("symbol", 1, 3)'); +Mock.mock('@string("aeiou", 1, 3)'); + +// Mock.Random.range( stop ) +Mock.Random.range(10); +Mock.mock("@range(10)"); + +// Mock.Random.range( start, stop ) +Mock.Random.range(3, 7); +Mock.mock("@range(3, 7)"); + +// Mock.Random.range( start, stop, step ) +Mock.Random.range(1, 10, 2); +Mock.Random.range(1, 10, 3); + +Mock.mock("@range(1, 10, 2)"); +Mock.mock("@range(1, 10, 3)"); +// Mock.Random.date() +Mock.Random.date(); +Mock.mock("@date"); +Mock.mock("@date()"); + +// Mock.Random.date( format ) +Mock.Random.date("yyyy-MM-dd"); +Mock.Random.date("yy-MM-dd"); +Mock.Random.date("y-MM-dd"); +Mock.Random.date("y-M-d"); + +Mock.mock('@date("yyyy-MM-dd")'); +Mock.mock('@date("yy-MM-dd")'); +Mock.mock('@date("y-MM-dd")'); +Mock.mock('@date("y-M-d")'); + +Mock.mock('@date("yyyy yy y MM M dd d")'); +// Mock.Random.time() +Mock.Random.time(); +Mock.mock("@time"); +Mock.mock("@time()"); + +// Mock.Random.time( format ) +Mock.Random.time("A HH:mm:ss"); +Mock.Random.time("a HH:mm:ss"); +Mock.Random.time("HH:mm:ss"); +Mock.Random.time("H:m:s"); + +Mock.mock('@time("A HH:mm:ss")'); +Mock.mock('@time("a HH:mm:ss")'); +Mock.mock('@time("HH:mm:ss")'); +Mock.mock('@time("H:m:s")'); + +Mock.mock('@datetime("HH H hh h mm m ss s SS S A a T")'); +// Mock.Random.datetime() +Mock.Random.datetime(); +Mock.mock("@datetime"); +Mock.mock("@datetime()"); + +// Mock.Random.datetime( format ) +Mock.Random.datetime("yyyy-MM-dd A HH:mm:ss"); +Mock.Random.datetime("yy-MM-dd a HH:mm:ss"); +Mock.Random.datetime("y-MM-dd HH:mm:ss"); +Mock.Random.datetime("y-M-d H:m:s"); + +Mock.mock('@datetime("yyyy-MM-dd A HH:mm:ss")'); +Mock.mock('@datetime("yy-MM-dd a HH:mm:ss")'); +Mock.mock('@datetime("y-MM-dd HH:mm:ss")'); +Mock.mock('@datetime("y-M-d H:m:s")'); + +Mock.mock('@datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")'); +// Ranndom.now() +Mock.Random.now(); +Mock.mock("@now"); +Mock.mock("@now()"); + +// Ranndom.now( unit ) +Mock.Random.now("year"); +Mock.Random.now("month"); +Mock.Random.now("week"); +Mock.Random.now("day"); +Mock.Random.now("hour"); +Mock.Random.now("minute"); +Mock.Random.now("second"); + +// Ranndom.now( format ) +Mock.Random.now("yyyy-MM-dd HH:mm:ss SS"); + +// Ranndom.now( unit, format ) +Mock.Random.now("day", "yyyy-MM-dd HH:mm:ss SS"); +// Mock.Random.image() +Mock.Random.image(); +// Mock.Random.image( size ) +Mock.Random.image("200x100"); +// Mock.Random.image( size, background ) +Mock.Random.image("200x100", "#FF6600"); +// Mock.Random.image( size, background, text ) +Mock.Random.image("200x100", "#4A7BF7", "Hello"); +// Mock.Random.image( size, background, foreground, text ) +Mock.Random.image("200x100", "#50B347", "#FFF", "Mock.js"); +// Mock.Random.image( size, background, foreground, format, text ) +Mock.Random.image("200x100", "#894FC4", "#FFF", "png", "!"); +// Mock.Random.dataImage() +Mock.Random.dataImage(); + +// Mock.Random.dataImage( size ) +Mock.Random.dataImage("200x100"); + +// Mock.Random.dataImage( size, text ) +Mock.Random.dataImage("200x100", "Hello Mock.js!"); +// Mock.Random.color() +Mock.Random.color(); +Mock.mock("@color"); +Mock.mock("@color()"); +// Mock.Random.hex() +Mock.Random.hex(); +Mock.mock("@hex"); +Mock.mock("@hex()"); +// Mock.Random.rgb() +Mock.Random.rgb(); +Mock.mock("@rgb"); +Mock.mock("@rgb()"); +// Mock.Random.rgba() +Mock.Random.rgba(); +Mock.mock("@rgba"); +Mock.mock("@rgba()"); +// Mock.Random.hsl() +Mock.Random.hsl(); +Mock.mock("@hsl"); +Mock.mock("@hsl()"); +// Mock.Random.paragraph() +Mock.Random.paragraph(); + +Mock.mock("@paragraph"); + +Mock.mock("@paragraph()"); + +// Mock.Random.paragraph( len ) +Mock.Random.paragraph(2); + +Mock.mock("@paragraph(2)"); + +// Mock.Random.paragraph( min, max ) +Mock.Random.paragraph(1, 3); + +Mock.mock("@paragraph(1, 3)"); + +// Mock.Random.sentence() +Mock.Random.sentence(); +Mock.mock("@sentence"); +Mock.mock("@sentence()"); + +// Mock.Random.sentence( len ) +Mock.Random.sentence(5); +Mock.mock("@sentence(5)"); + +// Mock.Random.sentence( min, max ) +Mock.Random.sentence(3, 5); +Mock.mock("@sentence(3, 5)"); + +// Mock.Random.word() +Mock.Random.word(); +Mock.mock("@word"); +Mock.mock("@word()"); + +// Mock.Random.word( len ) +Mock.Random.word(5); +Mock.mock("@word(5)"); + +// Mock.Random.word( min, max ) +Mock.Random.word(3, 5); +Mock.mock("@word(3, 5)"); + +// Mock.Random.title() +Mock.Random.title(); +Mock.mock("@title"); +Mock.mock("@title()"); + +// Mock.Random.title( len ) +Mock.Random.title(5); +Mock.mock("@title(5)"); + +// Mock.Random.title( min, max ) +Mock.Random.title(3, 5); +Mock.mock("@title(3, 5)"); + +// Mock.Random.cparagraph() +Mock.Random.cparagraph(); + +Mock.mock("@cparagraph"); + +Mock.mock("@cparagraph()"); + +// Mock.Random.cparagraph( len ) +Mock.Random.cparagraph(2); + +Mock.mock("@cparagraph(2)"); + +// Mock.Random.cparagraph( min, max ) +Mock.Random.cparagraph(1, 3); + +Mock.mock("@cparagraph(1, 3)"); + +// Mock.Random.csentence() +Mock.Random.csentence(); +Mock.mock("@csentence"); +Mock.mock("@csentence()"); + +// Mock.Random.csentence( len ) +Mock.Random.csentence(5); +Mock.mock("@csentence(5)"); + +// Mock.Random.csentence( min, max ) +Mock.Random.csentence(3, 5); +Mock.mock("@csentence(3, 5)"); + +// Mock.Random.cword() +Mock.Random.cword(); +Mock.mock("@cword"); +Mock.mock("@cword()"); + +// Mock.Random.cword( pool ) +Mock.Random.cword("零一二三四五六七八九十"); +Mock.mock('@cword("零一二三四五六七八九十")'); + +// Mock.Random.cword( length ) +Mock.Random.cword(3); +Mock.mock("@cword(3)"); + +// Mock.Random.cword( pool, length ) +Mock.Random.cword("零一二三四五六七八九十", 3); +Mock.mock('@cword("零一二三四五六七八九十", 3)'); + +// Mock.Random.cword( min, max ) +Mock.Random.cword(3, 5); +Mock.mock("@cword(3, 5)"); + +// Mock.Random.cword( pool, min, max ) +Mock.Random.cword("零一二三四五六七八九十", 5, 7); +Mock.mock('@cword("零一二三四五六七八九十", 5, 7)'); +// Mock.Random.ctitle() +Mock.Random.ctitle(); +Mock.mock("@ctitle"); +Mock.mock("@ctitle()"); + +// Mock.Random.ctitle( len ) +Mock.Random.ctitle(5); +Mock.mock("@ctitle(5)"); + +// Mock.Random.ctitle( min, max ) +Mock.Random.ctitle(3, 5); +Mock.mock("@ctitle(3, 5)"); + +// Mock.Random.first() +Mock.Random.first(); +Mock.mock("@first"); +Mock.mock("@first()"); +// Mock.Random.last() +Mock.Random.last(); +Mock.mock("@last"); +Mock.mock("@last()"); +// Mock.Random.name() +Mock.Random.name(); +Mock.mock("@name"); +Mock.mock("@name()"); + +// Mock.Random.name( middle ) +Mock.Random.name(true); +Mock.mock("@name(true)"); +// Mock.Random.cfirst() +Mock.Random.cfirst(); +Mock.mock("@cfirst"); +Mock.mock("@cfirst()"); +// Mock.Random.clast() +Mock.Random.clast(); +Mock.mock("@clast"); +Mock.mock("@clast()"); +// Mock.Random.cname() +Mock.Random.cname(); +Mock.mock("@cname"); +Mock.mock("@cname()"); +// Mock.Random.url() +Mock.Random.url(); +Mock.mock("@url"); +Mock.mock("@url()"); +// Mock.Random.domain() +Mock.Random.domain(); +Mock.mock("@domain"); +Mock.mock("@domain()"); +// Mock.Random.protocol() +Mock.Random.protocol(); +Mock.mock("@protocol"); +Mock.mock("@protocol()"); +// Mock.Random.tld() +Mock.Random.tld(); +Mock.mock("@tld"); +Mock.mock("@tld()"); +// Mock.Random.email() +Mock.Random.email(); +Mock.mock("@email"); +Mock.mock("@email()"); +// Mock.Random.ip() +Mock.Random.ip(); +Mock.mock("@ip"); +Mock.mock("@ip()"); +// Mock.Random.region() +Mock.Random.region(); +Mock.mock("@region"); +Mock.mock("@region()"); +// Mock.Random.province() +Mock.Random.province(); +Mock.mock("@province"); +Mock.mock("@province()"); +// Mock.Random.city() +Mock.Random.city(); +Mock.mock("@city"); +Mock.mock("@city()"); +// Mock.Random.city( prefix ) +Mock.Random.city(true); +Mock.mock("@city(true)"); +// Mock.Random.county() +Mock.Random.county(); +Mock.mock("@county"); +Mock.mock("@county()"); +// Mock.Random.county( prefix ) +Mock.Random.county(true); +Mock.mock("@county(true)"); +// Mock.Random.zip() +Mock.Random.zip(); +Mock.mock("@zip"); +Mock.mock("@zip()"); +// Mock.Random.capitalize( word ) +Mock.Random.capitalize("hello"); +Mock.mock('@capitalize("hello")'); +// Mock.Random.upper( str ) +Mock.Random.upper("hello"); +Mock.mock('@upper("hello")'); +// Mock.Random.lower( str ) +Mock.Random.lower("HELLO"); +Mock.mock('@lower("HELLO")'); +// Mock.Random.pick( arr ) +Mock.Random.pick(["a", "e", "i", "o", "u"]); +Mock.mock('@pick(["a", "e", "i", "o", "u"])'); +// Mock.Random.shuffle( arr ) +Mock.Random.shuffle(["a", "e", "i", "o", "u"]); +Mock.mock('@shuffle(["a", "e", "i", "o", "u"])'); +// Mock.Random.guid() +Mock.Random.guid(); +Mock.mock("@guid"); +Mock.mock("@guid()"); +// Mock.Random.id() +Mock.Random.id(); +Mock.mock("@id"); +Mock.mock("@id()"); +// Mock.Random.increment() +Mock.Random.increment(); +Mock.mock("@increment"); +Mock.mock("@increment()"); + +// Mock.Random.increment( step ) +Mock.Random.increment(100); +Mock.mock("@increment(100)"); +Mock.Random.increment(1000); +Mock.mock("@increment(1000)"); diff --git a/test/test.mock.html b/test/test.mock.html deleted file mode 100644 index 8c9c6552..00000000 --- a/test/test.mock.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - Test: Mock - - - - - - -
- - - - - - - - -
-
-

-    

-
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-
\ No newline at end of file
diff --git a/test/test.mock.mock.js b/test/test.mock.mock.js
deleted file mode 100644
index 1461e5a8..00000000
--- a/test/test.mock.mock.js
+++ /dev/null
@@ -1,62 +0,0 @@
-/* global require, chai, describe, before, it */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-var expect = chai.expect
-var Mock, $, _
-
-describe('Mock.mock', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-
-    describe('Mock.mock( String )', function() {
-        it('@EMAIL', function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.not.equal(this.test.title)
-            this.test.title += ' => ' + data
-        })
-    })
-    describe('Mock.mock( {} )', function() {
-        it('', function() {
-            var tpl = {
-                'list|1-10': [{
-                    'id|+1': 1,
-                    'email': '@EMAIL'
-                }]
-            }
-            var data = Mock.mock(tpl)
-            this.test.title = JSON.stringify(tpl /*, null, 4*/ ) + ' => ' + JSON.stringify(data /*, null, 4*/ )
-            expect(data).to.have.property('list')
-                .that.be.an('array').with.length.within(1, 10)
-            _.each(data.list, function(item, index, list) {
-                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
-            })
-        })
-    })
-    describe('Mock.mock( function() )', function() {
-        it('', function() {
-            var fn = function() {
-                return Mock.mock({
-                    'list|1-10': [{
-                        'id|+1': 1,
-                        'email': '@EMAIL'
-                    }]
-                })
-            }
-            var data = Mock.mock(fn)
-            this.test.title = fn.toString() + ' => ' + JSON.stringify(data /*, null, 4*/ )
-            expect(data).to.have.property('list')
-                .that.be.an('array').with.length.within(1, 10)
-            _.each(data.list, function(item, index, list) {
-                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
-            })
-        })
-    })
-})
\ No newline at end of file
diff --git a/test/test.mock.random.js b/test/test.mock.random.js
deleted file mode 100644
index bb5f9df7..00000000
--- a/test/test.mock.random.js
+++ /dev/null
@@ -1,464 +0,0 @@
-/* global require, chai, describe, before, it */
-/* global window */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-var expect = chai.expect
-var Mock, Random, $, _, Random
-
-/* jshint -W061 */
-describe('Random', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            window.Random = Random = Mock.Random
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-
-    function stringify(json) {
-        return JSON.stringify(json /*, null, 4*/ )
-    }
-
-    function doit(expression, validator) {
-        it('', function() {
-            // for (var i = 0; i < 1; i++) {}
-            var data = eval(expression)
-            validator(data)
-            this.test.title = stringify(expression) + ' => ' + stringify(data)
-        })
-    }
-
-    describe('Basic', function() {
-        doit('Random.boolean()', function(data) {
-            expect(data).to.be.a('boolean')
-        })
-
-        doit('Random.natural()', function(data) {
-            expect(data).to.be.a('number').within(0, 9007199254740992)
-        })
-        doit('Random.natural(1, 3)', function(data) {
-            expect(data).to.be.a('number').within(1, 3)
-        })
-        doit('Random.natural(1)', function(data) {
-            expect(data).to.be.a('number').least(1)
-        })
-
-        doit('Random.integer()', function(data) {
-            expect(data).to.be.a('number').within(-9007199254740992, 9007199254740992)
-        })
-        doit('Random.integer(-10, 10)', function(data) {
-            expect(data).to.be.a('number').within(-10, 10)
-        })
-
-        // 1 整数部分 2 小数部分
-        var RE_FLOAT = /(\-?\d+)\.?(\d+)?/
-
-        function validFloat(float, min, max, dmin, dmax) {
-            RE_FLOAT.lastIndex = 0
-            var parts = RE_FLOAT.exec(float + '')
-
-            expect(+parts[1]).to.be.a('number').within(min, max)
-
-            /* jshint -W041 */
-            if (parts[2] != undefined) {
-                expect(parts[2]).to.have.length.within(dmin, dmax)
-            }
-        }
-
-        doit('Random.float()', function(data) {
-            validFloat(data, -9007199254740992, 9007199254740992, 0, 17)
-        })
-        doit('Random.float(0)', function(data) {
-            validFloat(data, 0, 9007199254740992, 0, 17)
-        })
-        doit('Random.float(60, 100)', function(data) {
-            validFloat(data, 60, 100, 0, 17)
-        })
-        doit('Random.float(60, 100, 3)', function(data) {
-            validFloat(data, 60, 100, 3, 17)
-        })
-        doit('Random.float(60, 100, 3, 5)', function(data) {
-            validFloat(data, 60, 100, 3, 5)
-        })
-
-        var CHARACTER_LOWER = 'abcdefghijklmnopqrstuvwxyz'
-        var CHARACTER_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-        var CHARACTER_NUMBER = '0123456789'
-        var CHARACTER_SYMBOL = '!@#$%^&*()[]'
-        doit('Random.character()', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(
-                CHARACTER_LOWER +
-                CHARACTER_UPPER +
-                CHARACTER_NUMBER +
-                CHARACTER_SYMBOL
-            ).to.include(data)
-        })
-        doit('Random.character("lower")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_LOWER).to.include(data)
-        })
-        doit('Random.character("upper")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_UPPER).to.include(data)
-        })
-        doit('Random.character("number")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_NUMBER).to.include(data)
-        })
-        doit('Random.character("symbol")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect(CHARACTER_SYMBOL).to.include(data)
-        })
-        doit('Random.character("aeiou")', function(data) {
-            expect(data).to.be.a('string').with.length(1)
-            expect('aeiou').to.include(data)
-        })
-
-        doit('Random.string()', function(data) {
-            expect(data).to.be.a('string').with.length.within(3, 7)
-        })
-        doit('Random.string(5)', function(data) {
-            expect(data).to.be.a('string').with.length(5)
-        })
-        doit('Random.string("lower", 5)', function(data) {
-            expect(data).to.be.a('string').with.length(5)
-            for (var i = 0; i < data.length; i++) {
-                expect(CHARACTER_LOWER).to.include(data[i])
-            }
-        })
-        doit('Random.string(7, 10)', function(data) {
-            expect(data).to.be.a('string').with.length.within(7, 10)
-        })
-        doit('Random.string("aeiou", 1, 3)', function(data) {
-            expect(data).to.be.a('string').with.length.within(1, 3)
-            for (var i = 0; i < data.length; i++) {
-                expect('aeiou').to.include(data[i])
-            }
-        })
-
-        doit('Random.range(10)', function(data) {
-            expect(data).to.be.an('array').with.length(10)
-        })
-        doit('Random.range(3, 7)', function(data) {
-            expect(data).to.be.an('array').deep.equal([3, 4, 5, 6])
-        })
-        doit('Random.range(1, 10, 2)', function(data) {
-            expect(data).to.be.an('array').deep.equal([1, 3, 5, 7, 9])
-        })
-        doit('Random.range(1, 10, 3)', function(data) {
-            expect(data).to.be.an('array').deep.equal([1, 4, 7])
-        })
-
-        var RE_DATE = /\d{4}-\d{2}-\d{2}/
-        var RE_TIME = /\d{2}:\d{2}:\d{2}/
-        var RE_DATETIME = new RegExp(RE_DATE.source + ' ' + RE_TIME.source)
-
-        doit('Random.date()', function(data) {
-            expect(RE_DATE.test(data)).to.be.true
-        })
-
-        doit('Random.time()', function(data) {
-            expect(RE_TIME.test(data)).to.be.true
-        })
-
-        doit('Random.datetime()', function(data) {
-            expect(RE_DATETIME.test(data)).to.be.true
-        })
-        doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("yy-MM-dd HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("y-MM-dd HH:mm:ss")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("y-M-d H:m:s")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function(data) {
-            expect(data).to.be.ok
-        })
-
-        doit('Random.now()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("year")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("month")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("day")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("hour")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("minute")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("second")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("week")', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function(data) {
-            expect(data).to.be.ok
-        })
-    })
-
-    describe('Image', function() {
-        doit('Random.image()', function(data) {
-            expect(data).to.be.ok
-        })
-        it('Random.dataImage()', function() {
-            var data = eval(this.test.title)
-            expect(data).to.be.ok
-            this.test.title = stringify(this.test.title) + ' => '
-        })
-        it('Random.dataImage("200x100")', function() {
-            var data = eval(this.test.title)
-            expect(data).to.be.ok
-            this.test.title = stringify(this.test.title) + ' => '
-        })
-        it('Random.dataImage("200x100", "Hello Mock.js!")', function() {
-            var data = eval(this.test.title)
-            expect(data).to.be.ok
-            this.test.title = stringify(this.test.title) + ' => '
-        })
-    })
-
-    var RE_COLOR = /^#[0-9a-fA-F]{6}$/
-    var RE_COLOR_RGB = /^rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
-    var RE_COLOR_RGBA = /^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0\.\d{1,2}\)$/
-    var RE_COLOR_HSL = /^hsl\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
-    describe('Color', function() {
-        doit('Random.color()', function(data) {
-            expect(RE_COLOR.test(data)).to.true
-        })
-        doit('Random.hex()', function(data) {
-            expect(RE_COLOR.test(data)).to.true
-        })
-        doit('Random.rgb()', function(data) {
-            expect(RE_COLOR_RGB.test(data)).to.true
-        })
-        doit('Random.rgba()', function(data) {
-            expect(RE_COLOR_RGBA.test(data)).to.true
-        })
-        doit('Random.hsl()', function(data) {
-            expect(RE_COLOR_HSL.test(data)).to.true
-        })
-    })
-
-    describe('Text', function() {
-        doit('Random.paragraph()', function(data) {
-            expect(data.split('.').length - 1).to.within(3, 7)
-        })
-        doit('Random.paragraph(2)', function(data) {
-            expect(data.split('.').length - 1).to.equal(2)
-        })
-        doit('Random.paragraph(1, 3)', function(data) {
-            expect(data.split('.').length - 1).to.within(1, 3)
-        })
-
-        doit('Random.sentence()', function(data) {
-            expect(data[0]).to.equal(data.toUpperCase()[0])
-            expect(data.split(' ').length).to.within(12, 18)
-        })
-        doit('Random.sentence(4)', function(data) {
-            expect(data[0]).to.equal(data.toUpperCase()[0])
-            expect(data.split(' ').length).to.equal(4)
-        })
-        doit('Random.sentence(3, 5)', function(data) {
-            expect(data[0]).to.equal(data.toUpperCase()[0])
-            expect(data.split(' ').length).to.within(3, 5)
-        })
-
-        doit('Random.word()', function(data) {
-            expect(data).to.have.length.within(3, 10)
-        })
-        doit('Random.word(4)', function(data) {
-            expect(data).to.have.length(4)
-        })
-        doit('Random.word(3, 5)', function(data) {
-            expect(data).to.have.length.within(3, 5)
-        })
-
-        doit('Random.title()', function(data) {
-            var words = data.split(' ')
-            _.each(words, function(word) {
-                expect(word[0]).to.equal(word[0].toUpperCase())
-            })
-            expect(words).to.have.length.within(3, 7)
-        })
-        doit('Random.title(4)', function(data) {
-            var words = data.split(' ')
-            _.each(words, function(word) {
-                expect(word[0]).to.equal(word[0].toUpperCase())
-            })
-            expect(words).to.have.length(4)
-        })
-        doit('Random.title(3, 5)', function(data) {
-            var words = data.split(' ')
-            _.each(words, function(word) {
-                expect(word[0]).to.equal(word[0].toUpperCase())
-            })
-            expect(words).to.have.length.within(3, 5)
-        })
-    })
-
-    describe('Name', function() {
-        doit('Random.first()', function(data) {
-            expect(data[0]).to.equal(data[0].toUpperCase())
-        })
-        doit('Random.last()', function(data) {
-            expect(data[0]).to.equal(data[0].toUpperCase())
-        })
-        doit('Random.name()', function(data) {
-            var words = data.split(' ')
-            expect(words).to.have.length(2)
-            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
-            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
-        })
-        doit('Random.name(true)', function(data) {
-            var words = data.split(' ')
-            expect(words).to.have.length(3)
-            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
-            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
-            expect(words[2][0]).to.equal(words[2][0].toUpperCase())
-        })
-
-        doit('Random.cfirst()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.clast()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.cname()', function(data) {
-            expect(data).to.be.ok
-        })
-    })
-
-    var RE_URL = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/
-    var RE_IP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
-    describe('Web', function() {
-        doit('Random.url()', function(data) {
-            expect(RE_URL.test(data)).to.be.true
-        })
-        doit('Random.domain()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.domain("com")', function(data) {
-            expect(data).to.include('.com')
-        })
-        doit('Random.tld()', function(data) {
-            expect(data).to.be.ok
-        })
-
-        doit('Random.email()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.email("nuysoft.com")', function(data) {
-            expect(data).to.include('@nuysoft.com')
-        })
-        doit('Random.ip()', function(data) {
-            expect(RE_IP.test(data)).to.be.true
-        })
-    })
-    describe('Address', function() {
-        doit('Random.region()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.province()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.city()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.city(true)', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.county()', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.county(true)', function(data) {
-            expect(data).to.be.ok
-        })
-        doit('Random.zip()', function(data) {
-            expect(data).to.be.ok
-        })
-    })
-    describe('Helpers', function() {
-        doit('Random.capitalize()', function(data) {
-            expect(data).to.equal('Undefined')
-        })
-        doit('Random.capitalize("hello")', function(data) {
-            expect(data).to.equal('Hello')
-        })
-
-        doit('Random.upper()', function(data) {
-            expect(data).to.equal('UNDEFINED')
-        })
-        doit('Random.upper("hello")', function(data) {
-            expect(data).to.equal('HELLO')
-        })
-
-        doit('Random.lower()', function(data) {
-            expect(data).to.equal('undefined')
-        })
-        doit('Random.lower("HELLO")', function(data) {
-            expect(data).to.equal('hello')
-        })
-
-        doit('Random.pick()', function(data) {
-            expect(data).to.be.undefined
-        })
-        doit('Random.pick("a", "e", "i", "o", "u")', function(data) {
-            expect(["a", "e", "i", "o", "u"]).to.include(data)
-        })
-        doit('Random.pick(["a", "e", "i", "o", "u"])', function(data) {
-            expect(["a", "e", "i", "o", "u"]).to.include(data)
-        })
-        doit('Random.pick(["a", "e", "i", "o", "u"], 3)', function(data) {
-            expect(data).to.be.an('array').with.length(3)
-        })
-        doit('Random.pick(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
-            expect(data).to.be.an('array').with.length.within(1, 5)
-        })
-
-        doit('Random.shuffle()', function(data) {
-            expect(data).to.deep.equal([])
-        })
-        doit('Random.shuffle(["a", "e", "i", "o", "u"])', function(data) {
-            expect(data.join('')).to.not.equal('aeiou')
-            expect(data.sort().join('')).to.equal('aeiou')
-        })
-        doit('Random.shuffle(["a", "e", "i", "o", "u"], 3)', function(data) {
-            expect(data).to.be.an('array').with.length(3)
-        })
-        doit('Random.shuffle(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
-            expect(data).to.be.an('array').with.length.within(1, 5)
-        })
-    })
-
-    var RE_GUID = /[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}/
-    describe('Miscellaneous', function() {
-        doit('Random.guid()', function(data) {
-            expect(data).to.be.a('string').with.length(36)
-            expect(RE_GUID.test(data)).to.be.true
-        })
-        doit('Random.id()', function(data) {
-            expect(data).to.be.a('string').with.length(18)
-        })
-    })
-})
\ No newline at end of file
diff --git a/test/test.mock.request.js b/test/test.mock.request.js
deleted file mode 100644
index 42000d74..00000000
--- a/test/test.mock.request.js
+++ /dev/null
@@ -1,445 +0,0 @@
-/* global console, require, chai, describe, before, it */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-var expect = chai.expect
-var Mock, $, _
-
-describe('Request', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-
-    function stringify(json) {
-        return JSON.stringify(json /*, null, 4*/ )
-    }
-
-    describe('jQuery.ajax()', function() {
-        it('', function(done) {
-            var that = this
-            var url = Math.random()
-            $.ajax({
-                url: url,
-                dataType: 'json'
-            }).done(function( /*data, textStatus, jqXHR*/ ) {
-                // 不会进入
-            }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) {
-                // 浏览器 || PhantomJS
-                expect([404, 0]).to.include(jqXHR.status)
-                that.test.title += url + ' => ' + jqXHR.status
-            }).always(function() {
-                done()
-            })
-        })
-    })
-    describe('jQuery.getScript()', function() {
-        it('', function(done) {
-            var that = this
-            var url = './materiels/noop.js'
-            $.getScript(url, function(script, textStatus, jqXHR) {
-                expect(script).to.be.ok
-                that.test.title += url + ' => ' + jqXHR.status + ' ' + textStatus
-                done()
-            })
-        })
-    })
-    describe('jQuery.load()', function() {
-        it('', function(done) {
-            var that = this
-            var url = './materiels/noop.html'
-            $('
').load(url, function(responseText /*, textStatus, jqXHR*/ ) { - expect(responseText).to.be.ok - that.test.title += url + ' => ' + responseText - done() - }) - }) - }) - describe('jQuery.ajax() XHR Fields', function() { - it('', function(done) { - var that = this - var url = Math.random() - var xhr - $.ajax({ - xhr: function() { - xhr = $.ajaxSettings.xhr() - return xhr - }, - url: url, - dataType: 'json', - xhrFields: { - timeout: 123, - withCredentials: true - } - }).done(function( /*data, textStatus, jqXHR*/ ) { - // 不会进入 - }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) { - // 浏览器 || PhantomJS - expect([404, 0]).to.include(jqXHR.status) - that.test.title += url + ' => ' + jqXHR.status - expect(xhr.timeout).to.be.equal(123) - expect(xhr.withCredentials).to.be.equal(true) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, template )', function() { - it('', function(done) { - var that = this - var url = 'rurl_template.json' - - Mock.mock(/rurl_template.json/, { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - - Mock.setup({ - // timeout: 100, - timeout: '10-50', - }) - $.ajax({ - url: url, - dataType: 'json' - }).done(function(data /*, textStatus, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) )', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) ) + GET + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url + '?foo=1') - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) ) + POST + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('POST') - expect(options.body).to.be.equal('foo=1') - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, rtype, template )', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_template.json' - var count = 0 - - Mock.mock(/rurl_rtype_template\.json/, 'get', { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL', - type: 'get' - }] - }) - Mock.mock(/rurl_rtype_template\.json/, 'post', { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL', - type: 'post' - }] - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) + ' ' - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - expect(item).to.have.property('type').equal('get') - }) - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) + ' ' - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - expect(item).to.have.property('type').equal('post') - }) - }).done(success).always(complete) - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 2) done() - } - - }) - }) - - describe('Mock.mock( rurl, rtype, function(options) )', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_function.json' - var count = 0 - - Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return { - type: 'get' - } - }) - Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(['POST', 'PUT']).to.include(options.type) - expect(options.body).to.be.equal(null) - return { - type: options.type.toLowerCase() - } - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'get') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'post') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'put', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'PUT ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'put') - }).done(success).always(complete) - - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 3) done() - } - - }) - }) - describe('Mock.mock( rurl, rtype, function(options) ) + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_function.json' - var count = 0 - - Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url + '?foo=1') - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return { - type: 'get' - } - }) - Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(['POST', 'PUT']).to.include(options.type) - expect(options.body).to.be.equal('foo=1') - return { - type: options.type.toLowerCase() - } - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'get') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'post') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'put', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'PUT ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'put') - }).done(success).always(complete) - - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 3) done() - } - - }) - }) - describe('#105 addEventListener', function() { - it('addEventListene => addEventListener', function(done) { - var xhr = new Mock.XHR() - expect(xhr.addEventListener).to.not.equal(undefined) - expect(xhr.addEventListene).to.equal(undefined) - done() - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.schema.js b/test/test.mock.schema.js deleted file mode 100644 index ccffdeeb..00000000 --- a/test/test.mock.schema.js +++ /dev/null @@ -1,205 +0,0 @@ -/* global require, chai, describe, before, it */ -/* global window */ -// 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('Schema', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - window.XMLHttpRequest = Mock.XHR - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - - function stringify(json) { - return JSON.stringify(json /*, null, 4*/ ) - } - - function doit(template, validator) { - it('', function() { - var schema = Mock.toJSONSchema(template) - this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) - validator(schema) - }) - } - - describe('Type', function() { - doit(1, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'number') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit(true, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'boolean') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit('', function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'string') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit(function() {}, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'function') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit(/\d/, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'regexp') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - }) - doit([], function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'array') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - expect(schema).to.have.property('items').with.length(0) - }) - doit({}, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() - } - expect(schema).to.have.property('properties').with.length(0) - }) - - }) - - describe('Object', function() { - doit({ - a: { - b: { - c: { - d: {} - } - } - } - }, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - - var properties; - - // root.properties - properties = schema.properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'a') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.properties - properties = properties[0].properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'b') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.b.properties - properties = properties[0].properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'c') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.b.c.properties - properties = properties[0].properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('name', 'd') - expect(properties[0]).to.have.property('type', 'object') - - // root.a.b.c.d.properties - properties = properties[0].properties - expect(properties).to.with.length(0) - }) - - }) - - describe('Array', function() { - doit([ - [ - ['foo', 'bar'] - ] - ], function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'array') - - var items; - - // root.items - items = schema.items - expect(items).to.with.length(1) - expect(items[0]).to.have.property('type', 'array') - - // root[0].items - items = items[0].items - expect(items).to.with.length(1) - expect(items[0]).to.have.property('type', 'array') - - // root[0][0].items - items = items[0].items - expect(items).to.with.length(2) - expect(items[0]).to.have.property('type', 'string') - expect(items[1]).to.have.property('type', 'string') - }) - }) - - describe('String Rule', function() { - doit({ - 'string|1-10': '★' - }, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - - var properties; - // root.properties - properties = schema.properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('type', 'string') - expect(properties[0].rule).to.have.property('min', 1) - expect(properties[0].rule).to.have.property('max', 10) - }) - doit({ - 'string|3': 'value', - }, function(schema) { - expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') - expect(schema).to.have.property('type', 'object') - - var properties; - // root.properties - properties = schema.properties - expect(properties).to.with.length(1) - expect(properties[0]).to.have.property('type', 'string') - expect(properties[0].rule).to.have.property('min', 3) - expect(properties[0].rule.max).to.be.an('undefined') - }) - }) - -}) \ No newline at end of file diff --git a/test/test.mock.spec.dpd.js b/test/test.mock.spec.dpd.js deleted file mode 100644 index 24648a77..00000000 --- a/test/test.mock.spec.dpd.js +++ /dev/null @@ -1,245 +0,0 @@ -/* global require, chai, describe, before, it */ -// 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('DPD', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - describe('Reference', function() { - it('@EMAIL', function() { - var data = Mock.mock(this.test.title) - expect(data).to.not.equal(this.test.title) - }) - }) - describe('Priority', function() { - it('@EMAIL', function() { - var data = Mock.mock({ - email: 'nuysoft@gmail.com', - name: '@EMAIL' - }) - this.test.title += ' => ' + data.name - expect(data.name).to.not.equal(data.email) - }) - it('@email', function() { - var data = Mock.mock({ - email: 'nuysoft@gmail.com', - name: '@email' - }) - this.test.title += ' => ' + data.name - expect(data.name).to.equal(data.email) - }) - }) - describe('Escape', function() { - it('\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - }) - describe('Path', function() { - it('Absolute Path', function() { - var data = Mock.mock({ - id: '@UUID', - children: [{ - parentId: '@/id' - }], - child: { - parentId: '@/id' - } - }) - expect(data.children[0]).to.have.property('parentId', data.id) - expect(data.child).to.have.property('parentId', data.id) - }) - it('Relative Path', function() { - var data = Mock.mock({ - id: '@UUID', - children: [{ - parentId: '@../../id' - }], - child: { - parentId: '@../id' - } - }) - expect(data.children[0]).to.have.property('parentId', data.id) - expect(data.child).to.have.property('parentId', data.id) - }) - - it('Relative Path Fallback in Corner Case', function() { - const STRING = 'https://test.org/@a/build/test.html' - var data = Mock.mock({ - a: STRING - }) - expect(data.a).to.equal(STRING) - }) - }) - describe('Complex', function() { - var tpl = { - basics: { - boolean1: '@BOOLEAN', - boolean2: '@BOOLEAN(1, 9, true)', - - natural1: '@NATURAL', - natural2: '@NATURAL(10000)', - natural3: '@NATURAL(60, 100)', - - integer1: '@INTEGER', - integer2: '@INTEGER(10000)', - integer3: '@INTEGER(60, 100)', - - float1: '@FLOAT', - float2: '@FLOAT(0)', - float3: '@FLOAT(60, 100)', - float4: '@FLOAT(60, 100, 3)', - float5: '@FLOAT(60, 100, 3, 5)', - - character1: '@CHARACTER', - character2: '@CHARACTER("lower")', - character3: '@CHARACTER("upper")', - character4: '@CHARACTER("number")', - character5: '@CHARACTER("symbol")', - character6: '@CHARACTER("aeiou")', - - string1: '@STRING', - string2: '@STRING(5)', - string3: '@STRING("lower",5)', - string4: '@STRING(7, 10)', - string5: '@STRING("aeiou", 1, 3)', - - range1: '@RANGE(10)', - range2: '@RANGE(3, 7)', - range3: '@RANGE(1, 10, 2)', - range4: '@RANGE(1, 10, 3)', - - date: '@DATE', - time: '@TIME', - - datetime1: '@DATETIME', - datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")', - datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")', - datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")', - datetime5: '@DATETIME("y-MM-dd HH:mm:ss")', - datetime6: '@DATETIME("y-M-d H:m:s")', - - now: '@NOW', - nowYear: '@NOW("year")', - nowMonth: '@NOW("month")', - nowDay: '@NOW("day")', - nowHour: '@NOW("hour")', - nowMinute: '@NOW("minute")', - nowSecond: '@NOW("second")', - nowWeek: '@NOW("week")', - nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")' - }, - image: { - image1: '@IMAGE', - image2: '@IMAGE("100x200", "#000")', - image3: '@IMAGE("100x200", "#000", "hello")', - image4: '@IMAGE("100x200", "#000", "#FFF", "hello")', - image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")', - - dataImage1: '@DATAIMAGE', - dataImage2: '@DATAIMAGE("200x100")', - dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")' - }, - color: { - color: '@COLOR', - render: function() { - $('.header').css('background', this.color) - } - }, - text: { - title1: '@TITLE', - title2: '@TITLE(5)', - title3: '@TITLE(3, 5)', - - word1: '@WORD', - word2: '@WORD(5)', - word3: '@WORD(3, 5)', - - sentence1: '@SENTENCE', - sentence2: '@SENTENCE(5)', - sentence3: '@SENTENCE(3, 5)', - - paragraph1: '@PARAGRAPH', - paragraph2: '@PARAGRAPH(2)', - paragraph3: '@PARAGRAPH(1, 3)' - }, - name: { - first: '@FIRST', - last: '@LAST', - name1: '@NAME', - name2: '@NAME(true)' - }, - web: { - url: '@URL', - domain: '@DOMAIN', - email: '@EMAIL', - ip: '@IP', - tld: '@TLD', - }, - address: { - region: '@REGION', - province: '@PROVINCE', - city: '@CITY', - county: '@COUNTY' - }, - miscellaneous: { - guid: '@GUID', - id: '@ID', - 'increment1|3': [ - '@INCREMENT' - ], - 'increment2|3': [ - '@INCREMENT(10)' - ] - }, - helpers: { - capitalize1: '@CAPITALIZE()', - capitalize2: '@CAPITALIZE("hello")', - - upper1: '@UPPER', - upper2: '@UPPER("hello")', - - lower1: '@LOWER', - lower2: '@LOWER("HELLO")', - - pick1: '@PICK', - pick2: '@PICK("abc")', - pick3: '@PICK(["a", "b", "c"])', - - shuffle1: '@SHUFFLE', - shuffle2: '@SHUFFLE(["a", "b", "c"])' - } - } - it('', function() { - var data = Mock.mock(tpl) - // this.test.title += JSON.stringify(data, null, 4) - expect(data).to.be.a('object') - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.spec.dtd.js b/test/test.mock.spec.dtd.js deleted file mode 100644 index 44fe72d5..00000000 --- a/test/test.mock.spec.dtd.js +++ /dev/null @@ -1,677 +0,0 @@ -/* global require, chai, describe, before, it */ -// 数据模板定义(Data Temaplte Definition,DTD) -/* - ## BDD - 1. 结构 - describe suite - [ describe ] - before after beforeEach afterEach - it test - done - 搜索 this.async = fn && fn.length - 2. 常用 expect - expect().to - .equal .deep.equal .not.equal - .match - .have.length .with.length - .have.property .have.deep.property - .to.be.a .to.be.an - .that - .least .most .within - 3. 速度 - 搜索 test.speed - slow > 75 - 75 / 2 < medium < 75 - fast < 75 / 2 - */ -var expect = chai.expect -var Mock, $, _ - -describe('DTD', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - describe('Literal', function() { - it('', function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it('foo', function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it(1, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it(true, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it(false, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(this.test.title) - }) - it({}, function() { - var data = Mock.mock(this.test.title) - expect(data).to.deep.equal(this.test.title) - }) - it([], function() { - var data = Mock.mock(this.test.title) - expect(data).to.deep.equal(this.test.title) - }) - it(function() {}, function() { - var data = Mock.mock(this.test.title) - expect(data).to.equal(undefined) - }) - }) - describe('String', function() { - // `'name|min-max': 'value'` - it('name|min-max', function() { - var data = Mock.mock({ - 'name|1-10': '★号' - }) - expect(data.name).to.have.length.within(2, 20) - }) - - // `'name|count': 'value'` - it('name|count', function() { - var data = Mock.mock({ - 'name|10': '★号' - }) - expect(data.name).to.be.a('string') - .that.have.length(20) - }) - }) - describe('Number', function() { - // `'name|+step': value` - it('name|+step', function() { - var data = Mock.mock({ - 'list|10': [{ - 'name|+1': 100 - }] - }) - expect(data.list).to.be.an('array').with.length(10) - _.each(data.list, function(item, index) { - expect(item).to.have.property('name') - .that.be.a('number') - if (index === 0) expect(item.name).to.equal(100) - else expect(item.name).to.equal( - data.list[index - 1].name + 1 - ) - }) - }) - - // `'name|min-max': value` - it('name|min-max', function() { - var data = Mock.mock({ - 'name|1-100': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(1, 100) - }) - it('name|max-min', function() { - var data = Mock.mock({ - 'name|100-1': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(1, 100) - }) - it('name|-min--max', function() { - var data = Mock.mock({ - 'name|-100--1': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(-100, -1) - }) - it('name|-max--min', function() { - var data = Mock.mock({ - 'name|-1--100': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').within(-100, -1) - }) - it('name|min-min', function() { - var data = Mock.mock({ - 'name|10-10': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').equal(10) - }) - it('name|count', function() { - var data = Mock.mock({ - 'name|10': 100 - }) - expect(data).to.have.property('name') - .that.be.a('number').equal(10) - }) - - // `'name|min-max.dmin-dmax': value` - - // 1 整数部分 2 小数部分 - var RE_FLOAT = /([\+\-]?\d+)\.?(\d+)?/ - - function validNumber(number, min, max, dmin, dmax) { - expect(number).to.be.a('number') - RE_FLOAT.lastIndex = 0 - var parts = RE_FLOAT.exec('' + number) - expect(+parts[1]).to.be.a('number').within(min, max) - expect(parts[2]).to.have.length.within(dmin, dmax) - } - - it('name|min-max.dmin-dmax', function() { - var data = Mock.mock({ - 'name|1-10.1-10': 123.456 - }) - validNumber(data.name, 1, 10, 1, 10) - }) - it('name|min-max.dcount', function() { - var data = Mock.mock({ - 'name|1-10.10': 123.456 - }) - validNumber(data.name, 1, 10, 10, 10) - }) - it('name|count.dmin-dmax', function() { - var data = Mock.mock({ - 'name|10.1-10': 123.456 - }) - validNumber(data.name, 10, 10, 1, 10) - }) - it('name|count.dcount', function() { - var data = Mock.mock({ - 'name|10.10': 123.456 - }) - validNumber(data.name, 10, 10, 10, 10) - }) - it('name|.dmin-dmax', function() { - var data = Mock.mock({ - 'name|.1-10': 123.456 - }) - validNumber(data.name, 123, 123, 1, 10) - }) - it('name|.dcount', function() { - var data = Mock.mock({ - 'name|.10': 123.456 - }) - validNumber(data.name, 123, 123, 10, 10) - }) - }) - describe('Boolean', function() { - // `'name|1': value` - it('name|1', function() { - var data = Mock.mock({ - 'name|1': true - }) - expect(data).to.have.property('name') - .that.be.a('boolean') - }) - - // `'name|min-max': value` - it('name|min-max', function() { - var data = Mock.mock({ - 'name|8-2': true - }) - expect(data).to.have.property('name') - .that.be.a('boolean') - }) - }) - describe('Object', function() { - var methods = { - GET: '@URL', - POST: '@URL', - HEAD: '@URL', - PUT: '@URL', - DELETE: '@URL' - } - var methodCount, tpl, data - - // `'name|min-max': {}` - it('name|min-max', function() { - methodCount = _.keys(methods).length // 5 - for (var min = 0, max; min <= methodCount + 1; min++) { - tpl = {} - max = Mock.Random.integer(0, methodCount) - - // methods|0-? |1-? |2-? |3-? |4-? |5-? |6-? - tpl['methods|' + min + '-' + max] = methods - data = Mock.mock(tpl) - expect(_.keys(data.methods)).to.have.length - .that.within(Math.min(min, max), Math.max(min, max)) - } - }) - - // `'name|count': {}` - it('name|count', function() { - methodCount = _.keys(methods).length // 5 - for (var count = 0; count <= methodCount + 1; count++) { - tpl = {} - tpl['methods|' + count] = methods - data = Mock.mock(tpl) - expect(_.keys(data.methods)).to.have.length( - Math.min(count, methodCount) - ) - } - }) - }) - describe('Array', function() { - // `'name': [{}, {} ...]` - it('name', function() { - var value = [{ - foo: 'foo' - }, { - bar: 'bar' - }, { - foobar: 'foobar' - }] - var data = Mock.mock({ - name: value - }) - expect(data).to.have.property('name') - .that.be.an('array').with.length(3) - .that.not.equal(value) - expect(data).to.have.property('name') - - for (var i = 0; i < data.name.length; i++) { - expect(data.name[i]).to.not.equal(value[i]) - expect(data.name[i]).to.deep.equal(value[i]) - } - }) - - // `'name|1': [{}, {} ...]` - it('name|1: [1, 2, 4, 8]', function() { - // number array - var value = [1, 2, 4, 8] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('number') - expect(value).to.include(data.name) - }) - it('name|1: ["GET", "POST", "HEAD", "DELETE"]', function() { - // string array - var value = ['GET', 'POST', 'HEAD', 'DELETE'] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('string') - expect(value).to.include(data.name) - }) - it('name|1 [{}]', function() { - // object array - var value = [{}] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('object') - .that.deep.equal({}) - expect(data.name).to.not.equal(value[0]) - }) - it('name|1 [{}, {}, {}]', function() { - // object array - var data = Mock.mock({ - 'name|1': [{}, {}, {}] - }) - expect(data).to.have.property('name') - .that.be.a('object') - .that.deep.equal({}) - }) - it('name|1 [{}, {}, {}]', function() { - // object array - var value = [{ - method: 'GET' - }, { - method: 'POST' - }, { - method: 'HEAD' - }, { - method: 'DELETE' - }] - var data = Mock.mock({ - 'name|1': value - }) - expect(data).to.have.property('name') - .that.be.a('object') - .that.have.property('method') - .that.be.a('string') - expect(_.pluck(value, 'method')).include(data.name.method) - }) - - // `'name|+1': [{}, {} ...]` - it('name|+1: ["a", "b", "c"]', function() { - var data = Mock.mock({ - 'list|5': [{ - 'name|+1': ['a', 'b', 'c'] - }] - }) - expect(data).to.have.property('list') - .that.be.an('array').with.length(5) - expect(data.list[0].name).to.equal('a') - expect(data.list[1].name).to.equal('b') - expect(data.list[2].name).to.equal('c') - expect(data.list[3].name).to.equal('a') - expect(data.list[4].name).to.equal('b') - }) - it('name|+1: ["@integer", "@email", "@boolean"]', function() { - var data = Mock.mock({ - 'list|5-10': [{ - 'name|+1': ['@integer', '@email', '@boolean'] - }] - }) - expect(data).to.have.property('list') - .that.be.an('array').have.length.within(5, 10) - expect(data.list[0].name).to.be.a('number') - expect(data.list[1].name).to.be.a('string') - expect(data.list[2].name).to.be.a('boolean') - expect(data.list[3].name).to.be.a('number') - expect(data.list[4].name).to.be.a('string') - }) - - // `'name|min-max': [{}, {} ...]` - it('name|min-min', function() { - var data = Mock.mock({ - 'name|1-1': [{}] - }) - expect(data.name).to.be.an('array').with.length(1) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|min-max [{}]', function() { - var data = Mock.mock({ - 'name|1-10': [{}] - }) - expect(data.name).to.be.an('array').with.length.within(1, 10) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|max-min [{}]', function() { - var data = Mock.mock({ - 'name|10-1': [{}] - }) - expect(data.name).to.be.an('array').with.length.within(1, 10) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|min-max [{}, {}]', function() { - var data = Mock.mock({ - 'name|1-10': [{}, {}] - }) - expect(data.name).to.be.an('array').with.length.within(2, 20) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|max-min [{}, {}]', function() { - var data = Mock.mock({ - 'name|10-1': [{}, {}] - }) - expect(data.name).to.be.an('array').with.length.within(2, 20) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - - // `'name|count': [{}, {} ...]` - it('name|count [{}]', function() { - var data = Mock.mock({ - 'name|10': [{}] - }) - expect(data.name).to.be.an('array').with.length(10) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - it('name|count [{}, {}]', function() { - var data = Mock.mock({ - 'name|10': [{}, {}] - }) - expect(data.name).to.be.an('array').with.length(20) - _.each(data.name, function(item /*, index*/ ) { - expect(item).to.deep.equal({}) - }) - }) - }) - describe('Function', function() { - // `'name': function(){}` - it('name: function', function() { - var data = Mock.mock({ - prop: 'hello', - name: function( /*root, path*/ ) { - return this.prop - } - }) - expect(data).to.have.property('name') - .that.be.a('string').equal('hello') - }) - - // 无序的 function - it('name: function', function() { - var data = Mock.mock({ - name2: function() { - return this.prop * 2 - }, - prop: 1, - name4: function() { - return this.prop * 4 - } - }) - expect(data.name2).to.equal(2) - expect(data.name4).to.equal(4) - }) - - // #25 改变了非函数属性的顺序,查找起来不方便 - it('name: function', function() { - var data = Mock.mock({ - name: function() {}, - first: '', - second: '', - third: '' - }) - var keys = _.keys(data) - expect(keys[0]).equal('first') - expect(keys[1]).equal('second') - expect(keys[2]).equal('third') - expect(keys[3]).equal('name') - }) - }) - - /* - 按照 http://www.regexr.com/ 的 Reference 设计测试用例。 - https://github.com/nuysoft/Mock/blob/7c1e3a686bcc515855f1f583d70ae0ee89acc65e/test/regexp.js#L120 - */ - describe('RegExp', function() { - function validRegExp(regexp) { - if (arguments.length > 1) { - for (var i = 0; i < arguments.length; i++) { - validRegExp(arguments[i]) - } - } - - it(regexp, function() { - var data = Mock.mock(regexp) - this.test.title += ' => ' + data - expect(regexp.test(data)).to.be.true - }) - } - - describe('Character Classes', function() { - validRegExp(/./) - validRegExp( - /[a-z]/, - /[A-Z]/, - /[0-9]/ - ) - validRegExp( - /\w/, - /\W/, - /\s/, - /\S/, - /\d/, - /\D/ - ) - validRegExp( - /[.]/, - /[\w]/, - /[\W]/, - /[\s]/, - /[\S]/, - /[\d]/, - /[\D]/ - ) - validRegExp( - /[^.]/, - /[^\w]/, - /[^\W]/, - /[^\s]/, - /[^\S]/, - /[^\d]/, - /[^\D]/ - ) - }) - describe('Quantifiers', function() { - validRegExp( - /\d?/, - /\d+/, - /\d*/ - ) - - // {n}, {n,}, {n,m}, {0,1} ?, {1,0} +, {0,} * - validRegExp( - /\d{5}/, - /\d{5,}/, - /\d{5,10}/, - /\d{0,1}/, - /\d{0,}/ - ) - - validRegExp(/[\u4E00-\u9FA5]+/) // 汉字 - }) - describe('Anchors', function() { - validRegExp(/^/) - validRegExp(/$/) - validRegExp(/^foo/) - validRegExp(/foo$/) - validRegExp(/\bfoo/) - validRegExp(/\Bfoo/) - }) - - describe('Escaped Characters', function() { - validRegExp(/\000/) - validRegExp(/\xFF/) - validRegExp(/\uFFFF/) - validRegExp(/\cI/) - }) - - describe('Groups & Lookaround', function() { - validRegExp(/(ABC)/) - validRegExp(/(ABC)\1/) - validRegExp(/(?:ABC)/) - validRegExp(/(?=ABC)/) - validRegExp(/(?!ABC)/) - // validRegExp(/(?<=ABC)/) - // validRegExp(/(? Date: Sat, 12 Jun 2021 15:56:41 +0800 Subject: [PATCH 07/65] =?UTF-8?q?=E8=A7=A3=E5=86=B3=20Number=20=E6=96=B9?= =?UTF-8?q?=E9=9D=A2=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=9A=E5=85=A8=E9=9D=A2?= =?UTF-8?q?=E4=BD=BF=E7=94=A8=20lodash=20=E6=8F=90=E4=BE=9B=E7=9A=84=20ran?= =?UTF-8?q?dom=20=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 287 +++++++++++++++++++++++++------- dist/mock.js | 287 +++++++++++++++++++++++++------- src/mock/handle/placeholder.js | 45 ++--- src/mock/random/basic/float.js | 20 +-- src/mock/random/basic/number.js | 9 +- 5 files changed, 471 insertions(+), 177 deletions(-) diff --git a/dist/Mock.min.js b/dist/Mock.min.js index e73e8a21..20c3316d 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -201,7 +201,7 @@ var Mock = (function () { var isArray = Array.isArray; /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0; + var INFINITY$1 = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, @@ -228,7 +228,41 @@ var Mock = (function () { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; } /** @@ -261,6 +295,104 @@ var Mock = (function () { return value != null && (type == 'object' || type == 'function'); } + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + /** * This method returns the first argument it receives. * @@ -1674,7 +1806,7 @@ var Mock = (function () { /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeFloor = Math.floor, - nativeRandom = Math.random; + nativeRandom$1 = Math.random; /** * The base implementation of `_.random` without support for returning @@ -1686,7 +1818,84 @@ var Mock = (function () { * @returns {number} Returns the random number. */ function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); + } + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min, + nativeRandom = Math.random; + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); } /** @@ -1862,15 +2071,9 @@ var Mock = (function () { const isNumber = function (el) { return typeof el === "number" && !isNaN(el); }; - const random = function (min, max) { - return Math.random() * (max - min) + min; - }; - // 返回一个随机的整数。 const integer = function (min, max) { - min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; - max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 - return Math.round(random(min, max)); + return random(min, max, false); }; const natural = function (min, max) { return Math.abs(integer(min, max)); @@ -1947,21 +2150,9 @@ var Mock = (function () { }; const float = function (min, max, dmin, dmax) { - dmin = isNumber(dmin) ? dmin : 0; - dmax = isNumber(dmax) ? dmax : 17; - dmin = Math.max(Math.min(dmin, 17), 0); - dmax = Math.max(Math.min(dmax, 17), 0); - let dcount = natural(dmin, dmax); - var ret = - integer(min, max) + - "." + - [...Array(dcount).keys()] - .map((i) => { - // 最后一位不能为 0,所以必须进行处理 - return i < dcount - 1 ? this.character("number") : this.character("123456789"); - }) - .join(""); - return parseFloat(ret, 10); + let dcount = random(dmin, dmax, false); + + return random(min, max, dcount); }; /* @@ -9182,46 +9373,23 @@ var Mock = (function () { return parts; } - const _all = Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); + // 占位符即是字符串函数的意思 function placeholder(placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params Constant.RE_PLACEHOLDER.exec(""); - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = _all[lkey], - params = (parts && parts[2]) || ""; - var pathParts = splitPathToArray(key); + var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(placeholder); + + var lkey = key && key.toLowerCase(), + pathParts = splitPathToArray(key); // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } + // !不进行低版本浏览器的匹配 + params = params.split(/\s*,\s*/); // 占位符优先引用数据模板中的属性 if (obj && key in obj) return obj[key]; - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - // 绝对路径 or 相对路径 if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); @@ -9241,7 +9409,7 @@ var Mock = (function () { } // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + if (!(key in Random) && !(lkey in Random)) return placeholder; // 递归解析参数中的占位符 for (var i = 0; i < params.length; i++) { @@ -9251,7 +9419,7 @@ var Mock = (function () { } } - var handle = Random[key] || Random[lkey] || Random[okey]; + var handle = Random[key] || Random[lkey]; switch (type$1(handle)) { case "array": // 自动从数组中取一个,例如 @areas @@ -9259,8 +9427,7 @@ var Mock = (function () { case "function": // 执行占位符方法(大多数情况) handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 delete handle.options; return re; } diff --git a/dist/mock.js b/dist/mock.js index e07da352..a55764ca 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -198,7 +198,7 @@ function arrayMap(array, iteratee) { var isArray = Array.isArray; /** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0; +var INFINITY$1 = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = Symbol ? Symbol.prototype : undefined, @@ -225,7 +225,41 @@ function baseToString(value) { return symbolToString ? symbolToString.call(value) : ''; } var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; } /** @@ -258,6 +292,104 @@ function isObject(value) { return value != null && (type == 'object' || type == 'function'); } +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + /** * This method returns the first argument it receives. * @@ -1671,7 +1803,7 @@ var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; /* Built-in method references for those with the same name as other `lodash` methods. */ var nativeFloor = Math.floor, - nativeRandom = Math.random; + nativeRandom$1 = Math.random; /** * The base implementation of `_.random` without support for returning @@ -1683,7 +1815,84 @@ var nativeFloor = Math.floor, * @returns {number} Returns the random number. */ function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); +} + +/** Built-in method references without a dependency on `root`. */ +var freeParseFloat = parseFloat; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min, + nativeRandom = Math.random; + +/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); } /** @@ -1859,15 +2068,9 @@ var Util = /*#__PURE__*/Object.freeze({ const isNumber = function (el) { return typeof el === "number" && !isNaN(el); }; -const random = function (min, max) { - return Math.random() * (max - min) + min; -}; - // 返回一个随机的整数。 const integer = function (min, max) { - min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; - max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 - return Math.round(random(min, max)); + return random(min, max, false); }; const natural = function (min, max) { return Math.abs(integer(min, max)); @@ -1944,21 +2147,9 @@ const range$1 = function (...args) { }; const float = function (min, max, dmin, dmax) { - dmin = isNumber(dmin) ? dmin : 0; - dmax = isNumber(dmax) ? dmax : 17; - dmin = Math.max(Math.min(dmin, 17), 0); - dmax = Math.max(Math.min(dmax, 17), 0); - let dcount = natural(dmin, dmax); - var ret = - integer(min, max) + - "." + - [...Array(dcount).keys()] - .map((i) => { - // 最后一位不能为 0,所以必须进行处理 - return i < dcount - 1 ? this.character("number") : this.character("123456789"); - }) - .join(""); - return parseFloat(ret, 10); + let dcount = random(dmin, dmax, false); + + return random(min, max, dcount); }; /* @@ -9179,46 +9370,23 @@ function splitPathToArray(path) { return parts; } -const _all = Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; -}, {}); +// 占位符即是字符串函数的意思 function placeholder(placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params Constant.RE_PLACEHOLDER.exec(""); - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = _all[lkey], - params = (parts && parts[2]) || ""; - var pathParts = splitPathToArray(key); + var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(placeholder); + + var lkey = key && key.toLowerCase(), + pathParts = splitPathToArray(key); // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } + // !不进行低版本浏览器的匹配 + params = params.split(/\s*,\s*/); // 占位符优先引用数据模板中的属性 if (obj && key in obj) return obj[key]; - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - // 绝对路径 or 相对路径 if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); @@ -9238,7 +9406,7 @@ function placeholder(placeholder, obj, templateContext, options) { } // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + if (!(key in Random) && !(lkey in Random)) return placeholder; // 递归解析参数中的占位符 for (var i = 0; i < params.length; i++) { @@ -9248,7 +9416,7 @@ function placeholder(placeholder, obj, templateContext, options) { } } - var handle = Random[key] || Random[lkey] || Random[okey]; + var handle = Random[key] || Random[lkey]; switch (type$1(handle)) { case "array": // 自动从数组中取一个,例如 @areas @@ -9256,8 +9424,7 @@ function placeholder(placeholder, obj, templateContext, options) { case "function": // 执行占位符方法(大多数情况) handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 delete handle.options; return re; } diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js index 529ae3d9..58d086ab 100644 --- a/src/mock/handle/placeholder.js +++ b/src/mock/handle/placeholder.js @@ -4,46 +4,24 @@ import { pick } from "../random/index.js"; import * as Random from "../random/index.js"; import { gen } from "./gen.js"; import { splitPathToArray, getValueByKeyPath } from "./path.js"; -const _all = Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; -}, {}); + +// 占位符即是字符串函数的意思 export function placeholder(placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params Constant.RE_PLACEHOLDER.exec(""); - var parts = Constant.RE_PLACEHOLDER.exec(placeholder), - key = parts && parts[1], - lkey = key && key.toLowerCase(), - okey = _all[lkey], - params = (parts && parts[2]) || ""; - var pathParts = splitPathToArray(key); + var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(placeholder); + + var lkey = key && key.toLowerCase(), + pathParts = splitPathToArray(key); // 解析占位符的参数 - try { - // 1. 尝试保持参数的类型 - /* - #24 [Window Firefox 30.0 引用 占位符 抛错](https://github.com/nuysoft/Mock/issues/24) - [BX9056: 各浏览器下 window.eval 方法的执行上下文存在差异](http://www.w3help.org/zh-cn/causes/BX9056) - 应该属于 Window Firefox 30.0 的 BUG - */ - /* jshint -W061 */ - params = eval("(function(){ return [].splice.call(arguments, 0 ) })(" + params + ")"); - } catch (error) { - // 2. 如果失败,只能解析为字符串 - // console.error(error) - // if (error instanceof ReferenceError) params = parts[2].split(/,\s*/); - // else throw error - params = parts[2].split(/,\s*/); - } + // !不进行低版本浏览器的匹配 + params = params.split(/\s*,\s*/); // 占位符优先引用数据模板中的属性 if (obj && key in obj) return obj[key]; - // @index @key - // if (Constant.RE_INDEX.test(key)) return +options.name - // if (Constant.RE_KEY.test(key)) return options.name - // 绝对路径 or 相对路径 if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); @@ -63,7 +41,7 @@ export function placeholder(placeholder, obj, templateContext, options) { } // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random) && !(okey in Random)) return placeholder; + if (!(key in Random) && !(lkey in Random)) return placeholder; // 递归解析参数中的占位符 for (var i = 0; i < params.length; i++) { @@ -73,7 +51,7 @@ export function placeholder(placeholder, obj, templateContext, options) { } } - var handle = Random[key] || Random[lkey] || Random[okey]; + var handle = Random[key] || Random[lkey]; switch (Type(handle)) { case "array": // 自动从数组中取一个,例如 @areas @@ -81,8 +59,7 @@ export function placeholder(placeholder, obj, templateContext, options) { case "function": // 执行占位符方法(大多数情况) handle.options = options; - var re = handle.apply(Random, params); - if (re === undefined) re = ""; // 因为是在字符串中,所以默认为空字符串。 + var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 delete handle.options; return re; } diff --git a/src/mock/random/basic/float.js b/src/mock/random/basic/float.js index b334ac10..115b8c95 100644 --- a/src/mock/random/basic/float.js +++ b/src/mock/random/basic/float.js @@ -1,19 +1,7 @@ -import { integer, isNumber, natural } from "./number.js"; +import { random } from "lodash-es"; const float = function (min, max, dmin, dmax) { - dmin = isNumber(dmin) ? dmin : 0; - dmax = isNumber(dmax) ? dmax : 17; - dmin = Math.max(Math.min(dmin, 17), 0); - dmax = Math.max(Math.min(dmax, 17), 0); - let dcount = natural(dmin, dmax); - var ret = - integer(min, max) + - "." + - [...Array(dcount).keys()] - .map((i) => { - // 最后一位不能为 0,所以必须进行处理 - return i < dcount - 1 ? this.character("number") : this.character("123456789"); - }) - .join(""); - return parseFloat(ret, 10); + let dcount = random(dmin, dmax, false); + + return random(min, max, dcount); }; export { float }; diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index 829ff31e..18babb7b 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -1,15 +1,10 @@ const isNumber = function (el) { return typeof el === "number" && !isNaN(el); }; -const random = function (min, max) { - return Math.random() * (max - min) + min; -}; - +import { random } from "lodash-es"; // 返回一个随机的整数。 const integer = function (min, max) { - min = isNumber(min) ? parseInt(min, 10) : -9007199254740992; - max = isNumber(max) ? parseInt(max, 10) : 9007199254740992; // 2^53 - return Math.round(random(min, max)); + return random(min, max, false); }; const natural = function (min, max) { return Math.abs(integer(min, max)); From cb0c634d3cb6b8ff95465a7c6e3de442276ee4b5 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 12 Jun 2021 20:18:15 +0800 Subject: [PATCH 08/65] =?UTF-8?q?color=20=E8=BD=AC=E6=8D=A2=E7=9A=84?= =?UTF-8?q?=E5=BA=93=20=E4=BD=BF=E7=94=A8=20=E2=80=98color=E2=80=99=20?= =?UTF-8?q?=E6=9B=BF=E4=BB=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 4721 ++++++++++++++++++++- dist/mock.js | 4721 ++++++++++++++++++++- package.json | 1 + src/mock/random/basic/boolean.js | 14 +- src/mock/random/basic/float.js | 1 - src/mock/random/basic/number.js | 7 +- src/mock/random/basic/range.js | 32 +- src/mock/random/basic/string.js | 2 +- src/mock/random/color.js | 32 +- src/mock/random/{ => color}/color_dict.js | 0 src/mock/random/color/color_dict_cn.json | 1 + src/mock/random/color_convert.js | 158 - src/mock/random/helper.js | 25 +- src/mock/random/helper/pick.js | 0 src/mock/random/name.js | 4 + yarn.lock | 35 +- 16 files changed, 9065 insertions(+), 689 deletions(-) rename src/mock/random/{ => color}/color_dict.js (100%) create mode 100644 src/mock/random/color/color_dict_cn.json delete mode 100644 src/mock/random/color_convert.js delete mode 100644 src/mock/random/helper/pick.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 20c3316d..4de57be5 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -835,7 +835,7 @@ var Mock = (function () { } /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax = Math.max; + var nativeMax$1 = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. @@ -847,11 +847,11 @@ var Mock = (function () { * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, - length = nativeMax(args.length - start, 0), + length = nativeMax$1(args.length - start, 0), array = Array(length); while (++index < length) { @@ -1898,6 +1898,101 @@ var Mock = (function () { return baseRandom(lower, upper); } + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + var range$1 = createRange(); + /** * A specialized version of `_.shuffle` which mutates and sets the size of `array`. * @@ -2050,162 +2145,2219 @@ var Mock = (function () { } function noop() {} - var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc - }); + var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc + }); + + // 返回一个随机的整数。 + const integer = function (min, max) { + return random(min, max, false); + }; + const natural = function (min, max) { + return Math.abs(integer(min, max)); + }; + + const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); + }; + + const boolean$1 = function (min, max, cur) { + //! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; + }; + + const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", + }; + pools.alpha = pools.lower + pools.upper; + pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + + const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); + }; + + const string$1 = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map(() => character(pool)).join(""); + }; + + const float = function (min, max, dmin, dmax) { + let dcount = random(dmin, dmax, false); + return random(min, max, dcount); + }; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + + var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); + }; + + var simpleSwizzle = createCommonjsModule(function (module) { + + + + var concat = Array.prototype.concat; + var slice = Array.prototype.slice; + + var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; + }; + + swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; + }; + }); + + var colorString = createCommonjsModule(function (module) { + /* MIT license */ + + + + var reverseNames = {}; + + // create a list of reverse color names + for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } + } + + var cs = module.exports = { + to: {}, + get: {} + }; + + cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; + }; + + cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; + }; + + cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; + }; + + cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; + }; + + cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); + }; + + cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; + }; + + cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; + }; + + cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; + }; + + // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax + // (hwb have alpha optional & 1 is default value) + cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; + }; + + cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; + }; + + // helpers + function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); + } + + function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; + } + }); + colorString.to; + colorString.get; + + var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + + var conversions = createCommonjsModule(function (module) { + /* MIT license */ + + + // NOTE: conversions should only return primitive values (i.e. arrays, or + // values that give correct `typeof` results). + // do not use box values types (i.e. Number(), String(), etc.) + + var reverseKeywords = {}; + for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } + } + + var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} + }; + + // hide .channels and .labels properties + for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } + } + + convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; + }; + + convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; + }; + + convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; + }; + + convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; + }; + + /** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ + function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); + } + + convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; + }; + + convert.keyword.rgb = function (keyword) { + return colorName[keyword]; + }; + + convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; + }; + + convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; + }; + + convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; + }; + + convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } + }; + + convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; + }; + + // http://dev.w3.org/csswg/css-color/#hwb-to-rgb + convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; + }; + + convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; + }; + + convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; + }; + + convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; + }; + + convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; + }; + + convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + }; + + convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; + }; + + convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; + }; + + convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; + }; + + convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; + }; + + convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; + }; + + convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; + }; + + convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; + }; + + convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; + }; + + convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; + }; + + convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; + }; + + convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; + }; + + convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; + }; + + convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; + }; + + convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; + }; + + convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; + }; + + convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; + }; + + convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; + }; + + convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; + }; + + convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; + }; + + convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; + }; + }); + conversions.rgb; + conversions.hsl; + conversions.hsv; + conversions.hwb; + conversions.cmyk; + conversions.xyz; + conversions.lab; + conversions.lch; + conversions.hex; + conversions.keyword; + conversions.ansi16; + conversions.ansi256; + conversions.hcg; + conversions.apple; + conversions.gray; + + /* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. + */ + + function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; + } + + // https://en.wikipedia.org/wiki/Breadth-first_search + function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; + } + + function link(from, to) { + return function (args) { + return to(from(args)); + }; + } + + function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; + } + + var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; + }; + + var convert$1 = {}; + + var models = Object.keys(conversions); + + function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); + }); + + var colorConvert = convert$1; + + var _slice = [].slice; + + var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' + ]; + + var hashedModelKeys = {}; + Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; + }); + + var limiters = {}; + + function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } + } + + Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, - const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); - }; - // 返回一个随机的整数。 - const integer = function (min, max) { - return random(min, max, false); - }; - const natural = function (min, max) { - return Math.abs(integer(min, max)); - }; + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); - const boolean$1 = function (min, max, cur) { - if (cur) { - min = isNumber(min) ? parseInt(min, 10) : 1; - max = isNumber(max) ? parseInt(max, 10) : 1; - return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - } - return Math.random() >= 0.5; - }; + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } - const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", - }; - pools.alpha = pools.lower + pools.upper; - pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + return (lum2 + 0.05) / (lum1 + 0.05); + }, - const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); - }; + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } - const string$1 = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map((i) => character(pool)).join(""); - }; + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, - const range$1 = function (...args) { - // range( stop ) - let start, stop, step; - if (arguments.length <= 1) { - [stop] = args; - return [...Array(stop).keys()]; - } + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, - // range( start, stop ,step=1) - // range(10,20,3) = [10,13,16,19] - [start, stop, step = 1] = args; - let arrayLength = Math.ceil((stop - start) / step); - return [...Array(arrayLength).keys()].map((index) => { - return start + index * step; - }); + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } }; - const float = function (min, max, dmin, dmax) { - let dcount = random(dmin, dmax, false); + // model conversion methods and static constructors + Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } - return random(min, max, dcount); - }; + var channels = colorConvert[model].channels; - /* - ## Color Convert + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 - */ - function hsv2rgb(hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; + if (arguments.length) { + return new Color(arguments, model); + } - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - s * f); - var t = 255 * v * (1 - s * (1 - f)); + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; + }); - v = 255 * v; + function roundTo(num, places) { + return Number(num.toFixed(places)); + } - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } + function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; } - function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, - l; - l = (2 - s) * v; - sl = s * v; - sl /= l <= 1 ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; + + function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; + } + + function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; } - // http://www.140byt.es/keywords/color - function rgb2hex(a, b, c) { - return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); + + function assertArray(val) { + return Array.isArray(val) ? val : [val]; + } + + function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; } + var color$1 = Color; + /* ## Color 字典数据 @@ -2283,6 +4435,2187 @@ var Mock = (function () { }, }; + /* + ## Helpers + */ + + const upper = function (str) { + return (str + "").toUpperCase(); + }; + + const lower = function (str) { + return (str + "").toLowerCase(); + }; + + // 从数组中随机选取一个元素,并返回。 + const pick = function (...args) { + let [arr, min, max] = args; + // pick( item1, item2 ... ) + if (!(arr instanceof Array)) { + arr = args; + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + return shuffle(arr, min, max); + }; + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + */ + const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(0, natural(min, max)); + } + }; + /* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ + const Cache = {}; + const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; + }; + + var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } + ]; + /* ## Color @@ -2357,10 +6690,6 @@ var Mock = (function () { return color.toUpperCase() */ - // http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - // https://github.com/devongovett/color-generator/blob/master/index.js - // 随机生成一个有吸引力的颜色。 - let _hue; function _goldenRatioColor(saturation, value) { let _goldenRatio = 0.618033988749895; @@ -2371,41 +6700,38 @@ var Mock = (function () { if (typeof saturation !== "number") saturation = 0.5; if (typeof value !== "number") value = 0.95; - return [_hue * 360, saturation * 100, value * 100]; + return color$1.hsv(_hue * 360, saturation * 100, value * 100); } - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 + // 中国色 数据来自于 http://zhongguose.com + + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 function color(name) { if (name || DICT$1[name]) return DICT$1[name].nicer; - return hex(); + return pick(RandomColor).hex; } // #DAC0DE function hex() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); - return hex; + return hsv.hex(); } // rgb(128,255,255) function rgb() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; + return hsv.hsv().string(); } // rgba(128,255,255,0.3) function rgba() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); } // hsl(300,80%,90%) function hsl() { var hsv = _goldenRatioColor(); - var hsl = hsv2hsl(hsv); - return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; + return hsv.hsl().string(); } var firstName$1 = { @@ -2648,105 +6974,30 @@ var Mock = (function () { clastName: clastName$1 }; - /* - ## Helpers - */ - const upper = function (str) { - return (str + "").toUpperCase(); - }; - const lower = function (str) { - return (str + "").toLowerCase(); - }; - // 从数组中随机选取一个元素,并返回。 - const pick = function (...args) { - let [arr, min, max] = args; - // pick( item1, item2 ... ) - if (!(arr instanceof Array)) { - arr = args; - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max); - }; - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) - */ - const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; - /* falls through */ - case 3: - min = parseInt(min, 10); - max = parseInt(max, 10); - return result.slice(0, natural(min, max)); - } - }; - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - const order = function order(array) { - order.cache = order.cache || {}; - - if (arguments.length > 1) array = [].slice.call(arguments, 0); - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; - }; - /* ## Name [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) */ let { firstName, lastName, cfirstName, clastName } = Name; + // 随机生成一个常见的英文名。 function first() { var names = firstName.male.concat(); return pick(names); } + // 随机生成一个常见的英文姓。 function last() { return pick(lastName); } + // 随机生成一个常见的英文姓名。 function name(middle) { middle = middle ? ` ${first()} ` : " "; return `${first()}${middle}${last()}`; } + /* 随机生成一个常见的中文姓。 [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) diff --git a/dist/mock.js b/dist/mock.js index a55764ca..696dd9f5 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -832,7 +832,7 @@ function copyObject(source, props, object, customizer) { } /* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax = Math.max; +var nativeMax$1 = Math.max; /** * A specialized version of `baseRest` which transforms the rest array. @@ -844,11 +844,11 @@ var nativeMax = Math.max; * @returns {Function} Returns the new function. */ function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); return function() { var args = arguments, index = -1, - length = nativeMax(args.length - start, 0), + length = nativeMax$1(args.length - start, 0), array = Array(length); while (++index < length) { @@ -1895,6 +1895,101 @@ function random(lower, upper, floating) { return baseRandom(lower, upper); } +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; +} + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range$1 = createRange(); + /** * A specialized version of `_.shuffle` which mutates and sets the size of `array`. * @@ -2047,162 +2142,2219 @@ function values(obj) { } function noop() {} -var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc -}); +var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc +}); + +// 返回一个随机的整数。 +const integer = function (min, max) { + return random(min, max, false); +}; +const natural = function (min, max) { + return Math.abs(integer(min, max)); +}; + +const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); +}; + +const boolean$1 = function (min, max, cur) { + //! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; +}; + +const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", +}; +pools.alpha = pools.lower + pools.upper; +pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + +const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); +}; + +const string$1 = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map(() => character(pool)).join(""); +}; + +const float = function (min, max, dmin, dmax) { + let dcount = random(dmin, dmax, false); + return random(min, max, dcount); +}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); +}; + +var simpleSwizzle = createCommonjsModule(function (module) { + + + +var concat = Array.prototype.concat; +var slice = Array.prototype.slice; + +var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; +}; + +swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; +}; +}); + +var colorString = createCommonjsModule(function (module) { +/* MIT license */ + + + +var reverseNames = {}; + +// create a list of reverse color names +for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } +} + +var cs = module.exports = { + to: {}, + get: {} +}; + +cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; +}; + +cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; +}; + +cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; +}; + +cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; +}; + +cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); +}; + +cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; +}; + +cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; +}; + +cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; +}; + +// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax +// (hwb have alpha optional & 1 is default value) +cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; +}; + +cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; + +// helpers +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} + +function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; +} +}); +colorString.to; +colorString.get; + +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var conversions = createCommonjsModule(function (module) { +/* MIT license */ + + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return colorName[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; +}); +conversions.rgb; +conversions.hsl; +conversions.hsv; +conversions.hwb; +conversions.cmyk; +conversions.xyz; +conversions.lab; +conversions.lch; +conversions.hex; +conversions.keyword; +conversions.ansi16; +conversions.ansi256; +conversions.hcg; +conversions.apple; +conversions.gray; + +/* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + +var convert$1 = {}; + +var models = Object.keys(conversions); + +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +var colorConvert = convert$1; + +var _slice = [].slice; + +var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' +]; + +var hashedModelKeys = {}; +Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; +}); + +var limiters = {}; + +function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } +} + +Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, -const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); -}; -// 返回一个随机的整数。 -const integer = function (min, max) { - return random(min, max, false); -}; -const natural = function (min, max) { - return Math.abs(integer(min, max)); -}; + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); -const boolean$1 = function (min, max, cur) { - if (cur) { - min = isNumber(min) ? parseInt(min, 10) : 1; - max = isNumber(max) ? parseInt(max, 10) : 1; - return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - } - return Math.random() >= 0.5; -}; + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } -const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", -}; -pools.alpha = pools.lower + pools.upper; -pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + return (lum2 + 0.05) / (lum1 + 0.05); + }, -const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); -}; + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } -const string$1 = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map((i) => character(pool)).join(""); -}; + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, -const range$1 = function (...args) { - // range( stop ) - let start, stop, step; - if (arguments.length <= 1) { - [stop] = args; - return [...Array(stop).keys()]; - } + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, - // range( start, stop ,step=1) - // range(10,20,3) = [10,13,16,19] - [start, stop, step = 1] = args; - let arrayLength = Math.ceil((stop - start) / step); - return [...Array(arrayLength).keys()].map((index) => { - return start + index * step; - }); + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } }; -const float = function (min, max, dmin, dmax) { - let dcount = random(dmin, dmax, false); +// model conversion methods and static constructors +Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } - return random(min, max, dcount); -}; + var channels = colorConvert[model].channels; -/* - ## Color Convert + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 -*/ -function hsv2rgb(hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; + if (arguments.length) { + return new Color(arguments, model); + } - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - s * f); - var t = 255 * v * (1 - s * (1 - f)); + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; +}); - v = 255 * v; +function roundTo(num, places) { + return Number(num.toFixed(places)); +} - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } +function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; } -function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, - l; - l = (2 - s) * v; - sl = s * v; - sl /= l <= 1 ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; + +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; +} + +function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; } -// http://www.140byt.es/keywords/color -function rgb2hex(a, b, c) { - return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); + +function assertArray(val) { + return Array.isArray(val) ? val : [val]; +} + +function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; } +var color$1 = Color; + /* ## Color 字典数据 @@ -2280,6 +4432,2187 @@ var DICT$1 = { }, }; +/* + ## Helpers +*/ + +const upper = function (str) { + return (str + "").toUpperCase(); +}; + +const lower = function (str) { + return (str + "").toLowerCase(); +}; + +// 从数组中随机选取一个元素,并返回。 +const pick = function (...args) { + let [arr, min, max] = args; + // pick( item1, item2 ... ) + if (!(arr instanceof Array)) { + arr = args; + min = 1; + max = 1; + } else { + // pick( [ item1, item2 ... ] ) + if (min === undefined) min = 1; + // pick( [ item1, item2 ... ], count ) + if (max === undefined) max = min; + } + if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + return shuffle(arr, min, max); +}; +/* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. +*/ +const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(0, natural(min, max)); + } +}; +/* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ +const Cache = {}; +const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; +}; + +var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } +]; + /* ## Color @@ -2354,10 +6687,6 @@ var DICT$1 = { return color.toUpperCase() */ -// http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ -// https://github.com/devongovett/color-generator/blob/master/index.js -// 随机生成一个有吸引力的颜色。 - let _hue; function _goldenRatioColor(saturation, value) { let _goldenRatio = 0.618033988749895; @@ -2368,41 +6697,38 @@ function _goldenRatioColor(saturation, value) { if (typeof saturation !== "number") saturation = 0.5; if (typeof value !== "number") value = 0.95; - return [_hue * 360, saturation * 100, value * 100]; + return color$1.hsv(_hue * 360, saturation * 100, value * 100); } -// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 +// 中国色 数据来自于 http://zhongguose.com + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 function color(name) { if (name || DICT$1[name]) return DICT$1[name].nicer; - return hex(); + return pick(RandomColor).hex; } // #DAC0DE function hex() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); - return hex; + return hsv.hex(); } // rgb(128,255,255) function rgb() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; + return hsv.hsv().string(); } // rgba(128,255,255,0.3) function rgba() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); } // hsl(300,80%,90%) function hsl() { var hsv = _goldenRatioColor(); - var hsl = hsv2hsl(hsv); - return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; + return hsv.hsl().string(); } var firstName$1 = { @@ -2645,105 +6971,30 @@ var Name = { clastName: clastName$1 }; -/* - ## Helpers -*/ -const upper = function (str) { - return (str + "").toUpperCase(); -}; -const lower = function (str) { - return (str + "").toLowerCase(); -}; -// 从数组中随机选取一个元素,并返回。 -const pick = function (...args) { - let [arr, min, max] = args; - // pick( item1, item2 ... ) - if (!(arr instanceof Array)) { - arr = args; - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max); -}; -/* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) -*/ -const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; - /* falls through */ - case 3: - min = parseInt(min, 10); - max = parseInt(max, 10); - return result.slice(0, natural(min, max)); - } -}; -/* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ -const order = function order(array) { - order.cache = order.cache || {}; - - if (arguments.length > 1) array = [].slice.call(arguments, 0); - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (order.cache[templatePath] = order.cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; -}; - /* ## Name [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) */ let { firstName, lastName, cfirstName, clastName } = Name; + // 随机生成一个常见的英文名。 function first() { var names = firstName.male.concat(); return pick(names); } + // 随机生成一个常见的英文姓。 function last() { return pick(lastName); } + // 随机生成一个常见的英文姓名。 function name(middle) { middle = middle ? ` ${first()} ` : " "; return `${first()}${middle}${last()}`; } + /* 随机生成一个常见的中文姓。 [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) diff --git a/package.json b/package.json index 3f0b65a0..0e83b3ee 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "docs": "docsify serve docs" }, "dependencies": { + "color": "^3.1.3", "lodash-es": "^4.17.21", "uuid": "^8.3.2" }, diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js index 05c3e8a6..d6614664 100644 --- a/src/mock/random/basic/boolean.js +++ b/src/mock/random/basic/boolean.js @@ -1,10 +1,14 @@ -import { isNumber } from "./number.js"; +import { random } from "lodash-es"; const boolean = function (min, max, cur) { + //! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } if (cur) { - min = isNumber(min) ? parseInt(min, 10) : 1; - max = isNumber(max) ? parseInt(max, 10) : 1; - return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + return random(0, min + max) > min ? !cur : cur; } - return Math.random() >= 0.5; + return random(10, -10) > 0; }; export { boolean, boolean as bool }; diff --git a/src/mock/random/basic/float.js b/src/mock/random/basic/float.js index 115b8c95..6119a103 100644 --- a/src/mock/random/basic/float.js +++ b/src/mock/random/basic/float.js @@ -1,7 +1,6 @@ import { random } from "lodash-es"; const float = function (min, max, dmin, dmax) { let dcount = random(dmin, dmax, false); - return random(min, max, dcount); }; export { float }; diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index 18babb7b..2f966d4a 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -1,6 +1,3 @@ -const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); -}; import { random } from "lodash-es"; // 返回一个随机的整数。 const integer = function (min, max) { @@ -9,4 +6,8 @@ const integer = function (min, max) { const natural = function (min, max) { return Math.abs(integer(min, max)); }; + +const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); +}; export { integer, isNumber, random, natural, integer as int }; diff --git a/src/mock/random/basic/range.js b/src/mock/random/basic/range.js index 4115fcdb..5ec2c10c 100644 --- a/src/mock/random/basic/range.js +++ b/src/mock/random/basic/range.js @@ -1,17 +1,17 @@ -const range = function (...args) { - // range( stop ) - let start, stop, step; - if (arguments.length <= 1) { - [stop] = args; - return [...Array(stop).keys()]; - } +// const range = function (...args) { +// // range( stop ) +// let start, stop, step; +// if (arguments.length <= 1) { +// [stop] = args; +// return [...Array(stop).keys()]; +// } - // range( start, stop ,step=1) - // range(10,20,3) = [10,13,16,19] - [start, stop, step = 1] = args; - let arrayLength = Math.ceil((stop - start) / step); - return [...Array(arrayLength).keys()].map((index) => { - return start + index * step; - }); -}; -export { range }; +// // range( start, stop ,step=1) +// // range(10,20,3) = [10,13,16,19] +// [start, stop, step = 1] = args; +// let arrayLength = Math.ceil((stop - start) / step); +// return [...Array(arrayLength).keys()].map((index) => { +// return start + index * step; +// }); +// }; +export { range } from "lodash-es"; diff --git a/src/mock/random/basic/string.js b/src/mock/random/basic/string.js index 37d73d20..1c811bfa 100644 --- a/src/mock/random/basic/string.js +++ b/src/mock/random/basic/string.js @@ -25,6 +25,6 @@ const string = function (...args) { len = natural(min, max); break; } - return [...Array(len).keys()].map((i) => character(pool)).join(""); + return [...Array(len).keys()].map(() => character(pool)).join(""); }; export { string, string as str }; diff --git a/src/mock/random/color.js b/src/mock/random/color.js index 9bb97087..570a2583 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -71,13 +71,10 @@ color = "#" + ("000000" + color).slice(-6) return color.toUpperCase() */ - -import { hsv2hsl, hsv2rgb, rgb2hex } from "./color_convert.js"; -import DICT from "./color_dict.js"; - -// http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ -// https://github.com/devongovett/color-generator/blob/master/index.js -// 随机生成一个有吸引力的颜色。 +import Color from "color"; //使用 color 这个库进行颜色转换 +import DICT from "./color/color_dict.js"; +import { pick } from "./helper.js"; +import RandomColor from "./color/color_dict_cn.json"; let _hue; function _goldenRatioColor(saturation, value) { @@ -89,40 +86,37 @@ function _goldenRatioColor(saturation, value) { if (typeof saturation !== "number") saturation = 0.5; if (typeof value !== "number") value = 0.95; - return [_hue * 360, saturation * 100, value * 100]; + return Color.hsv(_hue * 360, saturation * 100, value * 100); } -// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB'。 +// 中国色 数据来自于 http://zhongguose.com + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 function color(name) { if (name || DICT[name]) return DICT[name].nicer; - return hex(); + return pick(RandomColor).hex; } // #DAC0DE function hex() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - var hex = rgb2hex(rgb[0], rgb[1], rgb[2]); - return hex; + return hsv.hex(); } // rgb(128,255,255) function rgb() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgb(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ")"; + return hsv.hsv().string(); } // rgba(128,255,255,0.3) function rgba() { var hsv = _goldenRatioColor(); - var rgb = hsv2rgb(hsv); - return "rgba(" + parseInt(rgb[0], 10) + ", " + parseInt(rgb[1], 10) + ", " + parseInt(rgb[2], 10) + ", " + Math.random().toFixed(2) + ")"; + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); } // hsl(300,80%,90%) function hsl() { var hsv = _goldenRatioColor(); - var hsl = hsv2hsl(hsv); - return "hsl(" + parseInt(hsl[0], 10) + ", " + parseInt(hsl[1], 10) + ", " + parseInt(hsl[2], 10) + ")"; + return hsv.hsl().string(); } export { color, hex, rgb, rgba, hsl, _goldenRatioColor }; diff --git a/src/mock/random/color_dict.js b/src/mock/random/color/color_dict.js similarity index 100% rename from src/mock/random/color_dict.js rename to src/mock/random/color/color_dict.js diff --git a/src/mock/random/color/color_dict_cn.json b/src/mock/random/color/color_dict_cn.json new file mode 100644 index 00000000..811471a8 --- /dev/null +++ b/src/mock/random/color/color_dict_cn.json @@ -0,0 +1 @@ +[{"hex":"#5c2223","name":"暗玉紫"},{"hex":"#eea2a4","name":"牡丹粉红"},{"hex":"#5a191b","name":"栗紫"},{"hex":"#f07c82","name":"香叶红"},{"hex":"#5a1216","name":"葡萄酱紫"},{"hex":"#ed5a65","name":"艳红"},{"hex":"#c04851","name":"玉红"},{"hex":"#ee3f4d","name":"茶花红"},{"hex":"#c02c38","name":"高粱红"},{"hex":"#a7535a","name":"满江红"},{"hex":"#e3b4b8","name":"鼠鼻红"},{"hex":"#f0a1a8","name":"合欢红"},{"hex":"#f1939c","name":"春梅红"},{"hex":"#a61b29","name":"苋菜红"},{"hex":"#894e54","name":"烟红"},{"hex":"#c45a65","name":"莓红"},{"hex":"#d11a2d","name":"鹅冠红"},{"hex":"#c21f30","name":"枫叶红"},{"hex":"#de1c31","name":"唐菖蒲红"},{"hex":"#7c1823","name":"枣红"},{"hex":"#541e24","name":"猪肝紫"},{"hex":"#4c1f24","name":"葡萄紫"},{"hex":"#82202b","name":"暗紫苑红"},{"hex":"#82111f","name":"殷红"},{"hex":"#ef475d","name":"草茉莉红"},{"hex":"#4d1018","name":"酱紫"},{"hex":"#ed556a","name":"山茶红"},{"hex":"#7a7374","name":"锌灰"},{"hex":"#f03752","name":"海棠红"},{"hex":"#e6d2d5","name":"蓟粉红"},{"hex":"#f0c9cf","name":"石蕊红"},{"hex":"#ee2746","name":"淡曙红"},{"hex":"#2b1216","name":"李紫"},{"hex":"#ee4863","name":"石竹红"},{"hex":"#e77c8e","name":"淡茜红"},{"hex":"#500a16","name":"金鱼紫"},{"hex":"#c27c88","name":"山黎豆红"},{"hex":"#73575c","name":"鼠背灰"},{"hex":"#ee4866","name":"淡蕊香红"},{"hex":"#621624","name":"甘蔗紫"},{"hex":"#ce5777","name":"月季红"},{"hex":"#cc163a","name":"尖晶玉红"},{"hex":"#f1c4cd","name":"水红"},{"hex":"#eeb8c3","name":"姜红"},{"hex":"#856d72","name":"芦灰"},{"hex":"#2d0c13","name":"茄皮紫"},{"hex":"#36282b","name":"苍蝇灰"},{"hex":"#bf3553","name":"锦葵红"},{"hex":"#ec9bad","name":"粉团花红"},{"hex":"#63071c","name":"石竹紫"},{"hex":"#30161c","name":"卵石紫"},{"hex":"#eea6b7","name":"晶红"},{"hex":"#e9ccd3","name":"芝兰紫"},{"hex":"#eba0b3","name":"芍药耕红"},{"hex":"#4f383e","name":"暮云灰"},{"hex":"#ed9db2","name":"豇豆红"},{"hex":"#ec8aa4","name":"报春红"},{"hex":"#ec7696","name":"淡绛红"},{"hex":"#ea7293","name":"凤仙花红"},{"hex":"#ef82a0","name":"霞光红"},{"hex":"#ec2c64","name":"喜蛋红"},{"hex":"#eb507e","name":"夹竹桃红"},{"hex":"#eb3c70","name":"松叶牡丹红"},{"hex":"#ea517f","name":"莲瓣红"},{"hex":"#de7897","name":"白芨红"},{"hex":"#b598a1","name":"隐红灰"},{"hex":"#ed2f6a","name":"榲桲红"},{"hex":"#c5708b","name":"酢酱草红"},{"hex":"#33141e","name":"火鹅紫"},{"hex":"#621d34","name":"鹞冠紫"},{"hex":"#ef3473","name":"品红"},{"hex":"#382129","name":"磨石紫"},{"hex":"#310f1b","name":"墨紫"},{"hex":"#381924","name":"檀紫"},{"hex":"#e16c96","name":"初荷红"},{"hex":"#951c48","name":"菜头紫"},{"hex":"#62102e","name":"葡萄酒红"},{"hex":"#e0c8d1","name":"淡青紫"},{"hex":"#d13c74","name":"菠根红"},{"hex":"#4b1e2f","name":"海象紫"},{"hex":"#ec4e8a","name":"兔眼红"},{"hex":"#de3f7c","name":"嫩菱红"},{"hex":"#a8456b","name":"洋葱紫"},{"hex":"#ce5e8a","name":"吊钟花红"},{"hex":"#461629","name":"绀紫"},{"hex":"#ee2c79","name":"紫荆红"},{"hex":"#ef498b","name":"扁豆花红"},{"hex":"#ede3e7","name":"马鞭草紫"},{"hex":"#ec2d7a","name":"藏花红"},{"hex":"#482936","name":"斑鸠灰"},{"hex":"#440e25","name":"古铜紫"},{"hex":"#d2568c","name":"丹紫红"},{"hex":"#e9d7df","name":"丁香淡紫"},{"hex":"#d2357d","name":"玫瑰红"},{"hex":"#36292f","name":"古鼎灰"},{"hex":"#d276a3","name":"菱锰红"},{"hex":"#c06f98","name":"樱草紫"},{"hex":"#cc5595","name":"龙须红"},{"hex":"#c35691","name":"电气石红"},{"hex":"#ba2f7b","name":"玫瑰紫"},{"hex":"#9b1e64","name":"苋菜紫"},{"hex":"#5d3f51","name":"紫灰"},{"hex":"#4e2a40","name":"龙睛鱼紫"},{"hex":"#bc84a8","name":"青蛤壳紫"},{"hex":"#c08eaf","name":"萝兰紫"},{"hex":"#411c35","name":"荸荠紫"},{"hex":"#ad6598","name":"豆蔻紫"},{"hex":"#a35c8f","name":"扁豆紫"},{"hex":"#681752","name":"牵牛紫"},{"hex":"#894276","name":"芓紫"},{"hex":"#7e2065","name":"葛巾紫"},{"hex":"#8b2671","name":"青莲"},{"hex":"#983680","name":"芥花紫"},{"hex":"#c8adc4","name":"凤信紫"},{"hex":"#1c0d1a","name":"深牵牛紫"},{"hex":"#7e1671","name":"魏紫"},{"hex":"#1e131d","name":"乌梅紫"},{"hex":"#813c85","name":"桔梗紫"},{"hex":"#d1c2d3","name":"淡牵牛紫"},{"hex":"#3e3841","name":"剑锋紫"},{"hex":"#815c94","name":"蕈紫"},{"hex":"#806d9e","name":"槿紫"},{"hex":"#e2e1e4","name":"芡食白"},{"hex":"#322f3b","name":"龙葵紫"},{"hex":"#8076a3","name":"藤萝紫"},{"hex":"#35333c","name":"沙鱼灰"},{"hex":"#22202e","name":"暗龙胆紫"},{"hex":"#131124","name":"暗蓝紫"},{"hex":"#302f4b","name":"野葡萄紫"},{"hex":"#525288","name":"野菊紫"},{"hex":"#2f2f35","name":"水牛灰"},{"hex":"#ccccd6","name":"远山紫"},{"hex":"#74759b","name":"螺甸紫"},{"hex":"#1f2040","name":"晶石紫"},{"hex":"#2e317c","name":"满天星紫"},{"hex":"#a7a8bd","name":"淡蓝紫"},{"hex":"#61649f","name":"山梗紫"},{"hex":"#2d2e36","name":"牛角灰"},{"hex":"#5e616d","name":"鱼尾灰"},{"hex":"#47484c","name":"瓦罐灰"},{"hex":"#0f1423","name":"钢蓝"},{"hex":"#131824","name":"燕颔蓝"},{"hex":"#475164","name":"鲸鱼灰"},{"hex":"#2b333e","name":"青灰"},{"hex":"#1c2938","name":"鸽蓝"},{"hex":"#101f30","name":"暗蓝"},{"hex":"#142334","name":"钢青"},{"hex":"#15559a","name":"海涛蓝"},{"hex":"#0f59a4","name":"飞燕草蓝"},{"hex":"#1661ab","name":"靛青"},{"hex":"#3170a7","name":"安安蓝"},{"hex":"#346c9c","name":"海军蓝"},{"hex":"#2775b6","name":"景泰蓝"},{"hex":"#2b73af","name":"品蓝"},{"hex":"#2474b5","name":"尼罗蓝"},{"hex":"#4e7ca1","name":"蝶翅蓝"},{"hex":"#2376b7","name":"花青"},{"hex":"#144a74","name":"鷃蓝"},{"hex":"#93b5cf","name":"星蓝"},{"hex":"#2177b8","name":"虹蓝"},{"hex":"#126bae","name":"柏林蓝"},{"hex":"#1772b4","name":"群青"},{"hex":"#baccd9","name":"云水蓝"},{"hex":"#619ac3","name":"羽扇豆蓝"},{"hex":"#495c69","name":"战舰灰"},{"hex":"#8fb2c9","name":"晴山蓝"},{"hex":"#5698c3","name":"睛蓝"},{"hex":"#11659a","name":"搪磁蓝"},{"hex":"#2983bb","name":"潮蓝"},{"hex":"#1677b3","name":"天蓝"},{"hex":"#c4cbcf","name":"大理石灰"},{"hex":"#1177b0","name":"牵牛花蓝"},{"hex":"#2486b9","name":"宝石蓝"},{"hex":"#5e7987","name":"淡蓝灰"},{"hex":"#74787a","name":"嫩灰"},{"hex":"#cdd1d3","name":"银鱼白"},{"hex":"#1781b5","name":"釉蓝"},{"hex":"#66a9c9","name":"涧石蓝"},{"hex":"#d0dfe6","name":"远天蓝"},{"hex":"#2f90b9","name":"云山蓝"},{"hex":"#8abcd1","name":"秋波蓝"},{"hex":"#c3d7df","name":"井天蓝"},{"hex":"#158bb8","name":"鸢尾蓝"},{"hex":"#d8e3e7","name":"云峰白"},{"hex":"#b2bbbe","name":"星灰"},{"hex":"#1a94bc","name":"钴蓝"},{"hex":"#5cb3cc","name":"碧青"},{"hex":"#134857","name":"苍蓝"},{"hex":"#132c33","name":"深灰蓝"},{"hex":"#21373d","name":"灰蓝"},{"hex":"#b0d5df","name":"湖水蓝"},{"hex":"#22a2c3","name":"海青"},{"hex":"#474b4c","name":"黄昏灰"},{"hex":"#63bbd0","name":"霁青"},{"hex":"#126e82","name":"玉鈫蓝"},{"hex":"#0f95b0","name":"胆矾蓝"},{"hex":"#1491a8","name":"樫鸟蓝"},{"hex":"#c7d2d4","name":"鸥蓝"},{"hex":"#1e9eb3","name":"翠蓝"},{"hex":"#3b818c","name":"蜻蜓蓝"},{"hex":"#0eb0c9","name":"孔雀蓝"},{"hex":"#29b7cb","name":"蔚蓝"},{"hex":"#51c4d3","name":"瀑布蓝"},{"hex":"#7cabb1","name":"闪蓝"},{"hex":"#10aec2","name":"甸子蓝"},{"hex":"#648e93","name":"晚波蓝"},{"hex":"#93d5dc","name":"清水蓝"},{"hex":"#617172","name":"夏云灰"},{"hex":"#c6e6e8","name":"海天蓝"},{"hex":"#869d9d","name":"虾壳青"},{"hex":"#57c3c2","name":"石绿"},{"hex":"#c4d7d6","name":"穹灰"},{"hex":"#12aa9c","name":"美蝶绿"},{"hex":"#737c7b","name":"垩灰"},{"hex":"#12a182","name":"蓝绿"},{"hex":"#1ba784","name":"竹绿"},{"hex":"#428675","name":"亚丁绿"},{"hex":"#c0c4c3","name":"月影白"},{"hex":"#248067","name":"海王绿"},{"hex":"#1a3b32","name":"深海绿"},{"hex":"#314a43","name":"绿灰"},{"hex":"#2c9678","name":"青矾绿"},{"hex":"#223e36","name":"苍绿"},{"hex":"#497568","name":"飞泉绿"},{"hex":"#141e1b","name":"莽丛绿"},{"hex":"#69a794","name":"梧枝绿"},{"hex":"#2bae85","name":"铜绿"},{"hex":"#9abeaf","name":"草原远绿"},{"hex":"#45b787","name":"蛙绿"},{"hex":"#92b3a5","name":"浪花绿"},{"hex":"#1f2623","name":"苷蓝绿"},{"hex":"#83cbac","name":"粉绿"},{"hex":"#70887d","name":"淡绿灰"},{"hex":"#55bb8a","name":"麦苗绿"},{"hex":"#20a162","name":"翠绿"},{"hex":"#40a070","name":"葱绿"},{"hex":"#1a6840","name":"荷叶绿"},{"hex":"#61ac85","name":"淡绿"},{"hex":"#68b88e","name":"田园绿"},{"hex":"#a4cab6","name":"玉簪绿"},{"hex":"#3c9566","name":"蟾绿"},{"hex":"#5dbe8a","name":"蔻梢绿"},{"hex":"#207f4c","name":"薄荷绿"},{"hex":"#eef7f2","name":"月白"},{"hex":"#579572","name":"蛋白石绿"},{"hex":"#b9dec9","name":"竹篁绿"},{"hex":"#229453","name":"孔雀绿"},{"hex":"#20894d","name":"宫殿绿"},{"hex":"#15231b","name":"云杉绿"},{"hex":"#66c18c","name":"毛绿"},{"hex":"#a4aca7","name":"冰山蓝"},{"hex":"#8a988e","name":"明灰"},{"hex":"#9eccab","name":"明绿"},{"hex":"#83a78d","name":"松霜绿"},{"hex":"#485b4d","name":"白屈菜绿"},{"hex":"#5d655f","name":"狼烟灰"},{"hex":"#6e8b74","name":"瓦松绿"},{"hex":"#2b312c","name":"槲寄生绿"},{"hex":"#c6dfc8","name":"淡翠绿"},{"hex":"#41b349","name":"玉髓绿"},{"hex":"#43b244","name":"鲜绿"},{"hex":"#253d24","name":"油绿"},{"hex":"#41ae3c","name":"宝石绿"},{"hex":"#add5a2","name":"嘉陵水绿"},{"hex":"#5e665b","name":"田螺绿"},{"hex":"#8cc269","name":"水绿"},{"hex":"#5bae23","name":"鹦鹉绿"},{"hex":"#dfecd5","name":"艾背绿"},{"hex":"#cad3c3","name":"艾绿"},{"hex":"#9fa39a","name":"镍灰"},{"hex":"#b2cf87","name":"橄榄石绿"},{"hex":"#96c24e","name":"芽绿"},{"hex":"#f0f5e5","name":"嫩菊绿"},{"hex":"#b7d07a","name":"芦苇绿"},{"hex":"#d0deaa","name":"姚黄"},{"hex":"#373834","name":"蒽油绿"},{"hex":"#bacf65","name":"苹果绿"},{"hex":"#e2e7bf","name":"海沬绿"},{"hex":"#bec936","name":"橄榄黄绿"},{"hex":"#d2d97a","name":"槐花黄绿"},{"hex":"#e2d849","name":"蝶黄"},{"hex":"#fffef8","name":"象牙白"},{"hex":"#5e5314","name":"橄榄绿"},{"hex":"#fffef9","name":"雪白"},{"hex":"#ad9e5f","name":"淡灰绿"},{"hex":"#fed71a","name":"佛手黄"},{"hex":"#f9f4dc","name":"乳白"},{"hex":"#e4bf11","name":"香蕉黄"},{"hex":"#d2b116","name":"新禾绿"},{"hex":"#fbda41","name":"油菜花黄"},{"hex":"#eed045","name":"秋葵黄"},{"hex":"#f1ca17","name":"柚黄"},{"hex":"#d2b42c","name":"草黄"},{"hex":"#f2ce2b","name":"硫华黄"},{"hex":"#e2c027","name":"姜黄"},{"hex":"#645822","name":"潭水绿"},{"hex":"#fcd217","name":"金瓜黄"},{"hex":"#f8df70","name":"麦秆黄"},{"hex":"#dfc243","name":"蒿黄"},{"hex":"#f8df72","name":"茉莉黄"},{"hex":"#ffd111","name":"藤黄"},{"hex":"#ddc871","name":"芒果黄"},{"hex":"#fffefa","name":"海参灰"},{"hex":"#867018","name":"碧螺春绿"},{"hex":"#887322","name":"苔绿"},{"hex":"#fcd337","name":"柠檬黄"},{"hex":"#8e804b","name":"草灰绿"},{"hex":"#fecc11","name":"向日葵黄"},{"hex":"#fccb16","name":"素馨黄"},{"hex":"#ffc90c","name":"乳鸭黄"},{"hex":"#b7ae8f","name":"月灰"},{"hex":"#f8d86a","name":"葵扇黄"},{"hex":"#fbcd31","name":"大豆黄"},{"hex":"#fcc307","name":"金盏黄"},{"hex":"#e9ddb6","name":"菊蕾白"},{"hex":"#fcc515","name":"黄连黄"},{"hex":"#f7e8aa","name":"杏仁黄"},{"hex":"#e8b004","name":"谷黄"},{"hex":"#f9c116","name":"木瓜黄"},{"hex":"#f9d770","name":"淡茧黄"},{"hex":"#fbc82f","name":"雅梨黄"},{"hex":"#f1f0ed","name":"银白"},{"hex":"#5b4913","name":"棕榈绿"},{"hex":"#f6c430","name":"鹦鹉冠黄"},{"hex":"#b78d12","name":"枯绿"},{"hex":"#f9bd10","name":"浅烙黄"},{"hex":"#f9d367","name":"淡密黄"},{"hex":"#d9a40e","name":"芥黄"},{"hex":"#ebb10d","name":"栀子黄"},{"hex":"#584717","name":"暗海水绿"},{"hex":"#f7de98","name":"篾黄"},{"hex":"#f9f1db","name":"蚌肉白"},{"hex":"#f4ce69","name":"炒米黄"},{"hex":"#feba07","name":"琥珀黄"},{"hex":"#8a6913","name":"灰绿"},{"hex":"#876818","name":"粽叶绿"},{"hex":"#b6a476","name":"尘灰"},{"hex":"#fcb70a","name":"鼬黄"},{"hex":"#f0d695","name":"象牙黄"},{"hex":"#87723e","name":"鲛青"},{"hex":"#f8e8c1","name":"豆汁黄"},{"hex":"#d6a01d","name":"土黄"},{"hex":"#f7da94","name":"香水玫瑰黄"},{"hex":"#eaad1a","name":"虎皮黄"},{"hex":"#fbb612","name":"鸡蛋黄"},{"hex":"#b5aa90","name":"银鼠灰"},{"hex":"#f7f4ed","name":"鱼肚白"},{"hex":"#f8bc31","name":"初熟杏黄"},{"hex":"#b78b26","name":"山鸡黄"},{"hex":"#e5d3aa","name":"莲子白"},{"hex":"#695e45","name":"蟹壳灰"},{"hex":"#e5b751","name":"沙石黄"},{"hex":"#f3bf4c","name":"甘草黄"},{"hex":"#685e48","name":"燕羽灰"},{"hex":"#fbb929","name":"鹅掌黄"},{"hex":"#f9d27d","name":"麦芽糖黄"},{"hex":"#e2c17c","name":"浅驼色"},{"hex":"#b4a992","name":"百灵鸟灰"},{"hex":"#f6dead","name":"酪黄"},{"hex":"#f2e6ce","name":"荔肉白"},{"hex":"#f8e0b0","name":"淡肉色"},{"hex":"#393733","name":"河豚灰"},{"hex":"#835e1d","name":"蜴蜊绿"},{"hex":"#f8f4ed","name":"汉白玉"},{"hex":"#fca104","name":"橙皮黄"},{"hex":"#815f25","name":"莱阳梨黄"},{"hex":"#fca106","name":"枇杷黄"},{"hex":"#ffa60f","name":"金叶黄"},{"hex":"#806332","name":"苍黄"},{"hex":"#fbf2e3","name":"粉白"},{"hex":"#fba414","name":"淡橘橙"},{"hex":"#e4dfd7","name":"珍珠灰"},{"hex":"#826b48","name":"龟背黄"},{"hex":"#dad4cb","name":"浅灰"},{"hex":"#bbb5ac","name":"铅灰"},{"hex":"#bbb5ac","name":"中灰"},{"hex":"#ff9900","name":"雄黄"},{"hex":"#fbb957","name":"蜜黄"},{"hex":"#dc9123","name":"风帆黄"},{"hex":"#c09351","name":"桂皮淡棕"},{"hex":"#f4a83a","name":"金莺黄"},{"hex":"#f7c173","name":"肉色"},{"hex":"#e7a23f","name":"凋叶棕"},{"hex":"#533c1b","name":"古铜绿"},{"hex":"#f9e8d0","name":"落英淡粉"},{"hex":"#de9e44","name":"软木黄"},{"hex":"#f9cb8b","name":"瓜瓤粉"},{"hex":"#f9a633","name":"榴萼黄"},{"hex":"#daa45a","name":"玳瑁黄"},{"hex":"#553b18","name":"焦茶绿"},{"hex":"#513c20","name":"蟹壳绿"},{"hex":"#986524","name":"山鸡褐"},{"hex":"#97846c","name":"猴毛灰"},{"hex":"#e3bd8d","name":"鹿角棕"},{"hex":"#4d4030","name":"淡松烟"},{"hex":"#fb8b05","name":"万寿菊黄"},{"hex":"#f8c387","name":"蛋壳黄"},{"hex":"#f28e16","name":"杏黄"},{"hex":"#503e2a","name":"橄榄灰"},{"hex":"#4a4035","name":"鹤灰"},{"hex":"#cfccc9","name":"玛瑙灰"},{"hex":"#c1b2a3","name":"淡银灰"},{"hex":"#867e76","name":"瓦灰"},{"hex":"#847c74","name":"夜灰"},{"hex":"#fc8c23","name":"北瓜黄"},{"hex":"#fbecde","name":"荷花白"},{"hex":"#4f4032","name":"松鼠灰"},{"hex":"#fbeee2","name":"淡米粉"},{"hex":"#81776e","name":"深灰"},{"hex":"#9a8878","name":"海鸥灰"},{"hex":"#5d3d21","name":"茶褐"},{"hex":"#66462a","name":"驼色"},{"hex":"#918072","name":"银灰"},{"hex":"#d99156","name":"鹿皮褐"},{"hex":"#c1651a","name":"槟榔综"},{"hex":"#d4c4b7","name":"晓灰"},{"hex":"#be7e4a","name":"淡赭"},{"hex":"#5c3719","name":"古铜褐"},{"hex":"#de7622","name":"麂棕"},{"hex":"#db8540","name":"醉瓜肉"},{"hex":"#80766e","name":"雁灰"},{"hex":"#f09c5a","name":"鲑鱼红"},{"hex":"#f97d1c","name":"橘橙"},{"hex":"#f26b1f","name":"金黄"},{"hex":"#f8b37f","name":"玫瑰粉"},{"hex":"#fa7e23","name":"美人焦橙"},{"hex":"#f9e9cd","name":"米色"},{"hex":"#b7a091","name":"蛛网灰"},{"hex":"#945833","name":"淡咖啡"},{"hex":"#f0945d","name":"海螺橙"},{"hex":"#964d22","name":"岩石棕"},{"hex":"#954416","name":"芒果棕"},{"hex":"#e16723","name":"陶瓷红"},{"hex":"#fc7930","name":"菠萝红"},{"hex":"#cf7543","name":"余烬红"},{"hex":"#f86b1d","name":"金莲花橙"},{"hex":"#cd6227","name":"火砖红"},{"hex":"#f6dcce","name":"初桃粉红"},{"hex":"#d85916","name":"铁棕"},{"hex":"#f7cfba","name":"介壳淡粉红"},{"hex":"#f27635","name":"蟹壳红"},{"hex":"#e46828","name":"金驼"},{"hex":"#fc6315","name":"燕颔红"},{"hex":"#b7511d","name":"淡可可棕"},{"hex":"#ea8958","name":"晨曦红"},{"hex":"#e8b49a","name":"玉粉红"},{"hex":"#fb9968","name":"野蔷薇红"},{"hex":"#edc3ae","name":"藕荷"},{"hex":"#363433","name":"长石灰"},{"hex":"#8b614d","name":"中红灰"},{"hex":"#aa6a4c","name":"火泥棕"},{"hex":"#a6522c","name":"绀红"},{"hex":"#fa5d19","name":"莓酱红"},{"hex":"#71361d","name":"丁香棕"},{"hex":"#b89485","name":"淡玫瑰灰"},{"hex":"#f68c60","name":"瓜瓤红"},{"hex":"#f6ad8f","name":"淡藏花红"},{"hex":"#732e12","name":"筍皮棕"},{"hex":"#f7cdbc","name":"润红"},{"hex":"#ef632b","name":"龙睛鱼红"},{"hex":"#8c4b31","name":"淡土黄"},{"hex":"#64483d","name":"珠母灰"},{"hex":"#f9723d","name":"芙蓉红"},{"hex":"#cf4813","name":"落霞红"},{"hex":"#ee8055","name":"法螺红"},{"hex":"#f8ebe6","name":"草珠红"},{"hex":"#753117","name":"咖啡"},{"hex":"#603d30","name":"中灰驼"},{"hex":"#883a1e","name":"椰壳棕"},{"hex":"#b14b28","name":"蟹蝥红"},{"hex":"#873d24","name":"淡豆沙"},{"hex":"#f6cec1","name":"淡桃红"},{"hex":"#5b423a","name":"淡铁灰"},{"hex":"#624941","name":"石板灰"},{"hex":"#673424","name":"淡栗棕"},{"hex":"#f43e06","name":"银朱"},{"hex":"#ef6f48","name":"草莓红"},{"hex":"#f4c7ba","name":"洋水仙红"},{"hex":"#ed5126","name":"朱红"},{"hex":"#f34718","name":"榴花红"},{"hex":"#f2481b","name":"柿红"},{"hex":"#652b1c","name":"可可棕"},{"hex":"#eea08c","name":"淡罂粟红"},{"hex":"#f04b22","name":"大红"},{"hex":"#692a1b","name":"柞叶棕"},{"hex":"#f1441d","name":"蜻蜓红"},{"hex":"#773d31","name":"橡树棕"},{"hex":"#eeaa9c","name":"颊红"},{"hex":"#f0ada0","name":"桃红"},{"hex":"#863020","name":"火岩棕"},{"hex":"#f2e7e5","name":"淡藤萝紫"},{"hex":"#862617","name":"赭石"},{"hex":"#f5391c","name":"铁水红"},{"hex":"#f03f24","name":"胭脂红"},{"hex":"#f33b1f","name":"极光红"},{"hex":"#f23e23","name":"红汞红"},{"hex":"#f13c22","name":"萝卜红"},{"hex":"#f05a46","name":"曲红"},{"hex":"#f17666","name":"谷鞘红"},{"hex":"#f15642","name":"苹果红"},{"hex":"#f25a47","name":"桂红"},{"hex":"#f2b9b2","name":"粉红"},{"hex":"#592620","name":"暗驼棕"},{"hex":"#de2a18","name":"夕阳红"},{"hex":"#ed3321","name":"樱桃红"},{"hex":"#f04a3a","name":"珊瑚红"},{"hex":"#482522","name":"火山棕"},{"hex":"#5c1e19","name":"栗棕"},{"hex":"#d42517","name":"鹤顶红"},{"hex":"#f19790","name":"舌红"},{"hex":"#ab372f","name":"鹅血石红"},{"hex":"#5a1f1b","name":"酱棕"},{"hex":"#ed3b2f","name":"鱼鳃红"},{"hex":"#bdaead","name":"芦穗灰"},{"hex":"#eb261a","name":"丽春红"},{"hex":"#ac1f18","name":"覆盆子红"},{"hex":"#483332","name":"海报灰"},{"hex":"#481e1c","name":"豆沙"},{"hex":"#f1908c","name":"榴子红"},{"hex":"#ec2b24","name":"秋海棠红"},{"hex":"#efafad","name":"无花果红"},{"hex":"#f2cac9","name":"淡绯"},{"hex":"#4b2e2b","name":"玫瑰灰"},{"hex":"#ed4845","name":"淡菽红"},{"hex":"#ed3333","name":"枸枢红"},{"hex":"#5d3131","name":"貂紫"}] \ No newline at end of file diff --git a/src/mock/random/color_convert.js b/src/mock/random/color_convert.js deleted file mode 100644 index 7cda9dbc..00000000 --- a/src/mock/random/color_convert.js +++ /dev/null @@ -1,158 +0,0 @@ -/* - ## Color Convert - - http://blog.csdn.net/idfaya/article/details/6770414 - 颜色空间RGB与HSV(HSL)的转换 -*/ -// https://github.com/harthur/color-convert/blob/master/conversions.js -function rgb2hsl(rgb) { - var r = rgb[0] / 255, - g = rgb[1] / 255, - b = rgb[2] / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, - s, - l; - - if (max == min) h = 0; - else if (r == max) h = (g - b) / delta; - else if (g == max) h = 2 + (b - r) / delta; - else if (b == max) h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) h += 360; - - l = (min + max) / 2; - - if (max == min) s = 0; - else if (l <= 0.5) s = delta / (max + min); - else s = delta / (2 - max - min); - - return [h, s * 100, l * 100]; -} -function rgb2hsv(rgb) { - var r = rgb[0], - g = rgb[1], - b = rgb[2], - min = Math.min(r, g, b), - max = Math.max(r, g, b), - delta = max - min, - h, - s, - v; - - if (max === 0) s = 0; - else s = ((delta / max) * 1000) / 10; - - if (max == min) h = 0; - else if (r == max) h = (g - b) / delta; - else if (g == max) h = 2 + (b - r) / delta; - else if (b == max) h = 4 + (r - g) / delta; - - h = Math.min(h * 60, 360); - - if (h < 0) h += 360; - - v = ((max / 255) * 1000) / 10; - - return [h, s, v]; -} -function hsl2rgb(hsl) { - var h = hsl[0] / 360, - s = hsl[1] / 100, - l = hsl[2] / 100, - t1, - t2, - t3, - rgb, - val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) t2 = l * (1 + s); - else t2 = l + s - l * s; - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + (1 / 3) * -(i - 1); - if (t3 < 0) t3++; - if (t3 > 1) t3--; - - if (6 * t3 < 1) val = t1 + (t2 - t1) * 6 * t3; - else if (2 * t3 < 1) val = t2; - else if (3 * t3 < 2) val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - else val = t1; - - rgb[i] = val * 255; - } - - return rgb; -} -function hsl2hsv(hsl) { - var h = hsl[0], - s = hsl[1] / 100, - l = hsl[2] / 100, - sv, - v; - l *= 2; - s *= l <= 1 ? l : 2 - l; - v = (l + s) / 2; - sv = (2 * s) / (l + s); - return [h, sv * 100, v * 100]; -} -function hsv2rgb(hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - s * f); - var t = 255 * v * (1 - s * (1 - f)); - - v = 255 * v; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -} -function hsv2hsl(hsv) { - var h = hsv[0], - s = hsv[1] / 100, - v = hsv[2] / 100, - sl, - l; - l = (2 - s) * v; - sl = s * v; - sl /= l <= 1 ? l : 2 - l; - l /= 2; - return [h, sl * 100, l * 100]; -} -// http://www.140byt.es/keywords/color -function rgb2hex(a, b, c) { - return "#" + (((((256 + a) << 8) | b) << 8) | c).toString(16).slice(1); -} -function hex2rgb(a) { - a = ("0x" + a.slice(1).replace(a.length > 4 ? a : /./g, "$&$&")) | 0; - return [a >> 16, (a >> 8) & 255, a & 255]; -} -export { rgb2hsl, rgb2hsv, hsl2rgb, hsl2hsv, hsv2hsl, hsv2rgb, rgb2hex, hex2rgb }; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index db500466..948e193b 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -4,12 +4,15 @@ import { natural } from "./basic/number.js"; import { shuffle as _shuffle, capitalize } from "lodash-es"; + const upper = function (str) { return (str + "").toUpperCase(); }; + const lower = function (str) { return (str + "").toLowerCase(); }; + // 从数组中随机选取一个元素,并返回。 const pick = function (...args) { let [arr, min, max] = args; @@ -26,17 +29,11 @@ const pick = function (...args) { } if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; // pick( [ item1, item2 ... ], min, max ) - return this.shuffle(arr, min, max); + return shuffle(arr, min, max); }; /* 打乱数组中元素的顺序,并返回。 Given an array, scramble the order and return it. - - 其他的实现思路: - // https://code.google.com/p/jslibs/wiki/JavascriptTips - result = result.sort(function() { - return Math.random() - 0.5 - }) */ const shuffle = function (arr, min, max) { let result = _shuffle(arr); @@ -45,11 +42,9 @@ const shuffle = function (arr, min, max) { case 1: return result; case 2: - max = min; + max = min; // 这里 max = undefined /* falls through */ case 3: - min = parseInt(min, 10); - max = parseInt(max, 10); return result.slice(0, natural(min, max)); } }; @@ -63,16 +58,16 @@ const shuffle = function (arr, min, max) { 不支持单独调用! */ -const order = function order(array) { - order.cache = order.cache || {}; - - if (arguments.length > 1) array = [].slice.call(arguments, 0); +const Cache = {}; +const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; // options.context.path/templatePath var options = order.options; var templatePath = options.context.templatePath.join("."); - var cache = (order.cache[templatePath] = order.cache[templatePath] || { + var cache = (Cache[templatePath] = Cache[templatePath] || { index: 0, array: array, }); diff --git a/src/mock/random/helper/pick.js b/src/mock/random/helper/pick.js deleted file mode 100644 index e69de29b..00000000 diff --git a/src/mock/random/name.js b/src/mock/random/name.js index 36640ee3..1fd1a9c6 100644 --- a/src/mock/random/name.js +++ b/src/mock/random/name.js @@ -6,20 +6,24 @@ import Name from "./name.json"; let { firstName, lastName, cfirstName, clastName } = Name; import { pick } from "./helper.js"; + // 随机生成一个常见的英文名。 function first() { var names = firstName.male.concat(); return pick(names); } + // 随机生成一个常见的英文姓。 function last() { return pick(lastName); } + // 随机生成一个常见的英文姓名。 function name(middle) { middle = middle ? ` ${first()} ` : " "; return `${first()}${middle}${last()}`; } + /* 随机生成一个常见的中文姓。 [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) diff --git a/yarn.lock b/yarn.lock index c22ad9b4..4139b419 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1121,7 +1121,7 @@ clean-stack@^2.0.0: resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== -color-convert@^1.9.0: +color-convert@^1.9.0, color-convert@^1.9.1: version "1.9.3" resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== @@ -1133,6 +1133,27 @@ color-name@1.1.3: resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.5.4: + version "1.5.5" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" + integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== + dependencies: + color-name "^1.0.0" + simple-swizzle "^0.2.2" + +color@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" + integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== + dependencies: + color-convert "^1.9.1" + color-string "^1.5.4" + colorette@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" @@ -1381,6 +1402,11 @@ inherits@2: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1855,6 +1881,13 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +simple-swizzle@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= + dependencies: + is-arrayish "^0.3.1" + slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" From eac856049ca5464568296b777e765888759ef31a Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 12 Jun 2021 20:31:07 +0800 Subject: [PATCH 09/65] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 16 ++++++---------- dist/mock.js | 16 ++++++---------- src/mock.js | 2 +- src/mock/random/date.js | 4 ++-- src/mock/random/text/text-ch.js | 10 +++------- 5 files changed, 18 insertions(+), 30 deletions(-) diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 4de57be5..d62e06fb 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -11290,8 +11290,8 @@ var Mock = (function () { } function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max); - return _randomDate(); + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); } /* @@ -11435,12 +11435,12 @@ var Mock = (function () { return [...Array(len)].map(() => cword()).join(""); } // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - const DICT_KANZI = + const DICT_HANZI = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; // 随机生成一个或多个汉字。 function cword(...args) { var len = 1, - pool = DICT_KANZI, + pool = DICT_HANZI, min, max; switch (args.length) { @@ -11473,11 +11473,7 @@ var Mock = (function () { const poolLength = pool.length; if (len === 1) return pool.charAt(natural(0, poolLength)); - return [...Array(len)] - .map(() => { - return pool.charAt(natural(0, poolLength)); - }) - .join(""); + return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); } // 协议簇 @@ -14718,7 +14714,7 @@ var Mock = (function () { 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao + https://github.com/KonghaYao/Mock-esm */ var Mock = { Handler: Handler$1, diff --git a/dist/mock.js b/dist/mock.js index 696dd9f5..f3bcdd1a 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -11287,8 +11287,8 @@ function _randomDate(min = new Date(0), max = new Date()) { } function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max); - return _randomDate(); + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); } /* @@ -11432,12 +11432,12 @@ function ctitle(min, max) { return [...Array(len)].map(() => cword()).join(""); } // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm -const DICT_KANZI = +const DICT_HANZI = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; // 随机生成一个或多个汉字。 function cword(...args) { var len = 1, - pool = DICT_KANZI, + pool = DICT_HANZI, min, max; switch (args.length) { @@ -11470,11 +11470,7 @@ function cword(...args) { const poolLength = pool.length; if (len === 1) return pool.charAt(natural(0, poolLength)); - return [...Array(len)] - .map(() => { - return pool.charAt(natural(0, poolLength)); - }) - .join(""); + return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); } // 协议簇 @@ -14715,7 +14711,7 @@ if (typeof window !== "undefined") XHR = MockXMLHttpRequest; 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao + https://github.com/KonghaYao/Mock-esm */ var Mock = { Handler: Handler$1, diff --git a/src/mock.js b/src/mock.js index 62750b95..230683cb 100644 --- a/src/mock.js +++ b/src/mock.js @@ -18,7 +18,7 @@ if (typeof window !== "undefined") XHR = MockXMLHttpRequest; 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao + https://github.com/KonghaYao/ */ var Mock = { Handler, diff --git a/src/mock/random/date.js b/src/mock/random/date.js index 3cba824e..ea9e4c33 100644 --- a/src/mock/random/date.js +++ b/src/mock/random/date.js @@ -70,8 +70,8 @@ function _randomDate(min = new Date(0), max = new Date()) { } function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max); - return _randomDate(); + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); } export { diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js index c38e9423..d5d21013 100644 --- a/src/mock/random/text/text-ch.js +++ b/src/mock/random/text/text-ch.js @@ -17,12 +17,12 @@ function ctitle(min, max) { return [...Array(len)].map(() => cword()).join(""); } // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm -const DICT_KANZI = +const DICT_HANZI = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; // 随机生成一个或多个汉字。 function cword(...args) { var len = 1, - pool = DICT_KANZI, + pool = DICT_HANZI, min, max; switch (args.length) { @@ -55,11 +55,7 @@ function cword(...args) { const poolLength = pool.length; if (len === 1) return pool.charAt(natural(0, poolLength)); - return [...Array(len)] - .map(() => { - return pool.charAt(natural(0, poolLength)); - }) - .join(""); + return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); } export { ctitle, csentence, cparagraph, cword }; From 2f4be389b06838a763b131b4d997fb9f296c68ab Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 12 Jun 2021 20:42:10 +0800 Subject: [PATCH 10/65] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20build=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 14778 +-------------------------------------- dist/mock.js | 14771 +------------------------------------- rollup.config.build.js | 40 + 3 files changed, 51 insertions(+), 29538 deletions(-) create mode 100644 rollup.config.build.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index d62e06fb..c4b41226 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,14778 +1,12 @@ - -(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); -var Mock = (function () { - 'use strict'; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Built-in value references. */ - var Symbol = root.Symbol; - - /** Used for built-in method references. */ - var objectProto$8 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString$1 = objectProto$8.toString; - - /** Built-in value references. */ - var symToStringTag$1 = Symbol ? Symbol.toStringTag : undefined; - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; - } - - /** Used for built-in method references. */ - var objectProto$7 = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto$7.toString; - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** `Object#toString` result references. */ - var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - - /** Built-in value references. */ - var symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** Used as references for various `Number` constants. */ - var INFINITY$1 = 1 / 0; - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; - } - - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/; - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; - } - - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; - - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** Used as references for various `Number` constants. */ - var NAN = 0 / 0; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Built-in method references without a dependency on `root`. */ - var freeParseInt = parseInt; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** `Object#toString` result references. */ - var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** Used to detect overreaching core-js shims. */ - var coreJsData = root['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** Used for built-in method references. */ - var funcProto$1 = Function.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString$1 = funcProto$1.toString; - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used for built-in method references. */ - var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeNow = Date.now; - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER$1 = 9007199254740991; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** Used for built-in method references. */ - var objectProto$5 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax$1 = Math.max; - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER = 9007199254740991; - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** Used for built-in method references. */ - var objectProto$4 = Object.prototype; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** `Object#toString` result references. */ - var argsTag$1 = '[object Arguments]'; - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; - } - - /** Used for built-in method references. */ - var objectProto$3 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - - /** Built-in value references. */ - var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ - function stubFalse() { - return false; - } - - /** Detect free variable `exports`. */ - var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - - /** Built-in value references. */ - var Buffer = moduleExports$1 ? root.Buffer : undefined; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = - typedArrayTags[setTag] = typedArrayTags[stringTag$1] = - typedArrayTags[weakMapTag] = false; - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** Used for built-in method references. */ - var objectProto$2 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeKeys = overArg(Object.keys, Object); - - /** Used for built-in method references. */ - var objectProto$1 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsZWJ$1 = '\\u200d'; - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ - var upperFirst = createCaseFirst('toUpperCase'); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** `Object#toString` result references. */ - var stringTag = '[object String]'; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); - } - - /** `Object#toString` result references. */ - var regexpTag = '[object RegExp]'; - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /* Node.js helper references. */ - var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); - } - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMin = Math.min, - nativeRandom = Math.random; - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeMax = Math.max; - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - var range$1 = createRange(); - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - // 使用 lodash 提供的方式 - function type$1(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); - } - - function isObjectOrArray(value) { - return isObject(value) || isArray(value); - } - - function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); - } - - // import { isObject, isArray } from "./type.js"; - function extend(...args) { - return assignIn(this, ...args); - } - - function each(obj, iterator, context) { - // each - var i, key; - if (type(obj) === "number") { - //表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } - } - - /* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 - */ - function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, "") - .replace(/\*\/[^\/]+$/, "") - .replace(/^[\s\xA0]+/, "") - .replace(/[\s\xA0]+$/, ""); // .trim() - } - - /* - ## Utilities - */ - function keys(obj) { - return Object.keys(obj); - } - function values(obj) { - return Object.values(obj); - } - function noop() {} - - var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc - }); - - // 返回一个随机的整数。 - const integer = function (min, max) { - return random(min, max, false); - }; - const natural = function (min, max) { - return Math.abs(integer(min, max)); - }; - - const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); - }; - - const boolean$1 = function (min, max, cur) { - //! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; - }; - - const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", - }; - pools.alpha = pools.lower + pools.upper; - pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - - const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); - }; - - const string$1 = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map(() => character(pool)).join(""); - }; - - const float = function (min, max, dmin, dmax) { - let dcount = random(dmin, dmax, false); - return random(min, max, dcount); - }; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - - var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); - }; - - var simpleSwizzle = createCommonjsModule(function (module) { - - - - var concat = Array.prototype.concat; - var slice = Array.prototype.slice; - - var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; - }; - - swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; - }; - }); - - var colorString = createCommonjsModule(function (module) { - /* MIT license */ - - - - var reverseNames = {}; - - // create a list of reverse color names - for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } - } - - var cs = module.exports = { - to: {}, - get: {} - }; - - cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; - }; - - cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; - }; - - cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; - }; - - cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; - }; - - cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); - }; - - cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; - }; - - cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; - }; - - cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; - }; - - // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax - // (hwb have alpha optional & 1 is default value) - cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; - }; - - cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; - }; - - // helpers - function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); - } - - function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; - } - }); - colorString.to; - colorString.get; - - var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - - var conversions = createCommonjsModule(function (module) { - /* MIT license */ - - - // NOTE: conversions should only return primitive values (i.e. arrays, or - // values that give correct `typeof` results). - // do not use box values types (i.e. Number(), String(), etc.) - - var reverseKeywords = {}; - for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } - } - - var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} - }; - - // hide .channels and .labels properties - for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } - } - - convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; - }; - - convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; - }; - - convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; - }; - - convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; - }; - - /** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ - function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); - } - - convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; - }; - - convert.keyword.rgb = function (keyword) { - return colorName[keyword]; - }; - - convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; - }; - - convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; - }; - - convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; - }; - - convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } - }; - - convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; - }; - - // http://dev.w3.org/csswg/css-color/#hwb-to-rgb - convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; - }; - - convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; - }; - - convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; - }; - - convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; - }; - - convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; - }; - - convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); - }; - - convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; - }; - - convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; - }; - - convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; - }; - - convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; - }; - - convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; - }; - - convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; - }; - - convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; - }; - - convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; - }; - - convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; - }; - - convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; - }; - - convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; - }; - - convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; - }; - - convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; - }; - - convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; - }; - - convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; - }; - - convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; - }; - - convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; - }; - - convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; - }; - - convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; - }; - - convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; - }; - }); - conversions.rgb; - conversions.hsl; - conversions.hsv; - conversions.hwb; - conversions.cmyk; - conversions.xyz; - conversions.lab; - conversions.lch; - conversions.hex; - conversions.keyword; - conversions.ansi16; - conversions.ansi256; - conversions.hcg; - conversions.apple; - conversions.gray; - - /* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. - */ - - function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; - } - - // https://en.wikipedia.org/wiki/Breadth-first_search - function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; - } - - function link(from, to) { - return function (args) { - return to(from(args)); - }; - } - - function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; - } - - var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; - }; - - var convert$1 = {}; - - var models = Object.keys(conversions); - - function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); - }); - - var colorConvert = convert$1; - - var _slice = [].slice; - - var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' - ]; - - var hashedModelKeys = {}; - Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; - }); - - var limiters = {}; - - function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } - } - - Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } - }; - - // model conversion methods and static constructors - Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; - }); - - function roundTo(num, places) { - return Number(num.toFixed(places)); - } - - function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; - } - - function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; - } - - function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; - } - - function assertArray(val) { - return Array.isArray(val) ? val : [val]; - } - - function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; - } - - var color$1 = Color; - - /* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) - */ - var DICT$1 = { - // name value nicer - navy: { - value: "#000080", - nicer: "#001F3F", - }, - blue: { - value: "#0000ff", - nicer: "#0074D9", - }, - aqua: { - value: "#00ffff", - nicer: "#7FDBFF", - }, - teal: { - value: "#008080", - nicer: "#39CCCC", - }, - olive: { - value: "#008000", - nicer: "#3D9970", - }, - green: { - value: "#008000", - nicer: "#2ECC40", - }, - lime: { - value: "#00ff00", - nicer: "#01FF70", - }, - yellow: { - value: "#ffff00", - nicer: "#FFDC00", - }, - orange: { - value: "#ffa500", - nicer: "#FF851B", - }, - red: { - value: "#ff0000", - nicer: "#FF4136", - }, - maroon: { - value: "#800000", - nicer: "#85144B", - }, - fuchsia: { - value: "#ff00ff", - nicer: "#F012BE", - }, - purple: { - value: "#800080", - nicer: "#B10DC9", - }, - silver: { - value: "#c0c0c0", - nicer: "#DDDDDD", - }, - gray: { - value: "#808080", - nicer: "#AAAAAA", - }, - black: { - value: "#000000", - nicer: "#111111", - }, - white: { - value: "#FFFFFF", - nicer: "#FFFFFF", - }, - }; - - /* - ## Helpers - */ - - const upper = function (str) { - return (str + "").toUpperCase(); - }; - - const lower = function (str) { - return (str + "").toLowerCase(); - }; - - // 从数组中随机选取一个元素,并返回。 - const pick = function (...args) { - let [arr, min, max] = args; - // pick( item1, item2 ... ) - if (!(arr instanceof Array)) { - arr = args; - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - return shuffle(arr, min, max); - }; - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - */ - const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(0, natural(min, max)); - } - }; - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - const Cache = {}; - const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; - }; - - var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } - ]; - - /* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() - */ - - let _hue; - function _goldenRatioColor(saturation, value) { - let _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); - } - - // 中国色 数据来自于 http://zhongguose.com - - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 - function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; - } - - // #DAC0DE - function hex() { - var hsv = _goldenRatioColor(); - return hsv.hex(); - } - - // rgb(128,255,255) - function rgb() { - var hsv = _goldenRatioColor(); - return hsv.hsv().string(); - } - // rgba(128,255,255,0.3) - function rgba() { - var hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); - } - - // hsl(300,80%,90%) - function hsl() { - var hsv = _goldenRatioColor(); - return hsv.hsl().string(); - } - - var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] - }; - var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" - ]; - var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" - ]; - var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" - ]; - var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 - }; - - /* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) - */ - let { firstName, lastName, cfirstName, clastName } = Name; - - // 随机生成一个常见的英文名。 - function first() { - var names = firstName.male.concat(); - return pick(names); - } - - // 随机生成一个常见的英文姓。 - function last() { - return pick(lastName); - } - - // 随机生成一个常见的英文姓名。 - function name(middle) { - middle = middle ? ` ${first()} ` : " "; - return `${first()}${middle}${last()}`; - } - - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - function cfirst() { - return pick(cfirstName); - } /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - function clast() { - return pick(clastName); - } - // 随机生成一个常见的中文姓名。 - function cname() { - return cfirst() + clast(); - } - - // Unique ID creation requires a high quality random # generator. In the browser we therefore - // require the crypto API and do not support built-in fallback to lower quality random number - // generators (like Math.random()). - var getRandomValues; - var rnds8 = new Uint8Array(16); - function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); - } - - var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - - function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); - } - - /** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - - var byteToHex = []; - - for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); - } - - function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; - } - - function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); - } - - var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" - }; - - /* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - */ - - // id pid/parentId name children - - // 将扁平数组转化为树状 - function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - //父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - } - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; - } - const ids = Object.keys(DICT); - - // 转化数组内对象的表现形式 - const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + "0000"; - } - return { - id, - pid, - name: value, - }; - }); - - const DICT_FIXED = createTree(fixed); - - var _patternLetters = { - yyyy: "getFullYear", - yy: function (date) { - return ("" + date.getFullYear()).slice(2); - }, - y: "yy", - - MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; - }, - d: "getDate", - - HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; - }, - H: "getHours", - hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; - }, - m: "getMinutes", - - ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; - }, - s: "getSeconds", - - SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; - }, - S: "getMilliseconds", - - A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; - }, - a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; - }, - T: "getTime", - }; - - /* - ## Date - */ - - const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - - // 返回一个随机的日期字符串。 - function date(format = "yyyy-MM-dd") { - return _formatDate(_randomDate(), format); - } - function datetime(format = "yyyy-MM-dd HH:mm:ss") { - return date(format); - } - function time(format = "HH:mm:ss") { - return date(format); - } - function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); - } - - function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); - } - - function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - } - - function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); - } - - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - function id() { - var id, - sum = 0, - rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], - last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; - - id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; - } - - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ - function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); - } - - /* - ## Miscellaneous - */ - - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - let key = 0; - const increment = function (step) { - return (key += +step || 1); - }; - const inc = increment; - - // Dice - function d4() { - return this.natural(1, 4); - } - function d6() { - return this.natural(1, 6); - } - function d8() { - return this.natural(1, 8); - } - function d12() { - return this.natural(1, 12); - } - function d20() { - return this.natural(1, 20); - } - function d100() { - return this.natural(1, 100); - } - - function range(defaultMin, defaultMax, min, max) { - return min === undefined - ? natural(defaultMin, defaultMax) // () - : max === undefined - ? min // ( len ) - : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) - } - - // 随机生成一个句子,第一个单词的首字母大写。 - function sentence(min, max) { - var len = range(12, 18, min, max); - let string = [...Array(len)].map(() => word()).join(""); - return capitalize(string) + "."; - } - - // 随机生成一个单词。 - function word(min, max) { - var len = range(3, 10, min, max); - return [...Array(len)].map(() => character("lower")).join(""); - } - - // 随机生成一段文本。 - function paragraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map((i) => sentence()); - } - - // 随机生成一句标题,其中每个单词的首字母大写。 - function title(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => capitalize(word())).join(""); - } - - function cparagraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => csentence()).join(""); - } - - // 随机生成一个中文句子。 - function csentence(min, max) { - var len = range(12, 18, min, max); - return [...Array(len)].map(() => cword()).join("") + "。"; - } - // 随机生成一句中文标题。 - function ctitle(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => cword()).join(""); - } - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - const DICT_HANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; - // 随机生成一个或多个汉字。 - function cword(...args) { - var len = 1, - pool = DICT_HANZI, - min, - max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === "string") { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - const poolLength = pool.length; - if (len === 1) return pool.charAt(natural(0, poolLength)); - - return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); - } - - // 协议簇 - const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); - const tlds = // 域名后缀 - ( - "com net org edu gov int mil cn " + - // 国内域名 - "com.cn net.cn gov.cn org.cn " + - // 中文国内域名 - "中国 中国互联.公司 中国互联.网络 " + - // 新国际域名 - "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + - // 世界各国域名后缀 - "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" - ).split(" "); - - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; - } - - // 随机生成一个 URL 协议。 - function protocol() { - return pick(protocols); - } - // 随机生成一个域名。 - function domain(Tld) { - return `${word()}.${Tld || tld()}`; - } - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - function tld() { - // Top Level Domain - return pick(tlds); - } - - // 随机生成一个邮件地址。 - function email(domain) { - return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; - } - // 随机生成一个 IP 地址。 - function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join("."); - } - - var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" - ]; - var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" - ]; - var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" - ]; - var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 - }; - - var Addvocate = "#ff6138"; - var Adobe = "#ff0000"; - var Aim = "#fcd20b"; - var Amazon = "#e47911"; - var Android = "#a4c639"; - var AOL = "#0060a3"; - var Atlassian = "#003366"; - var Behance = "#053eff"; - var bitly = "#ee6123"; - var Blogger = "#fc4f08"; - var Boeing = "#0039a6"; - var Carbonmade = "#613854"; - var Cheddar = "#ff7243"; - var Delicious = "#205cc0"; - var Dell = "#3287c1"; - var Designmoo = "#e54a4f"; - var Deviantart = "#4e6252"; - var Devour = "#fd0001"; - var DEWALT = "#febd17"; - var Dribbble = "#ea4c89"; - var Dropbox = "#3d9ae8"; - var Drupal = "#0c76ab"; - var Dunked = "#2a323a"; - var eBay = "#89c507"; - var Ember = "#f05e1b"; - var Engadget = "#00bdf6"; - var Envato = "#528036"; - var Etsy = "#eb6d20"; - var Evernote = "#5ba525"; - var Facebook = "#3b5998"; - var Firefox = "#e66000"; - var Forrst = "#5b9a68"; - var Foursquare = "#25a0ca"; - var Garmin = "#007cc3"; - var GetGlue = "#2d75a2"; - var Gimmebar = "#f70078"; - var GitHub = "#171515"; - var Grooveshark = "#f77f00"; - var Groupon = "#82b548"; - var HelloWallet = "#0085ca"; - var HootSuite = "#003366"; - var Houzz = "#73ba37"; - var HTML5 = "#ec6231"; - var IKEA = "#ffcc33"; - var IMDb = "#f3ce13"; - var Instagram = "#3f729b"; - var Intel = "#0071c5"; - var Intuit = "#365ebf"; - var Kickstarter = "#76cc1e"; - var kippt = "#e03500"; - var Kodery = "#00af81"; - var LastFM = "#c3000d"; - var LinkedIn = "#0e76a8"; - var Livestream = "#cf0005"; - var Lumo = "#576396"; - var Mixpanel = "#a086d3"; - var Meetup = "#e51937"; - var Nokia = "#183693"; - var NVIDIA = "#76b900"; - var Opera = "#cc0f16"; - var Path = "#e41f11"; - var Pinboard = "#0000e6"; - var Pinterest = "#c8232c"; - var PlayStation = "#665cbe"; - var Pocket = "#ee4056"; - var Prezi = "#318bff"; - var Pusha = "#0f71b4"; - var Quora = "#a82400"; - var Rdio = "#008fd5"; - var Readability = "#9c0000"; - var Resource = "#7eb400"; - var Rockpack = "#0ba6ab"; - var Roon = "#62b0d9"; - var RSS = "#ee802f"; - var Salesforce = "#1798c1"; - var Samsung = "#0c4da2"; - var Shopify = "#96bf48"; - var Skype = "#00aff0"; - var Snagajob = "#f47a20"; - var Softonic = "#008ace"; - var SoundCloud = "#ff7700"; - var Spotify = "#81b71a"; - var Sprint = "#fee100"; - var Squarespace = "#121212"; - var StackOverflow = "#ef8236"; - var Staples = "#cc0000"; - var Stripe = "#008cdd"; - var StudyBlue = "#00afe1"; - var StumbleUpon = "#f74425"; - var Technorati = "#40a800"; - var Treehouse = "#5cb868"; - var Trulia = "#5eab1f"; - var Tumblr = "#34526f"; - var Twitter = "#00acee"; - var TYPO3 = "#ff8700"; - var Ubuntu = "#dd4814"; - var Ustream = "#3388ff"; - var Verizon = "#ef1d1d"; - var Vimeo = "#86c9ef"; - var Vine = "#00a478"; - var Virb = "#06afd8"; - var Wooga = "#5b009c"; - var Wunderlist = "#2b88d9"; - var XBOX = "#9bc848"; - var XING = "#126567"; - var Yandex = "#ffcc00"; - var Yelp = "#c41200"; - var YouTube = "#c4302b"; - var Zalongo = "#5498dc"; - var Zendesk = "#78a300"; - var Zerply = "#9dcc7a"; - var Zootool = "#5e8b1d"; - var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool - }; - - /* global document */ - let { _adSize, _screenSize, _videoSize } = size; - const _brandNames = Object.keys(_brandColors); - - /* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - function image(...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ""); - background = (background || hex()).replace(/^#/, ""); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; - } - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - function dataImage(size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); - } - - /* - ## Address - */ - var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - - // 随机生成一个大区。 - function region() { - return pick(REGION); - } - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - function province() { - return pick(DICT_FIXED).name; - } - // 随机生成一个(中国)市。 - function city(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; - } - // 随机生成一个(中国)县。 - function county(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - var county = pick(city.children) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; - } - // 随机生成一个邮政编码(六位数字)。 - function zip(len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; - } - - /* - ## Mock.Random - - 工具类,用于生成各种随机数据。 - */ - - var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range$1, - float: float, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip - }); - - /* - ## Constant - - 常量集合。 - */ - /* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 - */ - var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ - }; - - /* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - /* jshint -W041 */ - function parser$1(name = "") { - if (typeof name !== "string") name = name + ""; - var parameters = name.match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - } - - function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { - var result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - }); - } - } - } - return result; - } - - function boolean({ rule: { max, min, parameters }, template = "" }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; - } - - function _function(options) { - let { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); - } - - function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { - var result; - if (decimal) { - let [Integer, Decimal] = ("" + template).split("."); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - Integer = range ? count : Integer; - Decimal = (Decimal || "").slice(0, dcount); - while (Decimal.length < dcount) { - Decimal += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - Decimal.length < dcount - 1 ? character("number") : character("123456789"); - } - result = parseFloat(Integer + "." + Decimal, 10); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; - } - - function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - var result = {}, - keys = [], - fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (let key in template) { - (typeof template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - let inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type$1(template[key]) === "number") { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; - } - - // https://github.com/nuysoft/regexp - - function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); - } - - function Alternate(n, l) { - Token.call(this, "alternate"), (this.left = n), (this.right = l); - } - - function Match(n) { - Token.call(this, "match"), (this.body = n.filter(Boolean)); - } - - function Group(n, l) { - Token.call(this, n), (this.body = l); - } - - function CaptureGroup(n) { - Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); - } - - function Quantified(n, l) { - Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); - } - - function Quantifier(n, l) { - Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); - } - - function CharSet(n, l) { - Token.call(this, "charset"), (this.invert = n), (this.body = l); - } - - function CharacterRange(n, l) { - Token.call(this, "range"), (this.start = n), (this.end = l); - } - - function Literal(n) { - Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); - } - - function Unicode(n) { - Token.call(this, "unicode"), (this.code = n.toUpperCase()); - } - - function Hex(n) { - Token.call(this, "hex"), (this.code = n.toUpperCase()); - } - - function Octal(n) { - Token.call(this, "octal"), (this.code = n.toUpperCase()); - } - - function BackReference(n) { - Token.call(this, "back-reference"), (this.code = n.toUpperCase()); - } - - function ControlCharacter(n) { - Token.call(this, "control-character"), (this.code = n.toUpperCase()); - } - - var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, "\\\\") - .replace(/"/g, '\\"') - .replace(/\x08/g, "\\b") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\f/g, "\\f") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return "\\x0" + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return "\\x" + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return "\\u0" + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; - } - (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - "\n" === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : "\r" === e || "\u2028" === e || "\u2029" === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), - null === t && (t = al), - null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function s() { - var l, u; - return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function h() { - var n, l, u; - return ( - (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), - null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function g() { - var l, u; - return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function b() { - var l, u; - return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) - for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) - if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function M() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function D() { - var l, u; - return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function H() { - var l, u; - return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function O() { - var l, u; - return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function W() { - var l, u; - return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function z() { - var l, u; - return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function I() { - var l, u; - return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function J() { - var l, u; - return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function K() { - var l, u; - return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function N() { - var l, u; - return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function P() { - var l, u; - return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function V() { - var l, u; - return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function X() { - var l, u; - return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { - if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) - for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = "", - fl = "|", - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = "^", - vl = '"^"', - wl = function () { - return new Token("start"); - }, - Al = "$", - Cl = '"$"', - gl = function () { - return new Token("end"); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = "Quantifier", - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = "{", - yl = '"{"', - ml = ",", - Rl = '","', - Fl = "}", - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ",}", - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = "+", - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = "*", - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = "?", - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = "[0-9]", - Jl = function (n) { - return +n.join(""); - }, - Kl = "(", - Nl = '"("', - Pl = ")", - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = "?:", - _l = '"?:"', - nu = function (n) { - return new Group("non-capture-group", n); - }, - lu = "?=", - uu = '"?="', - tu = function (n) { - return new Group("positive-lookahead", n); - }, - ru = "?!", - eu = '"?!"', - ou = function (n) { - return new Group("negative-lookahead", n); - }, - cu = "CharacterSet", - iu = "[", - au = '"["', - fu = "]", - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = "CharacterRange", - pu = "-", - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = "Character", - Cu = /^[^\\\]]/, - gu = "[^\\\\\\]]", - bu = function (n) { - return new Literal(n); - }, - ku = ".", - Tu = '"."', - xu = function () { - return new Token("any-character"); - }, - yu = "Literal", - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = "[^|\\\\\\/.[()?+*$\\^]", - Fu = "\\b", - Qu = '"\\\\b"', - Su = function () { - return new Token("backspace"); - }, - Uu = function () { - return new Token("word-boundary"); - }, - Eu = "\\B", - Gu = '"\\\\B"', - Bu = function () { - return new Token("non-word-boundary"); - }, - ju = "\\d", - $u = '"\\\\d"', - qu = function () { - return new Token("digit"); - }, - Lu = "\\D", - Mu = '"\\\\D"', - Du = function () { - return new Token("non-digit"); - }, - Hu = "\\f", - Ou = '"\\\\f"', - Wu = function () { - return new Token("form-feed"); - }, - zu = "\\n", - Iu = '"\\\\n"', - Ju = function () { - return new Token("line-feed"); - }, - Ku = "\\r", - Nu = '"\\\\r"', - Pu = function () { - return new Token("carriage-return"); - }, - Vu = "\\s", - Xu = '"\\\\s"', - Yu = function () { - return new Token("white-space"); - }, - Zu = "\\S", - _u = '"\\\\S"', - nt = function () { - return new Token("non-white-space"); - }, - lt = "\\t", - ut = '"\\\\t"', - tt = function () { - return new Token("tab"); - }, - rt = "\\v", - et = '"\\\\v"', - ot = function () { - return new Token("vertical-tab"); - }, - ct = "\\w", - it = '"\\\\w"', - at = function () { - return new Token("word"); - }, - ft = "\\W", - st = '"\\\\W"', - ht = function () { - return new Token("non-word"); - }, - dt = "\\c", - pt = '"\\\\c"', - vt = "any character", - wt = function (n) { - return new ControlCharacter(n); - }, - At = "\\", - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = "[1-9]", - kt = function (n) { - return new BackReference(n); - }, - Tt = "\\0", - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = "[0-7]", - Rt = function (n) { - return new Octal(n.join("")); - }, - Ft = "\\x", - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = "[0-9a-fA-F]", - Et = function (n) { - return new Hex(n.join("")); - }, - Gt = "\\u", - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join("")); - }, - $t = function () { - return new Token("null-character"); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - - /* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ - /* - - */ - var Handler$2 = { - extend: extend, - }; - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart - /*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] - }*/ - - // ASCII printable code chart - // var LOWER = 'abcdefghijklmnopqrstuvwxyz' - // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - // var NUMBER = '0123456789' - // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' - var LOWER = ascii(97, 122); - var UPPER = ascii(65, 90); - var NUMBER = ascii(48, 57); - var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) - var PRINTABLE = ascii(32, 126); - var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; - var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); - } - return result; - })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, - }; - - // 从 from 到 to 包含两个端点的字符串 - function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); - } - - // var ast = RegExpParser.parse(regexp.source) - Handler$2.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); - }; - - Handler$2.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": - return character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO - break; - case "digit": - return pick(NUMBER.split("")); - case "non-digit": - return pick((LOWER + UPPER + OTHER).split("")); - case "form-feed": - break; - case "line-feed": - return node.body || node.text; - case "carriage-return": - break; - case "white-space": - return pick(SPACE.split("")); - case "non-white-space": - return pick((LOWER + UPPER + NUMBER).split("")); - case "tab": - break; - case "vertical-tab": - break; - case "word": // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return pick(OTHER.replace("_", "").split("")); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ""; - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - "capture-group": function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - "non-capture-group": function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - "positive-lookahead": function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - "negative-lookahead": function (node, result, cache) { - // node.body - return ""; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ""; - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); - - // node.body [] - var literal = pick(node.body); - return this.gen(literal, result, cache); - }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); - break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); - } - } - } - } - return pick(pool.split("")); - }, - range: function (node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " - ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - "control-character": function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, - }); - - var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$2 - }); - - function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - let Source = count === undefined ? source : Array(count).fill(source).join(""); - return Handler$2.gen(parser.parse(Source)); - } - - function getValueByKeyPath(key, options) { - var originalKey = key; - var keyPathParts = splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); - } - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - function normalizePath(pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - } - function splitPathToArray(path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; - } - - // 占位符即是字符串函数的意思 - function placeholder(placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(placeholder); - - var lkey = key && key.toLowerCase(), - pathParts = splitPathToArray(key); - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - params = params.split(/\s*,\s*/); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return placeholder; - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = placeholder(params[i], obj, templateContext, options); - } - } - - var handle = Random[key] || Random[lkey]; - switch (type$1(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - } - - function string(options) { - let { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = "", - } = options; - var result = ""; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(""); - - // 'email|1-10': '@EMAIL, ', - let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - let phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; - } - - var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string - }); - - let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 - function gen(template, name = "", context = {}) { - var newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var type = type$1(template); - let func = typeset[type]; - var data; - - if (func) { - data = func({ - // 属性值类型 - type, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; - } - - /* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - - */ - /* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot - */ - var Handler$1 = { - gen, - extend, - }; - Handler$1.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, - }); - Handler$1.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, - }); - - /* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - - function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - var result = { - name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, - template, - type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? "ROOT" : result.name); - - switch (result.type) { - case "array": - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case "object": - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; - } - - /* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) - */ - - function valid(template, data) { - var schema = toJSONSchema(template); - var result = Diff.diff(schema, data); - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; - } - - /* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 - */ - var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - var result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - var length = result.length; - - Assert.equal("name", schema.path, name + "", schema.name + "", result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - var length = result.length; - - switch (schema.type) { - case "string": - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case "array": - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case "function": - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal("type", schema.path, type$1(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var templateType = schema.type; - if (templateType === "object" || templateType === "array" || templateType === "function") return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case "regexp": - Assert.match("value", schema.path, data, schema.template, result); - return result.length === length; - case "string": - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal("value", schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - var actualRepeatCount; - switch (templateType) { - case "number": - var parts = (data + "").split("."); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case "boolean": - break; - - case "string": - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case "regexp": - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (var i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - var property; - each(schema.properties, function (item /*, index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i] - ) - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - var length = result.length; - - if (!schema.items) return; - - var rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("items length", schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - "items", - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" - ); - Assert.lessThanOrEqualTo( - "items", - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (var i = 0; i < data.length; i++) { - result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); - } - - return result.length === length; - }, - }; - - /* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - - */ - var Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace("{utype}", item.type.toUpperCase()) - .replace("{ltype}", item.type.toLowerCase()) - .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) - .replace("{action}", item.action) - .replace("{expected}", item.expected) - .replace("{actual}", item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case "type": - // 正则模板 === 字符串最终值 - if (expected === "regexp" && actual === "string") return true; - break; - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "matches", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is not equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - }; - - valid.Diff = Diff; - valid.Assert = Assert; - - /* global window, document, location, Event, setTimeout */ - // 备份原生 XMLHttpRequest - window._XMLHttpRequest = window.XMLHttpRequest; - window._ActiveXObject = window.ActiveXObject; - - /* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 - */ - try { - new window.Event("custom"); - } catch (exception) { - window.Event = function (type, bubbles, cancelable, detail) { - var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event; - }; - } - - var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4, - }; - - var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); - var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); - var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); - - // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 - var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", - }; - - /* - MockXMLHttpRequest - */ - - function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {}, - }; - } - - MockXMLHttpRequest._settings = { - timeout: "10-100", - /* - timeout: 50, - timeout: '10-100', - */ - }; - - MockXMLHttpRequest.setup = function (settings) { - assignIn(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings; - }; - - assignIn(MockXMLHttpRequest, XHR_STATES); - assignIn(MockXMLHttpRequest.prototype, XHR_STATES); - - // 标记当前对象为 MockXMLHttpRequest - MockXMLHttpRequest.prototype.mock = true; - - // 是否拦截 Ajax 请求 - MockXMLHttpRequest.prototype.match = false; - - // 初始化 Request 相关的属性和方法 - assignIn(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async = true, username, password) { - var that = this; - - assignIn(this.custom, { - method: method, - url: url, - async: typeof async === "boolean" ? async : true, - username: username, - password: password, - options: { - url: url, - type: method, - }, - }); - - this.custom.timeout = (function (timeout) { - if (typeof timeout === "number") return timeout; - if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); - if (typeof timeout === "string" && ~timeout.indexOf("-")) { - var tmp = timeout.split("-"); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min; - } - })(MockXMLHttpRequest._settings.timeout); - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/)); - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } - - return; - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function (name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return; - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += "," + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return; - } - - // 拦截 XHR - - // X-Requested-With header - this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); - - // loadstart The fetch initiates. - this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - - if (this.custom.async) setTimeout(done, this.custom.timeout); - // 异步 - else done(); // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.dispatchEvent(new Event("load" /*, false, false, that*/)); - that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return; - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event("abort", false, false, this)); - this.dispatchEvent(new Event("error", false, false, this)); - }, - }); - - // 初始化 Response 相关的属性和方法 - assignIn(MockXMLHttpRequest.prototype, { - responseURL: "", - status: MockXMLHttpRequest.UNSENT, - statusText: "", - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function (name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name); - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()]; - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function () { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders(); - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ""; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue; - headers += h + ": " + responseHeaders[h] + "\r\n"; - } - return headers; - }, - overrideMimeType: function (/*mime*/) {}, - responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: "", - responseXML: null, - }); - - // EventTarget - assignIn(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); - } - } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } - - var ontype = "on" + event.type; - if (this[ontype]) this[ontype](event); - }, - }); - - // Inspired by jQuery - function createNativeXMLHttpRequest() { - var isLocal = (function () { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]); - })(); - - return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} - } - - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} - } - } - - // 查找与请求参数匹配的数据模板:URL,Type - function find(options) { - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; - if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { - // console.log('[mock]', options.url, '>', item.rurl) - return item; - } - } - - function match(expected, actual) { - if (type$1(expected) === "string") { - return expected === actual; - } - if (type$1(expected) === "regexp") { - return expected.test(actual); - } - } - } - - // 数据模板 => 响应数据 - function convert(item, options) { - return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); - } - - /* global require, module, window */ - - var XHR; - if (typeof window !== "undefined") XHR = MockXMLHttpRequest; - - /*! +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++B>=800)return arguments[0]}else B=0;return U.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!R(e)}function ae(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&V(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return s(e)&&"[object Arguments]"==h(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return s(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},xe={};function be(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?be(ke):function(e){return s(e)&&te(e.length)&&!!xe[h(e)]},Me=Object.prototype.hasOwnProperty;function Ee(e,n){var t=d(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=un();return on(e+a*(n-e+an("1e-"+((a+"").length-1))),n)}return rn(e,n)}var cn=Math.ceil,hn=Math.max;var sn,fn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=hn(cn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;re?!t:t:ln(10,-10)>0},Cn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Cn.alpha=Cn.lower+Cn.upper,Cn.default=Cn.lower+Cn.upper+Cn.number+Cn.symbol;const jn=function(e="default"){return Cn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Cn[e.toLowerCase()]),e.charAt(Mn(0,e.length-1))},On=function(...e){var n,t,r,a;switch(e.length){case 0:n=Mn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Mn(r,a));break;case 3:[t,r,a]=e,n=Mn(r,a)}return[...Array(n).keys()].map((()=>jn(t))).join("")};function Rn(e,n){return e(n={exports:{}},n.exports),n.exports}var Sn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Rn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Tn=Rn((function(e){var n={};for(var t in Sn)Sn.hasOwnProperty(t)&&(n[Sn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Sn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Tn.to,Tn.get;var Fn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=Rn((function(e){var n={};for(var t in Fn)Fn.hasOwnProperty(t)&&(n[Fn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Fn)if(Fn.hasOwnProperty(l)){var i=Fn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Dn(e){var n=function(){for(var e={},n=Object.keys(qn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var zn=Hn,Nn=[].slice,In=["keyword","gray","hex"],$n={};Object.keys(zn).forEach((function(e){$n[Nn.call(zn[e].labels).sort().join("")]=e}));var Un={};function Bn(e,n){if(!(this instanceof Bn))return new Bn(e,n);if(n&&n in In&&(n=null),n&&!(n in zn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Bn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Tn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=zn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=zn[this.model].channels;var o=Nn.call(e,0,r);this.color=Kn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in $n))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=$n[l];var i=zn[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Bn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Bn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(zn).forEach((function(e){if(-1===In.indexOf(e)){var n=zn[e].channels;Bn.prototype[e]=function(){if(this.model===e)return new Bn(this);if(arguments.length)return new Bn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Bn(Xn(zn[this.model][e].raw(this.color)).concat(t),e)},Bn[e]=function(t){return"number"==typeof t&&(t=Kn(Nn.call(arguments),n)),new Bn(t,e)}}}));var Yn=Bn,Jn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Vn=function(...e){let[n,t,r]=e;return n instanceof Array?(void 0===t&&(t=1),void 0===r&&(r=t)):(n=e,t=1,r=1),1===t&&1===r?n[Mn(0,n.length-1)]:Zn(n,t,r)},Zn=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(0,Mn(n,t))}},Qn={},et=function(...e){1===e.length&&(e=e[0]);var n=et.options.context.templatePath.join("."),t=Qn[n]=Qn[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var nt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let tt;function rt(e,n){return tt=tt||Math.random(),tt+=.618033988749895,tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Yn.hsv(360*tt,100*e,100*n)}function at(){return rt().hex()}var ot={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ut,lastName:lt,cfirstName:it,clastName:ct}=ot;function ht(){var e=ut.male.concat();return Vn(e)}function st(){return Vn(lt)}function ft(){return Vn(it)}function mt(){return Vn(ct)}var dt,pt=new Uint8Array(16);function xt(){if(!dt&&!(dt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return dt(pt)}var bt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function gt(e){return"string"==typeof e&&bt.test(e)}for(var vt=[],yt=0;yt<256;++yt)vt.push((yt+256).toString(16).substr(1));function wt(e,n,t){var r=(e=e||{}).random||(e.rng||xt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(vt[e[n+0]]+vt[e[n+1]]+vt[e[n+2]]+vt[e[n+3]]+"-"+vt[e[n+4]]+vt[e[n+5]]+"-"+vt[e[n+6]]+vt[e[n+7]]+"-"+vt[e[n+8]]+vt[e[n+9]]+"-"+vt[e[n+10]]+vt[e[n+11]]+vt[e[n+12]]+vt[e[n+13]]+vt[e[n+14]]+vt[e[n+15]]).toLowerCase();if(!gt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var kt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const At=Object.keys(kt),Mt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(kt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return At.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Et={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ct=new RegExp(`(${Object.keys(Et).join("|")})`,"g");function jt(e="yyyy-MM-dd"){return Ot(Rt(),e)}function Ot(e,n){return n.replace(Ct,(function n(t,r){let a=Et[r];return"function"==typeof a?a(e):a in Et?n(t,a):e[a]()}))}function Rt(e=new Date(0),n=new Date){return new Date(An(e.getTime(),n.getTime()))}let St=0;const _t=function(e){return St+=+e||1},Tt=_t;function Ft(e,n,t,r){return void 0===t?Mn(e,n):void 0===r?t:Mn(parseInt(t,10),parseInt(r,10))}function qt(e,n){var t=Ft(12,18,e,n);return Ve([...Array(t)].map((()=>Dt())).join(""))+"."}function Dt(e,n){var t=Ft(3,10,e,n);return[...Array(t)].map((()=>jn("lower"))).join("")}function Pt(e,n){var t=Ft(12,18,e,n);return[...Array(t)].map((()=>Lt())).join("")+"。"}function Lt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Mn(n,t));break;case 3:[a,n,t]=e,r=Mn(n,t)}const o=a.length;return 1===r?a.charAt(Mn(0,o)):[...Array(r)].map((()=>a.charAt(Mn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Nt(){return Vn(Ht)}function It(e){return`${Dt()}.${e||$t()}`}function $t(){return Vn(zt)}var Ut={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Bt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Gt,_screenSize:Wt,_videoSize:Xt}=Ut;const Kt=Object.keys(Bt);function Yt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Vn(Gt)),r=(r||at()).replace(/^#/,""),t=(t||at()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Jt=["东北","华北","华东","华中","华南","西南","西北"];var Vt=Object.freeze({__proto__:null,integer:An,isNumber:function(e){return"number"==typeof e&&!isNaN(e)},random:ln,natural:Mn,int:An,boolean:En,bool:En,character:jn,char:jn,string:On,str:On,range:fn,float:function(e,n,t,r){let a=ln(t,r,!1);return ln(e,n,a)},color:function(e){return e||Jn[e]?Jn[e].nicer:Vn(nt).hex},hex:at,rgb:function(){return rt().hsv().string()},rgba:function(){return rt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return rt().hsl().string()},_goldenRatioColor:rt,first:ht,last:st,name:function(e){return e=e?` ${ht()} `:" ",`${ht()}${e}${st()}`},cfirst:ft,clast:mt,cname:function(){return ft()+mt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Vn,shuffle:Zn,order:et,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return wt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:wt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Vn(Mt).id+jt("yyyyMMdd")+On("number",3);for(var r=0;rqt()))},word:Dt,sentence:qt,title:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Ve(Dt()))).join("")},ctitle:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},csentence:Pt,cparagraph:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Pt())).join("")},cword:Lt,protocol:Nt,domain:It,tld:$t,email:function(e){return`${jn("lower")}.${Dt()}@${e||Dt()+"."+$t()}`},ip:function(){return[...Array(4)].map((()=>Mn(0,255))).join(".")},url:function(e,n){return`${e||Nt()}://${n||It()}/${Dt()}`},_patternLetters:Et,_rformat:Ct,_formatDate:Ot,_randomDate:Rt,time:function(e="HH:mm:ss"){return jt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return jt(e)},date:jt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ot(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Rt(e,n).getTime():Rt().getTime()},_adSize:Gt,_screenSize:Wt,_videoSize:Xt,image:Yt,img:Yt,_brandColors:Bt,_brandNames:Kt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Vn(Gt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Bt[Vn(Kt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Vn(Jt)},province:function(){return Vn(Mt).name},city:function(e){var n=Vn(Mt),t=Vn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Vn(Mt),t=Vn(n.children),r=Vn(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Mn(0,9);return n}}),Zt={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Qt(e=""){"string"!=typeof e&&(e+="");var n=e.match(Zt.RE_KEY),t=n&&n[3]&&n[3].match(Zt.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?An(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Zt.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||An(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function er({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Vn(Ir(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Ir(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Ir(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Ir(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function nr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?En(n,e,r):r}function tr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function rr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;if(e){let[e,a]=(""+o).split(".");for(e=n?t:e,a=(a||"").slice(0,r);a.length{let t=n.replace(Zt.RE_KEY,"$1");l[t]=Ir(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(Zt.RE_KEY,"$1");l[t]=Ir(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(Zt.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function or(e){this.type=e,this.offset=or.offset(),this.text=or.text()}function ur(e,n){or.call(this,"alternate"),this.left=e,this.right=n}function lr(e){or.call(this,"match"),this.body=e.filter(Boolean)}function ir(e,n){or.call(this,e),this.body=n}function cr(e){ir.call(this,"capture-group"),this.index=kr[this.offset]||(kr[this.offset]=wr++),this.body=e}function hr(e,n){or.call(this,"quantified"),this.body=e,this.quantifier=n}function sr(e,n){or.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function fr(e,n){or.call(this,"charset"),this.invert=e,this.body=n}function mr(e,n){or.call(this,"range"),this.start=e,this.end=n}function dr(e){or.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function pr(e){or.call(this,"unicode"),this.code=e.toUpperCase()}function xr(e){or.call(this,"hex"),this.code=e.toUpperCase()}function br(e){or.call(this,"octal"),this.code=e.toUpperCase()}function gr(e){or.call(this,"back-reference"),this.code=e.toUpperCase()}function vr(e){or.call(this,"control-character"),this.code=e.toUpperCase()}var yr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Tt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ft?(t=Ft,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new ur(e,n[1]):e},me=function(e,n,t){return new lr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new or("start")},be="$",ge='"$"',ve=function(){return new or("end")},ye=function(e,n){return new hr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new sr(e,n)},Se=",}",_e='",}"',Te=function(e){return new sr(e,1/0)},Fe=function(e){return new sr(e,e)},qe="+",De='"+"',Pe=function(){return new sr(1,1/0)},Le="*",He='"*"',ze=function(){return new sr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new sr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new ir("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new ir("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new ir("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new fr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new mr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new dr(e)},kn=".",An='"."',Mn=function(){return new or("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new or("backspace")},_n=function(){return new or("word-boundary")},Tn="\\B",Fn='"\\\\B"',qn=function(){return new or("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new or("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new or("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new or("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new or("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new or("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new or("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new or("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new or("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new or("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new or("word")},st="\\W",ft='"\\\\W"',mt=function(){return new or("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new vr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new gr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new br(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Tt=function(e){return new xr(e.join(""))},Ft="\\u",qt='"\\\\u"',Dt=function(e){return new pr(e.join(""))},Pt=function(){return new or("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(or.offset=r,or.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Ar.gen=function(e,n,t){return t=t||{guid:1},Ar[e.type]?Ar[e.type](e,n,t):Ar.token(e,n,t)},Ar.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return jn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Vn(Cr.split(""));case"non-digit":return Vn((Mr+Er+jr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Vn(Rr.split(""));case"non-white-space":return Vn((Mr+Er+Cr).split(""));case"tab":case"vertical-tab":break;case"word":return Vn((Mr+Er+Cr).split(""));case"non-word":return Vn(jr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(En()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Dr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return qr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Ir(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Vt)&&!(u in Vt))return e;for(var i=0;i{if(/^\\/.test(t))return void n.splice(o--,1);let l=Lr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return u=l,!0;u=u.replace(t,l)}))}else u=n?On(t):o;return u}var zr=Object.freeze({__proto__:null,array:er,boolean:nr,function:tr,number:rr,object:ar,regexp:Fr,string:Hr});let Nr=1;function Ir(e,n="",t={}){var r={path:t.path||[Nr],templatePath:t.templatePath||[Nr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=zr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Zt.RE_KEY,"$1"):n,rule:Qt(n),context:r}),r.root||(r.root=u),u):e}var $r={gen:Ir,extend:gn};function Ur(e,n,t=[]){var r={name:"string"==typeof n?n.replace(Zt.RE_KEY,"$1"):n,template:e,type:bn(e),rule:Qt.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Ur(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Ur(e,n,r.path)))}return r}function Br(e,n){for(var t=Ur(e),r=Gr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Lr,getValueByKeyPath:qr,normalizePath:Dr,splitPathToArray:Pr});var Gr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Wr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(Zt.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Wr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Wr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(Zt.RE_PLACEHOLDER))return r.length===o}return Wr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Wr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Wr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Wr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Wr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Wr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Wr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Wr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Wr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Wr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Wr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Wr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Wr.equal("properties length",e.path,u.length,o.min,r)):Wr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Wr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Wr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Wr.message(u),a.push(u),!1}};Br.Diff=Gr,Br.Assert=Wr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Xr,Kr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Yr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Jr="timeout withCredentials".split(" "),Vr="readyState responseURL status statusText responseType response responseText responseXML".split(" "),Zr="OK";function Qr(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}Qr._settings={timeout:"10-100"},Qr.setup=function(e){return Te(Qr._settings,e),Qr._settings},Te(Qr,Kr),Te(Qr.prototype,Kr),Qr.prototype.mock=!0,Qr.prototype.match=!1,Te(Qr.prototype,{open:function(e,n,t=!0,r,a){var o=this;Te(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(Qr._settings.timeout);var u=function(e){for(var n in Qr.Mock._mocked){var t=Qr.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===bn(e)?e===n:"regexp"===bn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;n true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** Used as references for various `Number` constants. */ -var INFINITY$1 = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; -} - -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** Used for built-in method references. */ -var funcProto$1 = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$1 = funcProto$1.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$1 = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** Used for built-in method references. */ -var objectProto$5 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$1 = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** Used for built-in method references. */ -var objectProto$4 = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** `Object#toString` result references. */ -var argsTag$1 = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; -} - -/** Used for built-in method references. */ -var objectProto$3 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/** Detect free variable `exports`. */ -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - -/** Built-in value references. */ -var Buffer = moduleExports$1 ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = -typedArrayTags[setTag] = typedArrayTags[stringTag$1] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** Used for built-in method references. */ -var objectProto$2 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -/** Used for built-in method references. */ -var objectProto$1 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ$1 = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -/** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ -var upperFirst = createCaseFirst('toUpperCase'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); -} - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); -} - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; -} - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); -} - -/** Built-in method references without a dependency on `root`. */ -var freeParseFloat = parseFloat; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min, - nativeRandom = Math.random; - -/** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ -function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range$1 = createRange(); - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); -} - -/** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ -function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); -} - -// 使用 lodash 提供的方式 -function type$1(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); -} - -function isObjectOrArray(value) { - return isObject(value) || isArray(value); -} - -function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); -} - -// import { isObject, isArray } from "./type.js"; -function extend(...args) { - return assignIn(this, ...args); -} - -function each(obj, iterator, context) { - // each - var i, key; - if (type(obj) === "number") { - //表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } -} - -/* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 -*/ -function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, "") - .replace(/\*\/[^\/]+$/, "") - .replace(/^[\s\xA0]+/, "") - .replace(/[\s\xA0]+$/, ""); // .trim() -} - -/* - ## Utilities -*/ -function keys(obj) { - return Object.keys(obj); -} -function values(obj) { - return Object.values(obj); -} -function noop() {} - -var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc -}); - -// 返回一个随机的整数。 -const integer = function (min, max) { - return random(min, max, false); -}; -const natural = function (min, max) { - return Math.abs(integer(min, max)); -}; - -const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); -}; - -const boolean$1 = function (min, max, cur) { - //! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; -}; - -const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", -}; -pools.alpha = pools.lower + pools.upper; -pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - -const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); -}; - -const string$1 = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map(() => character(pool)).join(""); -}; - -const float = function (min, max, dmin, dmax) { - let dcount = random(dmin, dmax, false); - return random(min, max, dcount); -}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); -}; - -var simpleSwizzle = createCommonjsModule(function (module) { - - - -var concat = Array.prototype.concat; -var slice = Array.prototype.slice; - -var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; -}; - -swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; -}; -}); - -var colorString = createCommonjsModule(function (module) { -/* MIT license */ - - - -var reverseNames = {}; - -// create a list of reverse color names -for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } -} - -var cs = module.exports = { - to: {}, - get: {} -}; - -cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; -}; - -cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; -}; - -cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; -}; - -cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; -}; - -cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); -}; - -cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; -}; - -cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; -}; - -cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; -}; - -// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax -// (hwb have alpha optional & 1 is default value) -cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; -}; - -cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; -}; - -// helpers -function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); -} - -function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; -} -}); -colorString.to; -colorString.get; - -var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var conversions = createCommonjsModule(function (module) { -/* MIT license */ - - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -var reverseKeywords = {}; -for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } -} - -var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -// hide .channels and .labels properties -for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } -} - -convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -/** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ -function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); -} - -convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return colorName[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; -}); -conversions.rgb; -conversions.hsl; -conversions.hsv; -conversions.hwb; -conversions.cmyk; -conversions.xyz; -conversions.lab; -conversions.lch; -conversions.hex; -conversions.keyword; -conversions.ansi16; -conversions.ansi256; -conversions.hcg; -conversions.apple; -conversions.gray; - -/* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - -var convert$1 = {}; - -var models = Object.keys(conversions); - -function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -var colorConvert = convert$1; - -var _slice = [].slice; - -var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' -]; - -var hashedModelKeys = {}; -Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; -}); - -var limiters = {}; - -function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } -} - -Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } -}; - -// model conversion methods and static constructors -Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; -}); - -function roundTo(num, places) { - return Number(num.toFixed(places)); -} - -function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; -} - -function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; -} - -function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; -} - -function assertArray(val) { - return Array.isArray(val) ? val : [val]; -} - -function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; -} - -var color$1 = Color; - -/* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) -*/ -var DICT$1 = { - // name value nicer - navy: { - value: "#000080", - nicer: "#001F3F", - }, - blue: { - value: "#0000ff", - nicer: "#0074D9", - }, - aqua: { - value: "#00ffff", - nicer: "#7FDBFF", - }, - teal: { - value: "#008080", - nicer: "#39CCCC", - }, - olive: { - value: "#008000", - nicer: "#3D9970", - }, - green: { - value: "#008000", - nicer: "#2ECC40", - }, - lime: { - value: "#00ff00", - nicer: "#01FF70", - }, - yellow: { - value: "#ffff00", - nicer: "#FFDC00", - }, - orange: { - value: "#ffa500", - nicer: "#FF851B", - }, - red: { - value: "#ff0000", - nicer: "#FF4136", - }, - maroon: { - value: "#800000", - nicer: "#85144B", - }, - fuchsia: { - value: "#ff00ff", - nicer: "#F012BE", - }, - purple: { - value: "#800080", - nicer: "#B10DC9", - }, - silver: { - value: "#c0c0c0", - nicer: "#DDDDDD", - }, - gray: { - value: "#808080", - nicer: "#AAAAAA", - }, - black: { - value: "#000000", - nicer: "#111111", - }, - white: { - value: "#FFFFFF", - nicer: "#FFFFFF", - }, -}; - -/* - ## Helpers -*/ - -const upper = function (str) { - return (str + "").toUpperCase(); -}; - -const lower = function (str) { - return (str + "").toLowerCase(); -}; - -// 从数组中随机选取一个元素,并返回。 -const pick = function (...args) { - let [arr, min, max] = args; - // pick( item1, item2 ... ) - if (!(arr instanceof Array)) { - arr = args; - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - return shuffle(arr, min, max); -}; -/* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. -*/ -const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(0, natural(min, max)); - } -}; -/* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ -const Cache = {}; -const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; -}; - -var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } -]; - -/* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() -*/ - -let _hue; -function _goldenRatioColor(saturation, value) { - let _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); -} - -// 中国色 数据来自于 http://zhongguose.com - -// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 -function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; -} - -// #DAC0DE -function hex() { - var hsv = _goldenRatioColor(); - return hsv.hex(); -} - -// rgb(128,255,255) -function rgb() { - var hsv = _goldenRatioColor(); - return hsv.hsv().string(); -} -// rgba(128,255,255,0.3) -function rgba() { - var hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); -} - -// hsl(300,80%,90%) -function hsl() { - var hsv = _goldenRatioColor(); - return hsv.hsl().string(); -} - -var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] -}; -var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" -]; -var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" -]; -var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" -]; -var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 -}; - -/* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) -*/ -let { firstName, lastName, cfirstName, clastName } = Name; - -// 随机生成一个常见的英文名。 -function first() { - var names = firstName.male.concat(); - return pick(names); -} - -// 随机生成一个常见的英文姓。 -function last() { - return pick(lastName); -} - -// 随机生成一个常见的英文姓名。 -function name(middle) { - middle = middle ? ` ${first()} ` : " "; - return `${first()}${middle}${last()}`; -} - -/* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) -*/ -function cfirst() { - return pick(cfirstName); -} /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) -*/ -function clast() { - return pick(clastName); -} -// 随机生成一个常见的中文姓名。 -function cname() { - return cfirst() + clast(); -} - -// Unique ID creation requires a high quality random # generator. In the browser we therefore -// require the crypto API and do not support built-in fallback to lower quality random number -// generators (like Math.random()). -var getRandomValues; -var rnds8 = new Uint8Array(16); -function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); -} - -var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - -function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); -} - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -var byteToHex = []; - -for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); -} - -var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" -}; - -/* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 -*/ - -// id pid/parentId name children - -// 将扁平数组转化为树状 -function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - //父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - } - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; -} -const ids = Object.keys(DICT); - -// 转化数组内对象的表现形式 -const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + "0000"; - } - return { - id, - pid, - name: value, - }; -}); - -const DICT_FIXED = createTree(fixed); - -var _patternLetters = { - yyyy: "getFullYear", - yy: function (date) { - return ("" + date.getFullYear()).slice(2); - }, - y: "yy", - - MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; - }, - d: "getDate", - - HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; - }, - H: "getHours", - hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; - }, - m: "getMinutes", - - ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; - }, - s: "getSeconds", - - SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; - }, - S: "getMilliseconds", - - A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; - }, - a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; - }, - T: "getTime", -}; - -/* - ## Date -*/ - -const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - -// 返回一个随机的日期字符串。 -function date(format = "yyyy-MM-dd") { - return _formatDate(_randomDate(), format); -} -function datetime(format = "yyyy-MM-dd HH:mm:ss") { - return date(format); -} -function time(format = "HH:mm:ss") { - return date(format); -} -function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); -} - -function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); -} - -function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); -} - -function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); -} - -/* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) -*/ -function id() { - var id, - sum = 0, - rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], - last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; - - id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; -} - -/* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ -function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); -} - -/* - ## Miscellaneous -*/ - -/* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 -*/ -let key = 0; -const increment = function (step) { - return (key += +step || 1); -}; -const inc = increment; - -// Dice -function d4() { - return this.natural(1, 4); -} -function d6() { - return this.natural(1, 6); -} -function d8() { - return this.natural(1, 8); -} -function d12() { - return this.natural(1, 12); -} -function d20() { - return this.natural(1, 20); -} -function d100() { - return this.natural(1, 100); -} - -function range(defaultMin, defaultMax, min, max) { - return min === undefined - ? natural(defaultMin, defaultMax) // () - : max === undefined - ? min // ( len ) - : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) -} - -// 随机生成一个句子,第一个单词的首字母大写。 -function sentence(min, max) { - var len = range(12, 18, min, max); - let string = [...Array(len)].map(() => word()).join(""); - return capitalize(string) + "."; -} - -// 随机生成一个单词。 -function word(min, max) { - var len = range(3, 10, min, max); - return [...Array(len)].map(() => character("lower")).join(""); -} - -// 随机生成一段文本。 -function paragraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map((i) => sentence()); -} - -// 随机生成一句标题,其中每个单词的首字母大写。 -function title(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => capitalize(word())).join(""); -} - -function cparagraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => csentence()).join(""); -} - -// 随机生成一个中文句子。 -function csentence(min, max) { - var len = range(12, 18, min, max); - return [...Array(len)].map(() => cword()).join("") + "。"; -} -// 随机生成一句中文标题。 -function ctitle(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => cword()).join(""); -} -// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm -const DICT_HANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; -// 随机生成一个或多个汉字。 -function cword(...args) { - var len = 1, - pool = DICT_HANZI, - min, - max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === "string") { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - const poolLength = pool.length; - if (len === 1) return pool.charAt(natural(0, poolLength)); - - return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); -} - -// 协议簇 -const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); -const tlds = // 域名后缀 -( - "com net org edu gov int mil cn " + - // 国内域名 - "com.cn net.cn gov.cn org.cn " + - // 中文国内域名 - "中国 中国互联.公司 中国互联.网络 " + - // 新国际域名 - "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + - // 世界各国域名后缀 - "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" -).split(" "); - -/* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers -*/ -function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; -} - -// 随机生成一个 URL 协议。 -function protocol() { - return pick(protocols); -} -// 随机生成一个域名。 -function domain(Tld) { - return `${word()}.${Tld || tld()}`; -} -/* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) -*/ -function tld() { - // Top Level Domain - return pick(tlds); -} - -// 随机生成一个邮件地址。 -function email(domain) { - return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; -} -// 随机生成一个 IP 地址。 -function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join("."); -} - -var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" -]; -var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" -]; -var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" -]; -var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 -}; - -var Addvocate = "#ff6138"; -var Adobe = "#ff0000"; -var Aim = "#fcd20b"; -var Amazon = "#e47911"; -var Android = "#a4c639"; -var AOL = "#0060a3"; -var Atlassian = "#003366"; -var Behance = "#053eff"; -var bitly = "#ee6123"; -var Blogger = "#fc4f08"; -var Boeing = "#0039a6"; -var Carbonmade = "#613854"; -var Cheddar = "#ff7243"; -var Delicious = "#205cc0"; -var Dell = "#3287c1"; -var Designmoo = "#e54a4f"; -var Deviantart = "#4e6252"; -var Devour = "#fd0001"; -var DEWALT = "#febd17"; -var Dribbble = "#ea4c89"; -var Dropbox = "#3d9ae8"; -var Drupal = "#0c76ab"; -var Dunked = "#2a323a"; -var eBay = "#89c507"; -var Ember = "#f05e1b"; -var Engadget = "#00bdf6"; -var Envato = "#528036"; -var Etsy = "#eb6d20"; -var Evernote = "#5ba525"; -var Facebook = "#3b5998"; -var Firefox = "#e66000"; -var Forrst = "#5b9a68"; -var Foursquare = "#25a0ca"; -var Garmin = "#007cc3"; -var GetGlue = "#2d75a2"; -var Gimmebar = "#f70078"; -var GitHub = "#171515"; -var Grooveshark = "#f77f00"; -var Groupon = "#82b548"; -var HelloWallet = "#0085ca"; -var HootSuite = "#003366"; -var Houzz = "#73ba37"; -var HTML5 = "#ec6231"; -var IKEA = "#ffcc33"; -var IMDb = "#f3ce13"; -var Instagram = "#3f729b"; -var Intel = "#0071c5"; -var Intuit = "#365ebf"; -var Kickstarter = "#76cc1e"; -var kippt = "#e03500"; -var Kodery = "#00af81"; -var LastFM = "#c3000d"; -var LinkedIn = "#0e76a8"; -var Livestream = "#cf0005"; -var Lumo = "#576396"; -var Mixpanel = "#a086d3"; -var Meetup = "#e51937"; -var Nokia = "#183693"; -var NVIDIA = "#76b900"; -var Opera = "#cc0f16"; -var Path = "#e41f11"; -var Pinboard = "#0000e6"; -var Pinterest = "#c8232c"; -var PlayStation = "#665cbe"; -var Pocket = "#ee4056"; -var Prezi = "#318bff"; -var Pusha = "#0f71b4"; -var Quora = "#a82400"; -var Rdio = "#008fd5"; -var Readability = "#9c0000"; -var Resource = "#7eb400"; -var Rockpack = "#0ba6ab"; -var Roon = "#62b0d9"; -var RSS = "#ee802f"; -var Salesforce = "#1798c1"; -var Samsung = "#0c4da2"; -var Shopify = "#96bf48"; -var Skype = "#00aff0"; -var Snagajob = "#f47a20"; -var Softonic = "#008ace"; -var SoundCloud = "#ff7700"; -var Spotify = "#81b71a"; -var Sprint = "#fee100"; -var Squarespace = "#121212"; -var StackOverflow = "#ef8236"; -var Staples = "#cc0000"; -var Stripe = "#008cdd"; -var StudyBlue = "#00afe1"; -var StumbleUpon = "#f74425"; -var Technorati = "#40a800"; -var Treehouse = "#5cb868"; -var Trulia = "#5eab1f"; -var Tumblr = "#34526f"; -var Twitter = "#00acee"; -var TYPO3 = "#ff8700"; -var Ubuntu = "#dd4814"; -var Ustream = "#3388ff"; -var Verizon = "#ef1d1d"; -var Vimeo = "#86c9ef"; -var Vine = "#00a478"; -var Virb = "#06afd8"; -var Wooga = "#5b009c"; -var Wunderlist = "#2b88d9"; -var XBOX = "#9bc848"; -var XING = "#126567"; -var Yandex = "#ffcc00"; -var Yelp = "#c41200"; -var YouTube = "#c4302b"; -var Zalongo = "#5498dc"; -var Zendesk = "#78a300"; -var Zerply = "#9dcc7a"; -var Zootool = "#5e8b1d"; -var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool -}; - -/* global document */ -let { _adSize, _screenSize, _videoSize } = size; -const _brandNames = Object.keys(_brandColors); - -/* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 -*/ -function image(...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ""); - background = (background || hex()).replace(/^#/, ""); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; -} -/* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, -*/ -function dataImage(size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); -} - -/* - ## Address -*/ -var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - -// 随机生成一个大区。 -function region() { - return pick(REGION); -} -// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 -function province() { - return pick(DICT_FIXED).name; -} -// 随机生成一个(中国)市。 -function city(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; -} -// 随机生成一个(中国)县。 -function county(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - var county = pick(city.children) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; -} -// 随机生成一个邮政编码(六位数字)。 -function zip(len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; -} - -/* - ## Mock.Random - - 工具类,用于生成各种随机数据。 -*/ - -var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range$1, - float: float, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip -}); - -/* - ## Constant - - 常量集合。 - */ -/* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 -*/ -var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ -}; - -/* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ -/* jshint -W041 */ -function parser$1(name = "") { - if (typeof name !== "string") name = name + ""; - var parameters = name.match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; -} - -function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { - var result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - }); - } - } - } - return result; -} - -function boolean({ rule: { max, min, parameters }, template = "" }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; -} - -function _function(options) { - let { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); -} - -function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { - var result; - if (decimal) { - let [Integer, Decimal] = ("" + template).split("."); - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - Integer = range ? count : Integer; - Decimal = (Decimal || "").slice(0, dcount); - while (Decimal.length < dcount) { - Decimal += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - Decimal.length < dcount - 1 ? character("number") : character("123456789"); - } - result = parseFloat(Integer + "." + Decimal, 10); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; -} - -function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - var result = {}, - keys = [], - fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (let key in template) { - (typeof template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - let inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type$1(template[key]) === "number") { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; -} - -// https://github.com/nuysoft/regexp - -function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); -} - -function Alternate(n, l) { - Token.call(this, "alternate"), (this.left = n), (this.right = l); -} - -function Match(n) { - Token.call(this, "match"), (this.body = n.filter(Boolean)); -} - -function Group(n, l) { - Token.call(this, n), (this.body = l); -} - -function CaptureGroup(n) { - Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); -} - -function Quantified(n, l) { - Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); -} - -function Quantifier(n, l) { - Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); -} - -function CharSet(n, l) { - Token.call(this, "charset"), (this.invert = n), (this.body = l); -} - -function CharacterRange(n, l) { - Token.call(this, "range"), (this.start = n), (this.end = l); -} - -function Literal(n) { - Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); -} - -function Unicode(n) { - Token.call(this, "unicode"), (this.code = n.toUpperCase()); -} - -function Hex(n) { - Token.call(this, "hex"), (this.code = n.toUpperCase()); -} - -function Octal(n) { - Token.call(this, "octal"), (this.code = n.toUpperCase()); -} - -function BackReference(n) { - Token.call(this, "back-reference"), (this.code = n.toUpperCase()); -} - -function ControlCharacter(n) { - Token.call(this, "control-character"), (this.code = n.toUpperCase()); -} - -var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, "\\\\") - .replace(/"/g, '\\"') - .replace(/\x08/g, "\\b") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\f/g, "\\f") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return "\\x0" + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return "\\x" + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return "\\u0" + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; - } - (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - "\n" === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : "\r" === e || "\u2028" === e || "\u2029" === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), - null === t && (t = al), - null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function s() { - var l, u; - return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function h() { - var n, l, u; - return ( - (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), - null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function g() { - var l, u; - return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function b() { - var l, u; - return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) - for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) - if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function M() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function D() { - var l, u; - return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function H() { - var l, u; - return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function O() { - var l, u; - return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function W() { - var l, u; - return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function z() { - var l, u; - return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function I() { - var l, u; - return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function J() { - var l, u; - return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function K() { - var l, u; - return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function N() { - var l, u; - return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function P() { - var l, u; - return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function V() { - var l, u; - return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function X() { - var l, u; - return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { - if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) - for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = "", - fl = "|", - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = "^", - vl = '"^"', - wl = function () { - return new Token("start"); - }, - Al = "$", - Cl = '"$"', - gl = function () { - return new Token("end"); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = "Quantifier", - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = "{", - yl = '"{"', - ml = ",", - Rl = '","', - Fl = "}", - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ",}", - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = "+", - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = "*", - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = "?", - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = "[0-9]", - Jl = function (n) { - return +n.join(""); - }, - Kl = "(", - Nl = '"("', - Pl = ")", - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = "?:", - _l = '"?:"', - nu = function (n) { - return new Group("non-capture-group", n); - }, - lu = "?=", - uu = '"?="', - tu = function (n) { - return new Group("positive-lookahead", n); - }, - ru = "?!", - eu = '"?!"', - ou = function (n) { - return new Group("negative-lookahead", n); - }, - cu = "CharacterSet", - iu = "[", - au = '"["', - fu = "]", - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = "CharacterRange", - pu = "-", - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = "Character", - Cu = /^[^\\\]]/, - gu = "[^\\\\\\]]", - bu = function (n) { - return new Literal(n); - }, - ku = ".", - Tu = '"."', - xu = function () { - return new Token("any-character"); - }, - yu = "Literal", - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = "[^|\\\\\\/.[()?+*$\\^]", - Fu = "\\b", - Qu = '"\\\\b"', - Su = function () { - return new Token("backspace"); - }, - Uu = function () { - return new Token("word-boundary"); - }, - Eu = "\\B", - Gu = '"\\\\B"', - Bu = function () { - return new Token("non-word-boundary"); - }, - ju = "\\d", - $u = '"\\\\d"', - qu = function () { - return new Token("digit"); - }, - Lu = "\\D", - Mu = '"\\\\D"', - Du = function () { - return new Token("non-digit"); - }, - Hu = "\\f", - Ou = '"\\\\f"', - Wu = function () { - return new Token("form-feed"); - }, - zu = "\\n", - Iu = '"\\\\n"', - Ju = function () { - return new Token("line-feed"); - }, - Ku = "\\r", - Nu = '"\\\\r"', - Pu = function () { - return new Token("carriage-return"); - }, - Vu = "\\s", - Xu = '"\\\\s"', - Yu = function () { - return new Token("white-space"); - }, - Zu = "\\S", - _u = '"\\\\S"', - nt = function () { - return new Token("non-white-space"); - }, - lt = "\\t", - ut = '"\\\\t"', - tt = function () { - return new Token("tab"); - }, - rt = "\\v", - et = '"\\\\v"', - ot = function () { - return new Token("vertical-tab"); - }, - ct = "\\w", - it = '"\\\\w"', - at = function () { - return new Token("word"); - }, - ft = "\\W", - st = '"\\\\W"', - ht = function () { - return new Token("non-word"); - }, - dt = "\\c", - pt = '"\\\\c"', - vt = "any character", - wt = function (n) { - return new ControlCharacter(n); - }, - At = "\\", - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = "[1-9]", - kt = function (n) { - return new BackReference(n); - }, - Tt = "\\0", - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = "[0-7]", - Rt = function (n) { - return new Octal(n.join("")); - }, - Ft = "\\x", - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = "[0-9a-fA-F]", - Et = function (n) { - return new Hex(n.join("")); - }, - Gt = "\\u", - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join("")); - }, - $t = function () { - return new Token("null-character"); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - -/* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ -/* - - */ -var Handler$2 = { - extend: extend, -}; - -// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart -/*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] -}*/ - -// ASCII printable code chart -// var LOWER = 'abcdefghijklmnopqrstuvwxyz' -// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -// var NUMBER = '0123456789' -// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' -var LOWER = ascii(97, 122); -var UPPER = ascii(65, 90); -var NUMBER = ascii(48, 57); -var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) -var PRINTABLE = ascii(32, 126); -var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; -var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); - } - return result; - })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, -}; - -// 从 from 到 to 包含两个端点的字符串 -function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); -} - -// var ast = RegExpParser.parse(regexp.source) -Handler$2.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); -}; - -Handler$2.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": - return character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO - break; - case "digit": - return pick(NUMBER.split("")); - case "non-digit": - return pick((LOWER + UPPER + OTHER).split("")); - case "form-feed": - break; - case "line-feed": - return node.body || node.text; - case "carriage-return": - break; - case "white-space": - return pick(SPACE.split("")); - case "non-white-space": - return pick((LOWER + UPPER + NUMBER).split("")); - case "tab": - break; - case "vertical-tab": - break; - case "word": // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return pick(OTHER.replace("_", "").split("")); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ""; - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - "capture-group": function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - "non-capture-group": function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - "positive-lookahead": function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - "negative-lookahead": function (node, result, cache) { - // node.body - return ""; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ""; - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); - - // node.body [] - var literal = pick(node.body); - return this.gen(literal, result, cache); - }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); - break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); - } - } - } - } - return pick(pool.split("")); - }, - range: function (node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " - ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - "control-character": function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, -}); - -var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$2 -}); - -function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - let Source = count === undefined ? source : Array(count).fill(source).join(""); - return Handler$2.gen(parser.parse(Source)); -} - -function getValueByKeyPath(key, options) { - var originalKey = key; - var keyPathParts = splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); -} -// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js -function normalizePath(pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; -} -function splitPathToArray(path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; -} - -// 占位符即是字符串函数的意思 -function placeholder(placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(placeholder); - - var lkey = key && key.toLowerCase(), - pathParts = splitPathToArray(key); - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - params = params.split(/\s*,\s*/); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return placeholder; - - // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = placeholder(params[i], obj, templateContext, options); - } - } - - var handle = Random[key] || Random[lkey]; - switch (type$1(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } -} - -function string(options) { - let { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = "", - } = options; - var result = ""; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(""); - - // 'email|1-10': '@EMAIL, ', - let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - let phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; -} - -var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string -}); - -let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 -function gen(template, name = "", context = {}) { - var newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var type = type$1(template); - let func = typeset[type]; - var data; - - if (func) { - data = func({ - // 属性值类型 - type, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; -} - -/* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - -*/ -/* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot -*/ -var Handler$1 = { - gen, - extend, -}; -Handler$1.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, -}); -Handler$1.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, -}); - -/* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - -function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - var result = { - name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, - template, - type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? "ROOT" : result.name); - - switch (result.type) { - case "array": - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case "object": - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; -} - -/* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) -*/ - -function valid(template, data) { - var schema = toJSONSchema(template); - var result = Diff.diff(schema, data); - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; -} - -/* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 -*/ -var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - var result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - var length = result.length; - - Assert.equal("name", schema.path, name + "", schema.name + "", result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - var length = result.length; - - switch (schema.type) { - case "string": - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case "array": - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case "function": - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal("type", schema.path, type$1(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var templateType = schema.type; - if (templateType === "object" || templateType === "array" || templateType === "function") return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case "regexp": - Assert.match("value", schema.path, data, schema.template, result); - return result.length === length; - case "string": - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal("value", schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - var actualRepeatCount; - switch (templateType) { - case "number": - var parts = (data + "").split("."); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case "boolean": - break; - - case "string": - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case "regexp": - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (var i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - var property; - each(schema.properties, function (item /*, index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i] - ) - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - var length = result.length; - - if (!schema.items) return; - - var rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("items length", schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - "items", - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" - ); - Assert.lessThanOrEqualTo( - "items", - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (var i = 0; i < data.length; i++) { - result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); - } - - return result.length === length; - }, -}; - -/* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - -*/ -var Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace("{utype}", item.type.toUpperCase()) - .replace("{ltype}", item.type.toLowerCase()) - .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) - .replace("{action}", item.action) - .replace("{expected}", item.expected) - .replace("{actual}", item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case "type": - // 正则模板 === 字符串最终值 - if (expected === "regexp" && actual === "string") return true; - break; - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "matches", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is not equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, -}; - -valid.Diff = Diff; -valid.Assert = Assert; - -/* global window, document, location, Event, setTimeout */ -// 备份原生 XMLHttpRequest -window._XMLHttpRequest = window.XMLHttpRequest; -window._ActiveXObject = window.ActiveXObject; - -/* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 -*/ -try { - new window.Event("custom"); -} catch (exception) { - window.Event = function (type, bubbles, cancelable, detail) { - var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event; - }; -} - -var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4, -}; - -var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); -var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); -var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); - -// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 -var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", -}; - -/* - MockXMLHttpRequest -*/ - -function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {}, - }; -} - -MockXMLHttpRequest._settings = { - timeout: "10-100", - /* - timeout: 50, - timeout: '10-100', - */ -}; - -MockXMLHttpRequest.setup = function (settings) { - assignIn(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings; -}; - -assignIn(MockXMLHttpRequest, XHR_STATES); -assignIn(MockXMLHttpRequest.prototype, XHR_STATES); - -// 标记当前对象为 MockXMLHttpRequest -MockXMLHttpRequest.prototype.mock = true; - -// 是否拦截 Ajax 请求 -MockXMLHttpRequest.prototype.match = false; - -// 初始化 Request 相关的属性和方法 -assignIn(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async = true, username, password) { - var that = this; - - assignIn(this.custom, { - method: method, - url: url, - async: typeof async === "boolean" ? async : true, - username: username, - password: password, - options: { - url: url, - type: method, - }, - }); - - this.custom.timeout = (function (timeout) { - if (typeof timeout === "number") return timeout; - if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); - if (typeof timeout === "string" && ~timeout.indexOf("-")) { - var tmp = timeout.split("-"); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min; - } - })(MockXMLHttpRequest._settings.timeout); - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/)); - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } - - return; - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function (name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return; - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += "," + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return; - } - - // 拦截 XHR - - // X-Requested-With header - this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); - - // loadstart The fetch initiates. - this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - - if (this.custom.async) setTimeout(done, this.custom.timeout); - // 异步 - else done(); // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.dispatchEvent(new Event("load" /*, false, false, that*/)); - that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return; - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event("abort", false, false, this)); - this.dispatchEvent(new Event("error", false, false, this)); - }, -}); - -// 初始化 Response 相关的属性和方法 -assignIn(MockXMLHttpRequest.prototype, { - responseURL: "", - status: MockXMLHttpRequest.UNSENT, - statusText: "", - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function (name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name); - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()]; - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function () { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders(); - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ""; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue; - headers += h + ": " + responseHeaders[h] + "\r\n"; - } - return headers; - }, - overrideMimeType: function (/*mime*/) {}, - responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: "", - responseXML: null, -}); - -// EventTarget -assignIn(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); - } - } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } - - var ontype = "on" + event.type; - if (this[ontype]) this[ontype](event); - }, -}); - -// Inspired by jQuery -function createNativeXMLHttpRequest() { - var isLocal = (function () { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]); - })(); - - return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} - } - - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} - } -} - -// 查找与请求参数匹配的数据模板:URL,Type -function find(options) { - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; - if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { - // console.log('[mock]', options.url, '>', item.rurl) - return item; - } - } - - function match(expected, actual) { - if (type$1(expected) === "string") { - return expected === actual; - } - if (type$1(expected) === "regexp") { - return expected.test(actual); - } - } -} - -// 数据模板 => 响应数据 -function convert(item, options) { - return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); -} - -/* global require, module, window */ - -var XHR; -if (typeof window !== "undefined") XHR = MockXMLHttpRequest; - +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return $.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function K(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function te(e){return null!=e&&ne(e.length)&&!O(e)}function re(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?te(t)&&K(n,t.length):"string"==r&&n in t)&&J(t[n],e)}var ae=Object.prototype;function oe(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ae)}function ue(e){return s(e)&&"[object Arguments]"==h(e)}var le=Object.prototype,ie=le.hasOwnProperty,ce=le.propertyIsEnumerable,he=ue(function(){return arguments}())?ue:function(e){return s(e)&&ie.call(e,"callee")&&!ce.call(e,"callee")};var se="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=se&&"object"==typeof module&&module&&!module.nodeType&&module,me=fe&&fe.exports===se?t.Buffer:void 0,de=(me?me.isBuffer:void 0)||function(){return!1},pe={};function xe(e){return function(n){return e(n)}}pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe["[object Arguments]"]=pe["[object Array]"]=pe["[object ArrayBuffer]"]=pe["[object Boolean]"]=pe["[object DataView]"]=pe["[object Date]"]=pe["[object Error]"]=pe["[object Function]"]=pe["[object Map]"]=pe["[object Number]"]=pe["[object Object]"]=pe["[object RegExp]"]=pe["[object Set]"]=pe["[object String]"]=pe["[object WeakMap]"]=!1;var be="object"==typeof exports&&exports&&!exports.nodeType&&exports,ge=be&&"object"==typeof module&&module&&!module.nodeType&&module,ve=ge&&ge.exports===be&&e.process,ye=function(){try{var e=ge&&ge.require&&ge.require("util").types;return e||ve&&ve.binding&&ve.binding("util")}catch(e){}}(),we=ye&&ye.isTypedArray,ke=we?xe(we):function(e){return s(e)&&ne(e.length)&&!!pe[h(e)]},Ae=Object.prototype.hasOwnProperty;function Me(e,n){var t=d(e),r=!t&&he(e),a=!t&&!r&&de(e),o=!t&&!r&&!a&&ke(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Se.length>3&&"function"==typeof a?(r--,a):void 0,o&&re(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=an();return rn(e+a*(n-e+tn("1e-"+((a+"").length-1))),n)}return nn(e,n)}var un=Math.ceil,ln=Math.max;var cn,hn=function(e,n,t){return t&&"number"!=typeof t&&re(e,n,t)&&(n=t=void 0),e=C(e),void 0===n?(n=e,e=0):n=C(n),function(e,n,t,r){for(var a=-1,o=ln(un((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;re?!t:t:on(10,-10)>0},Mn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Mn.alpha=Mn.lower+Mn.upper,Mn.default=Mn.lower+Mn.upper+Mn.number+Mn.symbol;const En=function(e="default"){return Mn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Mn[e.toLowerCase()]),e.charAt(kn(0,e.length-1))},Cn=function(...e){var n,t,r,a;switch(e.length){case 0:n=kn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=kn(r,a));break;case 3:[t,r,a]=e,n=kn(r,a)}return[...Array(n).keys()].map((()=>En(t))).join("")};function jn(e,n){return e(n={exports:{}},n.exports),n.exports}var On={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Rn=jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Sn=jn((function(e){var n={};for(var t in On)On.hasOwnProperty(t)&&(n[On[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=On[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Rn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Rn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Rn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Rn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Rn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Sn.to,Sn.get;var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Tn=jn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in _n)if(_n.hasOwnProperty(l)){var i=_n[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Fn(e){var n=function(){for(var e={},n=Object.keys(Tn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Ln=Pn,Hn=[].slice,zn=["keyword","gray","hex"],Nn={};Object.keys(Ln).forEach((function(e){Nn[Hn.call(Ln[e].labels).sort().join("")]=e}));var In={};function $n(e,n){if(!(this instanceof $n))return new $n(e,n);if(n&&n in zn&&(n=null),n&&!(n in Ln))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof $n)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Sn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Ln[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Ln[this.model].channels;var o=Hn.call(e,0,r);this.color=Wn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Nn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Nn[l];var i=Ln[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return $n.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return $n.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Ln).forEach((function(e){if(-1===zn.indexOf(e)){var n=Ln[e].channels;$n.prototype[e]=function(){if(this.model===e)return new $n(this);if(arguments.length)return new $n(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new $n(Gn(Ln[this.model][e].raw(this.color)).concat(t),e)},$n[e]=function(t){return"number"==typeof t&&(t=Wn(Hn.call(arguments),n)),new $n(t,e)}}}));var Xn=$n,Kn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Yn=function(...e){let[n,t,r]=e;return n instanceof Array?(void 0===t&&(t=1),void 0===r&&(r=t)):(n=e,t=1,r=1),1===t&&1===r?n[kn(0,n.length-1)]:Jn(n,t,r)},Jn=function(e,n,t){let r=dn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(0,kn(n,t))}},Vn={},Zn=function(...e){1===e.length&&(e=e[0]);var n=Zn.options.context.templatePath.join("."),t=Vn[n]=Vn[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Qn=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let et;function nt(e,n){return et=et||Math.random(),et+=.618033988749895,et%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Xn.hsv(360*et,100*e,100*n)}function tt(){return nt().hex()}var rt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:at,lastName:ot,cfirstName:ut,clastName:lt}=rt;function it(){var e=at.male.concat();return Yn(e)}function ct(){return Yn(ot)}function ht(){return Yn(ut)}function st(){return Yn(lt)}var ft,mt=new Uint8Array(16);function dt(){if(!ft&&!(ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ft(mt)}var pt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function xt(e){return"string"==typeof e&&pt.test(e)}for(var bt=[],gt=0;gt<256;++gt)bt.push((gt+256).toString(16).substr(1));function vt(e,n,t){var r=(e=e||{}).random||(e.rng||dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(bt[e[n+0]]+bt[e[n+1]]+bt[e[n+2]]+bt[e[n+3]]+"-"+bt[e[n+4]]+bt[e[n+5]]+"-"+bt[e[n+6]]+bt[e[n+7]]+"-"+bt[e[n+8]]+bt[e[n+9]]+"-"+bt[e[n+10]]+bt[e[n+11]]+bt[e[n+12]]+bt[e[n+13]]+bt[e[n+14]]+bt[e[n+15]]).toLowerCase();if(!xt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var yt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const wt=Object.keys(yt),kt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(yt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return wt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var At={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Mt=new RegExp(`(${Object.keys(At).join("|")})`,"g");function Et(e="yyyy-MM-dd"){return Ct(jt(),e)}function Ct(e,n){return n.replace(Mt,(function n(t,r){let a=At[r];return"function"==typeof a?a(e):a in At?n(t,a):e[a]()}))}function jt(e=new Date(0),n=new Date){return new Date(wn(e.getTime(),n.getTime()))}let Ot=0;const Rt=function(e){return Ot+=+e||1},St=Rt;function _t(e,n,t,r){return void 0===t?kn(e,n):void 0===r?t:kn(parseInt(t,10),parseInt(r,10))}function Tt(e,n){var t=_t(12,18,e,n);return Ye([...Array(t)].map((()=>Ft())).join(""))+"."}function Ft(e,n){var t=_t(3,10,e,n);return[...Array(t)].map((()=>En("lower"))).join("")}function qt(e,n){var t=_t(12,18,e,n);return[...Array(t)].map((()=>Dt())).join("")+"。"}function Dt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=kn(n,t));break;case 3:[a,n,t]=e,r=kn(n,t)}const o=a.length;return 1===r?a.charAt(kn(0,o)):[...Array(r)].map((()=>a.charAt(kn(0,o)))).join("")}const Pt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Lt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Ht(){return Yn(Pt)}function zt(e){return`${Ft()}.${e||Nt()}`}function Nt(){return Yn(Lt)}var It={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},$t={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Ut,_screenSize:Bt,_videoSize:Gt}=It;const Wt=Object.keys($t);function Xt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Yn(Ut)),r=(r||tt()).replace(/^#/,""),t=(t||tt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Kt=["东北","华北","华东","华中","华南","西南","西北"];var Yt=Object.freeze({__proto__:null,integer:wn,isNumber:function(e){return"number"==typeof e&&!isNaN(e)},random:on,natural:kn,int:wn,boolean:An,bool:An,character:En,char:En,string:Cn,str:Cn,range:hn,float:function(e,n,t,r){let a=on(t,r,!1);return on(e,n,a)},color:function(e){return e||Kn[e]?Kn[e].nicer:Yn(Qn).hex},hex:tt,rgb:function(){return nt().hsv().string()},rgba:function(){return nt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return nt().hsl().string()},_goldenRatioColor:nt,first:it,last:ct,name:function(e){return e=e?` ${it()} `:" ",`${it()}${e}${ct()}`},cfirst:ht,clast:st,cname:function(){return ht()+st()},capitalize:Ye,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Yn,shuffle:Jn,order:Zn,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:vt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Yn(kt).id+Et("yyyyMMdd")+Cn("number",3);for(var r=0;rTt()))},word:Ft,sentence:Tt,title:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>Ye(Ft()))).join("")},ctitle:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>Dt())).join("")},csentence:qt,cparagraph:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>qt())).join("")},cword:Dt,protocol:Ht,domain:zt,tld:Nt,email:function(e){return`${En("lower")}.${Ft()}@${e||Ft()+"."+Nt()}`},ip:function(){return[...Array(4)].map((()=>kn(0,255))).join(".")},url:function(e,n){return`${e||Ht()}://${n||zt()}/${Ft()}`},_patternLetters:At,_rformat:Mt,_formatDate:Ct,_randomDate:jt,time:function(e="HH:mm:ss"){return Et(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Et(e)},date:Et,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ct(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?jt(e,n).getTime():jt().getTime()},_adSize:Ut,_screenSize:Bt,_videoSize:Gt,image:Xt,img:Xt,_brandColors:$t,_brandNames:Wt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Yn(Ut)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=$t[Yn(Wt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Yn(Kt)},province:function(){return Yn(kt).name},city:function(e){var n=Yn(kt),t=Yn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Yn(kt),t=Yn(n.children),r=Yn(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=kn(0,9);return n}}),Jt={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Vt(e=""){"string"!=typeof e&&(e+="");var n=e.match(Jt.RE_KEY),t=n&&n[3]&&n[3].match(Jt.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?wn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Jt.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||wn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function Zt({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Yn(zr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=zr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(zr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(zr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function Qt({rule:{max:e,min:n,parameters:t},template:r=""}){return t?An(n,e,r):r}function er(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function nr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;if(e){let[e,a]=(""+o).split(".");for(e=n?t:e,a=(a||"").slice(0,r);a.length{let t=n.replace(Jt.RE_KEY,"$1");l[t]=zr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(Jt.RE_KEY,"$1");l[t]=zr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(Jt.RE_KEY);i&&i[2]&&"number"===pn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function rr(e){this.type=e,this.offset=rr.offset(),this.text=rr.text()}function ar(e,n){rr.call(this,"alternate"),this.left=e,this.right=n}function or(e){rr.call(this,"match"),this.body=e.filter(Boolean)}function ur(e,n){rr.call(this,e),this.body=n}function lr(e){ur.call(this,"capture-group"),this.index=yr[this.offset]||(yr[this.offset]=vr++),this.body=e}function ir(e,n){rr.call(this,"quantified"),this.body=e,this.quantifier=n}function cr(e,n){rr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function hr(e,n){rr.call(this,"charset"),this.invert=e,this.body=n}function sr(e,n){rr.call(this,"range"),this.start=e,this.end=n}function fr(e){rr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function mr(e){rr.call(this,"unicode"),this.code=e.toUpperCase()}function dr(e){rr.call(this,"hex"),this.code=e.toUpperCase()}function pr(e){rr.call(this,"octal"),this.code=e.toUpperCase()}function xr(e){rr.call(this,"back-reference"),this.code=e.toUpperCase()}function br(e){rr.call(this,"control-character"),this.code=e.toUpperCase()}var gr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Tt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ft?(t=Ft,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new ar(e,n[1]):e},me=function(e,n,t){return new or([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new rr("start")},be="$",ge='"$"',ve=function(){return new rr("end")},ye=function(e,n){return new ir(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new cr(e,n)},Se=",}",_e='",}"',Te=function(e){return new cr(e,1/0)},Fe=function(e){return new cr(e,e)},qe="+",De='"+"',Pe=function(){return new cr(1,1/0)},Le="*",He='"*"',ze=function(){return new cr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new cr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new lr(e)},Ze="?:",Qe='"?:"',en=function(e){return new ur("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new ur("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new ur("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new hr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new sr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new fr(e)},kn=".",An='"."',Mn=function(){return new rr("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new rr("backspace")},_n=function(){return new rr("word-boundary")},Tn="\\B",Fn='"\\\\B"',qn=function(){return new rr("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new rr("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new rr("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new rr("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new rr("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new rr("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new rr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new rr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new rr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new rr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new rr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new rr("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new br(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new xr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new pr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Tt=function(e){return new dr(e.join(""))},Ft="\\u",qt='"\\\\u"',Dt=function(e){return new mr(e.join(""))},Pt=function(){return new rr("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(rr.offset=r,rr.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}wr.gen=function(e,n,t){return t=t||{guid:1},wr[e.type]?wr[e.type](e,n,t):wr.token(e,n,t)},wr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return En();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Yn(Mr.split(""));case"non-digit":return Yn((kr+Ar+Er).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Yn(jr.split(""));case"non-white-space":return Yn((kr+Ar+Mr).split(""));case"tab":case"vertical-tab":break;case"word":return Yn((kr+Ar+Mr).split(""));case"non-word":return Yn(Er.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(An()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Fr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Tr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=zr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Yt)&&!(u in Yt))return e;for(var i=0;i{if(/^\\/.test(t))return void n.splice(o--,1);let l=Dr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return u=l,!0;u=u.replace(t,l)}))}else u=n?Cn(t):o;return u}var Lr=Object.freeze({__proto__:null,array:Zt,boolean:Qt,function:er,number:nr,object:tr,regexp:_r,string:Pr});let Hr=1;function zr(e,n="",t={}){var r={path:t.path||[Hr],templatePath:t.templatePath||[Hr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=pn(e);let o=Lr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Jt.RE_KEY,"$1"):n,rule:Vt(n),context:r}),r.root||(r.root=u),u):e}var Nr={gen:zr,extend:xn};function Ir(e,n,t=[]){var r={name:"string"==typeof n?n.replace(Jt.RE_KEY,"$1"):n,template:e,type:pn(e),rule:Vt.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Ir(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Ir(e,n,r.path)))}return r}function $r(e,n){for(var t=Ir(e),r=Ur.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Dr,getValueByKeyPath:Tr,normalizePath:Fr,splitPathToArray:qr});var Ur={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Br.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(Jt.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Br.equal("type",e.path,pn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Br.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(Jt.RE_PLACEHOLDER))return r.length===o}return Br.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Br.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Br.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Br.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Br.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Br.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Br.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Br.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Br.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Br.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=vn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Br.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Br.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Br.equal("properties length",e.path,u.length,o.min,r)):Br.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Br.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Br.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Br.message(u),a.push(u),!1}};$r.Diff=Ur,$r.Assert=Br,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Gr,Wr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Xr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Kr="timeout withCredentials".split(" "),Yr="readyState responseURL status statusText responseType response responseText responseXML".split(" "),Jr="OK";function Vr(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}Vr._settings={timeout:"10-100"},Vr.setup=function(e){return _e(Vr._settings,e),Vr._settings},_e(Vr,Wr),_e(Vr.prototype,Wr),Vr.prototype.mock=!0,Vr.prototype.match=!1,_e(Vr.prototype,{open:function(e,n,t=!0,r,a){var o=this;_e(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(Vr._settings.timeout);var u=function(e){for(var n in Vr.Mock._mocked){var t=Vr.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===pn(e)?e===n:"regexp"===pn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;n Date: Sat, 12 Jun 2021 21:59:29 +0800 Subject: [PATCH 11/65] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 ++++++++++++++++++ package.json | 7 +++---- 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..15242076 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +# Mockjs-esm 项目 + +## 简介 + +Mockjs-esm 是 Mockjs 的 esm 版本,由于 Mockjs 源代码实在太过久远,本人用了 4 天时间将 Mockjs 的大部分模块进行细分与简化,便于广大开发者学习。 + +## 与 Mockjs 的异同点 + +### 同 + +1. Mockjs-esm 沿袭 Mockjs 的所有 API,不对任何的 API 进行更改。 + +### 异 + +1. 对源代码中的大部分循环遍历逻辑进行了修改。 +2. 引用 lodash 和 color 库对源代码中的随机函数和颜色转换等函数进行简化。(原作者当年是没有依靠任何库的,这一点令我很佩服) +3. 源代码打包方式改为 rollup 打包,生成 esm 版本和 iife 版本。 +4. 扩充 Mockjs 的功能,比如提供 timestamp 模板等。 diff --git a/package.json b/package.json index 0e83b3ee..eed562b4 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,8 @@ { - "name": "mockjs", + "name": "mockjs-esm", "title": "Mock.js", - "description": "模拟请求 & 模拟数据", - "version": "0.1.11", + "description": "Mockjs 的 esm 版本,基础 api 一致", + "version": "0.9.0", "homepage": "http://mockjs.com/", "keywords": [ "mock", @@ -16,7 +16,6 @@ "url": "https://github.com/nuysoft/Mock/blob/master/MIT-LICENSE.txt" } ], - "author": "nuysoft@gmail.com", "repository": { "type": "git", "url": "git://github.com/nuysoft/Mock.git" From bf26870615345ba52d407d1801a5336cb2ca63c3 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 12 Jun 2021 22:14:07 +0800 Subject: [PATCH 12/65] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20License=20=E5=92=8C?= =?UTF-8?q?=E9=83=A8=E5=88=86=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 47 +++++++++++++++++++++++++++++++++++++++ README.md | 22 +++++++++++++++---- dist/Mock.min.js | 50 ++++++++++++++++++++++++++++++++++++++++++ dist/mock.js | 50 ++++++++++++++++++++++++++++++++++++++++++ package.json | 10 +++++---- rollup.config.build.js | 15 +++++++------ 6 files changed, 179 insertions(+), 15 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..aff0dcf0 --- /dev/null +++ b/LICENSE @@ -0,0 +1,47 @@ +// esm 版本编写人 + +MIT License + +Copyright (c) 2020 动中之动 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +// 原始代码编写人 + +The MIT License (MIT) + +Copyright (c) 2015 nuysoft +http://mockjs.com/ + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index 15242076..67bd06ab 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,31 @@ ## 简介 -Mockjs-esm 是 Mockjs 的 esm 版本,由于 Mockjs 源代码实在太过久远,本人用了 4 天时间将 Mockjs 的大部分模块进行细分与简化,便于广大开发者学习。 +Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](http://mockjs.com/) 源代码实在太过久远,本人用了 4 天时间将 [Mockjs](http://mockjs.com/) 的大部分模块进行细分与简化,便于广大开发者学习。 -## 与 Mockjs 的异同点 +## 与 [Mockjs](http://mockjs.com/) 的异同点 ### 同 -1. Mockjs-esm 沿袭 Mockjs 的所有 API,不对任何的 API 进行更改。 +1. Mockjs-esm 沿袭 [Mockjs](http://mockjs.com/) 的所有 API,不对任何的 API 进行更改。 ### 异 1. 对源代码中的大部分循环遍历逻辑进行了修改。 2. 引用 lodash 和 color 库对源代码中的随机函数和颜色转换等函数进行简化。(原作者当年是没有依靠任何库的,这一点令我很佩服) 3. 源代码打包方式改为 rollup 打包,生成 esm 版本和 iife 版本。 -4. 扩充 Mockjs 的功能,比如提供 timestamp 模板等。 +4. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 +5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) + +## 教程 + +本项目维持与 [Mockjs](http://mockjs.com/) 一致的 API,故原作者的教程是完全可以实现的。 +官方网站:http://mockjs.com/ + +## 新的功能 + +1. 生成 timestamp + +```js +Mock.mock('@timestamp') // 生成数字型的 timestamp +``` diff --git a/dist/Mock.min.js b/dist/Mock.min.js index c4b41226..300b225d 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,3 +1,53 @@ +/** + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++B>=800)return arguments[0]}else B=0;return U.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!R(e)}function ae(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&V(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return s(e)&&"[object Arguments]"==h(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return s(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},xe={};function be(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?be(ke):function(e){return s(e)&&te(e.length)&&!!xe[h(e)]},Me=Object.prototype.hasOwnProperty;function Ee(e,n){var t=d(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=un();return on(e+a*(n-e+an("1e-"+((a+"").length-1))),n)}return rn(e,n)}var cn=Math.ceil,hn=Math.max;var sn,fn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=hn(cn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;re?!t:t:ln(10,-10)>0},Cn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Cn.alpha=Cn.lower+Cn.upper,Cn.default=Cn.lower+Cn.upper+Cn.number+Cn.symbol;const jn=function(e="default"){return Cn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Cn[e.toLowerCase()]),e.charAt(Mn(0,e.length-1))},On=function(...e){var n,t,r,a;switch(e.length){case 0:n=Mn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Mn(r,a));break;case 3:[t,r,a]=e,n=Mn(r,a)}return[...Array(n).keys()].map((()=>jn(t))).join("")};function Rn(e,n){return e(n={exports:{}},n.exports),n.exports}var Sn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Rn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Tn=Rn((function(e){var n={};for(var t in Sn)Sn.hasOwnProperty(t)&&(n[Sn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Sn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Tn.to,Tn.get;var Fn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=Rn((function(e){var n={};for(var t in Fn)Fn.hasOwnProperty(t)&&(n[Fn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Fn)if(Fn.hasOwnProperty(l)){var i=Fn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Dn(e){var n=function(){for(var e={},n=Object.keys(qn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var zn=Hn,Nn=[].slice,In=["keyword","gray","hex"],$n={};Object.keys(zn).forEach((function(e){$n[Nn.call(zn[e].labels).sort().join("")]=e}));var Un={};function Bn(e,n){if(!(this instanceof Bn))return new Bn(e,n);if(n&&n in In&&(n=null),n&&!(n in zn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Bn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Tn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=zn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=zn[this.model].channels;var o=Nn.call(e,0,r);this.color=Kn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in $n))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=$n[l];var i=zn[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Bn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Bn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(zn).forEach((function(e){if(-1===In.indexOf(e)){var n=zn[e].channels;Bn.prototype[e]=function(){if(this.model===e)return new Bn(this);if(arguments.length)return new Bn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Bn(Xn(zn[this.model][e].raw(this.color)).concat(t),e)},Bn[e]=function(t){return"number"==typeof t&&(t=Kn(Nn.call(arguments),n)),new Bn(t,e)}}}));var Yn=Bn,Jn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Vn=function(...e){let[n,t,r]=e;return n instanceof Array?(void 0===t&&(t=1),void 0===r&&(r=t)):(n=e,t=1,r=1),1===t&&1===r?n[Mn(0,n.length-1)]:Zn(n,t,r)},Zn=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(0,Mn(n,t))}},Qn={},et=function(...e){1===e.length&&(e=e[0]);var n=et.options.context.templatePath.join("."),t=Qn[n]=Qn[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var nt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let tt;function rt(e,n){return tt=tt||Math.random(),tt+=.618033988749895,tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Yn.hsv(360*tt,100*e,100*n)}function at(){return rt().hex()}var ot={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ut,lastName:lt,cfirstName:it,clastName:ct}=ot;function ht(){var e=ut.male.concat();return Vn(e)}function st(){return Vn(lt)}function ft(){return Vn(it)}function mt(){return Vn(ct)}var dt,pt=new Uint8Array(16);function xt(){if(!dt&&!(dt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return dt(pt)}var bt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function gt(e){return"string"==typeof e&&bt.test(e)}for(var vt=[],yt=0;yt<256;++yt)vt.push((yt+256).toString(16).substr(1));function wt(e,n,t){var r=(e=e||{}).random||(e.rng||xt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(vt[e[n+0]]+vt[e[n+1]]+vt[e[n+2]]+vt[e[n+3]]+"-"+vt[e[n+4]]+vt[e[n+5]]+"-"+vt[e[n+6]]+vt[e[n+7]]+"-"+vt[e[n+8]]+vt[e[n+9]]+"-"+vt[e[n+10]]+vt[e[n+11]]+vt[e[n+12]]+vt[e[n+13]]+vt[e[n+14]]+vt[e[n+15]]).toLowerCase();if(!gt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var kt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const At=Object.keys(kt),Mt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(kt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return At.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Et={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ct=new RegExp(`(${Object.keys(Et).join("|")})`,"g");function jt(e="yyyy-MM-dd"){return Ot(Rt(),e)}function Ot(e,n){return n.replace(Ct,(function n(t,r){let a=Et[r];return"function"==typeof a?a(e):a in Et?n(t,a):e[a]()}))}function Rt(e=new Date(0),n=new Date){return new Date(An(e.getTime(),n.getTime()))}let St=0;const _t=function(e){return St+=+e||1},Tt=_t;function Ft(e,n,t,r){return void 0===t?Mn(e,n):void 0===r?t:Mn(parseInt(t,10),parseInt(r,10))}function qt(e,n){var t=Ft(12,18,e,n);return Ve([...Array(t)].map((()=>Dt())).join(""))+"."}function Dt(e,n){var t=Ft(3,10,e,n);return[...Array(t)].map((()=>jn("lower"))).join("")}function Pt(e,n){var t=Ft(12,18,e,n);return[...Array(t)].map((()=>Lt())).join("")+"。"}function Lt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Mn(n,t));break;case 3:[a,n,t]=e,r=Mn(n,t)}const o=a.length;return 1===r?a.charAt(Mn(0,o)):[...Array(r)].map((()=>a.charAt(Mn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Nt(){return Vn(Ht)}function It(e){return`${Dt()}.${e||$t()}`}function $t(){return Vn(zt)}var Ut={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Bt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Gt,_screenSize:Wt,_videoSize:Xt}=Ut;const Kt=Object.keys(Bt);function Yt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Vn(Gt)),r=(r||at()).replace(/^#/,""),t=(t||at()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Jt=["东北","华北","华东","华中","华南","西南","西北"];var Vt=Object.freeze({__proto__:null,integer:An,isNumber:function(e){return"number"==typeof e&&!isNaN(e)},random:ln,natural:Mn,int:An,boolean:En,bool:En,character:jn,char:jn,string:On,str:On,range:fn,float:function(e,n,t,r){let a=ln(t,r,!1);return ln(e,n,a)},color:function(e){return e||Jn[e]?Jn[e].nicer:Vn(nt).hex},hex:at,rgb:function(){return rt().hsv().string()},rgba:function(){return rt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return rt().hsl().string()},_goldenRatioColor:rt,first:ht,last:st,name:function(e){return e=e?` ${ht()} `:" ",`${ht()}${e}${st()}`},cfirst:ft,clast:mt,cname:function(){return ft()+mt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Vn,shuffle:Zn,order:et,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return wt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:wt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Vn(Mt).id+jt("yyyyMMdd")+On("number",3);for(var r=0;rqt()))},word:Dt,sentence:qt,title:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Ve(Dt()))).join("")},ctitle:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},csentence:Pt,cparagraph:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Pt())).join("")},cword:Lt,protocol:Nt,domain:It,tld:$t,email:function(e){return`${jn("lower")}.${Dt()}@${e||Dt()+"."+$t()}`},ip:function(){return[...Array(4)].map((()=>Mn(0,255))).join(".")},url:function(e,n){return`${e||Nt()}://${n||It()}/${Dt()}`},_patternLetters:Et,_rformat:Ct,_formatDate:Ot,_randomDate:Rt,time:function(e="HH:mm:ss"){return jt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return jt(e)},date:jt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ot(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Rt(e,n).getTime():Rt().getTime()},_adSize:Gt,_screenSize:Wt,_videoSize:Xt,image:Yt,img:Yt,_brandColors:Bt,_brandNames:Kt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Vn(Gt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Bt[Vn(Kt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Vn(Jt)},province:function(){return Vn(Mt).name},city:function(e){var n=Vn(Mt),t=Vn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Vn(Mt),t=Vn(n.children),r=Vn(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Mn(0,9);return n}}),Zt={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Qt(e=""){"string"!=typeof e&&(e+="");var n=e.match(Zt.RE_KEY),t=n&&n[3]&&n[3].match(Zt.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?An(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Zt.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||An(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function er({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Vn(Ir(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Ir(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Ir(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Ir(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function nr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?En(n,e,r):r}function tr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function rr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;if(e){let[e,a]=(""+o).split(".");for(e=n?t:e,a=(a||"").slice(0,r);a.length{let t=n.replace(Zt.RE_KEY,"$1");l[t]=Ir(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(Zt.RE_KEY,"$1");l[t]=Ir(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(Zt.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function or(e){this.type=e,this.offset=or.offset(),this.text=or.text()}function ur(e,n){or.call(this,"alternate"),this.left=e,this.right=n}function lr(e){or.call(this,"match"),this.body=e.filter(Boolean)}function ir(e,n){or.call(this,e),this.body=n}function cr(e){ir.call(this,"capture-group"),this.index=kr[this.offset]||(kr[this.offset]=wr++),this.body=e}function hr(e,n){or.call(this,"quantified"),this.body=e,this.quantifier=n}function sr(e,n){or.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function fr(e,n){or.call(this,"charset"),this.invert=e,this.body=n}function mr(e,n){or.call(this,"range"),this.start=e,this.end=n}function dr(e){or.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function pr(e){or.call(this,"unicode"),this.code=e.toUpperCase()}function xr(e){or.call(this,"hex"),this.code=e.toUpperCase()}function br(e){or.call(this,"octal"),this.code=e.toUpperCase()}function gr(e){or.call(this,"back-reference"),this.code=e.toUpperCase()}function vr(e){or.call(this,"control-character"),this.code=e.toUpperCase()}var yr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Tt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ft?(t=Ft,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new ur(e,n[1]):e},me=function(e,n,t){return new lr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new or("start")},be="$",ge='"$"',ve=function(){return new or("end")},ye=function(e,n){return new hr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new sr(e,n)},Se=",}",_e='",}"',Te=function(e){return new sr(e,1/0)},Fe=function(e){return new sr(e,e)},qe="+",De='"+"',Pe=function(){return new sr(1,1/0)},Le="*",He='"*"',ze=function(){return new sr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new sr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new ir("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new ir("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new ir("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new fr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new mr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new dr(e)},kn=".",An='"."',Mn=function(){return new or("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new or("backspace")},_n=function(){return new or("word-boundary")},Tn="\\B",Fn='"\\\\B"',qn=function(){return new or("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new or("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new or("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new or("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new or("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new or("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new or("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new or("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new or("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new or("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new or("word")},st="\\W",ft='"\\\\W"',mt=function(){return new or("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new vr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new gr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new br(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Tt=function(e){return new xr(e.join(""))},Ft="\\u",qt='"\\\\u"',Dt=function(e){return new pr(e.join(""))},Pt=function(){return new or("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(or.offset=r,or.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Ar.gen=function(e,n,t){return t=t||{guid:1},Ar[e.type]?Ar[e.type](e,n,t):Ar.token(e,n,t)},Ar.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return jn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Vn(Cr.split(""));case"non-digit":return Vn((Mr+Er+jr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Vn(Rr.split(""));case"non-white-space":return Vn((Mr+Er+Cr).split(""));case"tab":case"vertical-tab":break;case"word":return Vn((Mr+Er+Cr).split(""));case"non-word":return Vn(jr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(En()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Dr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return qr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Ir(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Vt)&&!(u in Vt))return e;for(var i=0;i{if(/^\\/.test(t))return void n.splice(o--,1);let l=Lr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return u=l,!0;u=u.replace(t,l)}))}else u=n?On(t):o;return u}var zr=Object.freeze({__proto__:null,array:er,boolean:nr,function:tr,number:rr,object:ar,regexp:Fr,string:Hr});let Nr=1;function Ir(e,n="",t={}){var r={path:t.path||[Nr],templatePath:t.templatePath||[Nr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=zr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Zt.RE_KEY,"$1"):n,rule:Qt(n),context:r}),r.root||(r.root=u),u):e}var $r={gen:Ir,extend:gn};function Ur(e,n,t=[]){var r={name:"string"==typeof n?n.replace(Zt.RE_KEY,"$1"):n,template:e,type:bn(e),rule:Qt.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Ur(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Ur(e,n,r.path)))}return r}function Br(e,n){for(var t=Ur(e),r=Gr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Lr,getValueByKeyPath:qr,normalizePath:Dr,splitPathToArray:Pr});var Gr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Wr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(Zt.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Wr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Wr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(Zt.RE_PLACEHOLDER))return r.length===o}return Wr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Wr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Wr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Wr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Wr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Wr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Wr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Wr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Wr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Wr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Wr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Wr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Wr.equal("properties length",e.path,u.length,o.min,r)):Wr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Wr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Wr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Wr.message(u),a.push(u),!1}};Br.Diff=Gr,Br.Assert=Wr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Xr,Kr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Yr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Jr="timeout withCredentials".split(" "),Vr="readyState responseURL status statusText responseType response responseText responseXML".split(" "),Zr="OK";function Qr(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}Qr._settings={timeout:"10-100"},Qr.setup=function(e){return Te(Qr._settings,e),Qr._settings},Te(Qr,Kr),Te(Qr.prototype,Kr),Qr.prototype.mock=!0,Qr.prototype.match=!1,Te(Qr.prototype,{open:function(e,n,t=!0,r,a){var o=this;Te(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(Qr._settings.timeout);var u=function(e){for(var n in Qr.Mock._mocked){var t=Qr.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===bn(e)?e===n:"regexp"===bn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;n0){if(++U>=800)return arguments[0]}else U=0;return $.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function K(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function te(e){return null!=e&&ne(e.length)&&!O(e)}function re(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?te(t)&&K(n,t.length):"string"==r&&n in t)&&J(t[n],e)}var ae=Object.prototype;function oe(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ae)}function ue(e){return s(e)&&"[object Arguments]"==h(e)}var le=Object.prototype,ie=le.hasOwnProperty,ce=le.propertyIsEnumerable,he=ue(function(){return arguments}())?ue:function(e){return s(e)&&ie.call(e,"callee")&&!ce.call(e,"callee")};var se="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=se&&"object"==typeof module&&module&&!module.nodeType&&module,me=fe&&fe.exports===se?t.Buffer:void 0,de=(me?me.isBuffer:void 0)||function(){return!1},pe={};function xe(e){return function(n){return e(n)}}pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe["[object Arguments]"]=pe["[object Array]"]=pe["[object ArrayBuffer]"]=pe["[object Boolean]"]=pe["[object DataView]"]=pe["[object Date]"]=pe["[object Error]"]=pe["[object Function]"]=pe["[object Map]"]=pe["[object Number]"]=pe["[object Object]"]=pe["[object RegExp]"]=pe["[object Set]"]=pe["[object String]"]=pe["[object WeakMap]"]=!1;var be="object"==typeof exports&&exports&&!exports.nodeType&&exports,ge=be&&"object"==typeof module&&module&&!module.nodeType&&module,ve=ge&&ge.exports===be&&e.process,ye=function(){try{var e=ge&&ge.require&&ge.require("util").types;return e||ve&&ve.binding&&ve.binding("util")}catch(e){}}(),we=ye&&ye.isTypedArray,ke=we?xe(we):function(e){return s(e)&&ne(e.length)&&!!pe[h(e)]},Ae=Object.prototype.hasOwnProperty;function Me(e,n){var t=d(e),r=!t&&he(e),a=!t&&!r&&de(e),o=!t&&!r&&!a&&ke(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Se.length>3&&"function"==typeof a?(r--,a):void 0,o&&re(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=an();return rn(e+a*(n-e+tn("1e-"+((a+"").length-1))),n)}return nn(e,n)}var un=Math.ceil,ln=Math.max;var cn,hn=function(e,n,t){return t&&"number"!=typeof t&&re(e,n,t)&&(n=t=void 0),e=C(e),void 0===n?(n=e,e=0):n=C(n),function(e,n,t,r){for(var a=-1,o=ln(un((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;re?!t:t:on(10,-10)>0},Mn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Mn.alpha=Mn.lower+Mn.upper,Mn.default=Mn.lower+Mn.upper+Mn.number+Mn.symbol;const En=function(e="default"){return Mn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Mn[e.toLowerCase()]),e.charAt(kn(0,e.length-1))},Cn=function(...e){var n,t,r,a;switch(e.length){case 0:n=kn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=kn(r,a));break;case 3:[t,r,a]=e,n=kn(r,a)}return[...Array(n).keys()].map((()=>En(t))).join("")};function jn(e,n){return e(n={exports:{}},n.exports),n.exports}var On={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Rn=jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Sn=jn((function(e){var n={};for(var t in On)On.hasOwnProperty(t)&&(n[On[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=On[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Rn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Rn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Rn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Rn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Rn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Sn.to,Sn.get;var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Tn=jn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in _n)if(_n.hasOwnProperty(l)){var i=_n[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Fn(e){var n=function(){for(var e={},n=Object.keys(Tn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Ln=Pn,Hn=[].slice,zn=["keyword","gray","hex"],Nn={};Object.keys(Ln).forEach((function(e){Nn[Hn.call(Ln[e].labels).sort().join("")]=e}));var In={};function $n(e,n){if(!(this instanceof $n))return new $n(e,n);if(n&&n in zn&&(n=null),n&&!(n in Ln))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof $n)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Sn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Ln[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Ln[this.model].channels;var o=Hn.call(e,0,r);this.color=Wn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Nn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Nn[l];var i=Ln[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return $n.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return $n.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Ln).forEach((function(e){if(-1===zn.indexOf(e)){var n=Ln[e].channels;$n.prototype[e]=function(){if(this.model===e)return new $n(this);if(arguments.length)return new $n(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new $n(Gn(Ln[this.model][e].raw(this.color)).concat(t),e)},$n[e]=function(t){return"number"==typeof t&&(t=Wn(Hn.call(arguments),n)),new $n(t,e)}}}));var Xn=$n,Kn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Yn=function(...e){let[n,t,r]=e;return n instanceof Array?(void 0===t&&(t=1),void 0===r&&(r=t)):(n=e,t=1,r=1),1===t&&1===r?n[kn(0,n.length-1)]:Jn(n,t,r)},Jn=function(e,n,t){let r=dn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(0,kn(n,t))}},Vn={},Zn=function(...e){1===e.length&&(e=e[0]);var n=Zn.options.context.templatePath.join("."),t=Vn[n]=Vn[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Qn=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let et;function nt(e,n){return et=et||Math.random(),et+=.618033988749895,et%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Xn.hsv(360*et,100*e,100*n)}function tt(){return nt().hex()}var rt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:at,lastName:ot,cfirstName:ut,clastName:lt}=rt;function it(){var e=at.male.concat();return Yn(e)}function ct(){return Yn(ot)}function ht(){return Yn(ut)}function st(){return Yn(lt)}var ft,mt=new Uint8Array(16);function dt(){if(!ft&&!(ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ft(mt)}var pt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function xt(e){return"string"==typeof e&&pt.test(e)}for(var bt=[],gt=0;gt<256;++gt)bt.push((gt+256).toString(16).substr(1));function vt(e,n,t){var r=(e=e||{}).random||(e.rng||dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(bt[e[n+0]]+bt[e[n+1]]+bt[e[n+2]]+bt[e[n+3]]+"-"+bt[e[n+4]]+bt[e[n+5]]+"-"+bt[e[n+6]]+bt[e[n+7]]+"-"+bt[e[n+8]]+bt[e[n+9]]+"-"+bt[e[n+10]]+bt[e[n+11]]+bt[e[n+12]]+bt[e[n+13]]+bt[e[n+14]]+bt[e[n+15]]).toLowerCase();if(!xt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var yt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const wt=Object.keys(yt),kt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(yt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return wt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var At={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Mt=new RegExp(`(${Object.keys(At).join("|")})`,"g");function Et(e="yyyy-MM-dd"){return Ct(jt(),e)}function Ct(e,n){return n.replace(Mt,(function n(t,r){let a=At[r];return"function"==typeof a?a(e):a in At?n(t,a):e[a]()}))}function jt(e=new Date(0),n=new Date){return new Date(wn(e.getTime(),n.getTime()))}let Ot=0;const Rt=function(e){return Ot+=+e||1},St=Rt;function _t(e,n,t,r){return void 0===t?kn(e,n):void 0===r?t:kn(parseInt(t,10),parseInt(r,10))}function Tt(e,n){var t=_t(12,18,e,n);return Ye([...Array(t)].map((()=>Ft())).join(""))+"."}function Ft(e,n){var t=_t(3,10,e,n);return[...Array(t)].map((()=>En("lower"))).join("")}function qt(e,n){var t=_t(12,18,e,n);return[...Array(t)].map((()=>Dt())).join("")+"。"}function Dt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=kn(n,t));break;case 3:[a,n,t]=e,r=kn(n,t)}const o=a.length;return 1===r?a.charAt(kn(0,o)):[...Array(r)].map((()=>a.charAt(kn(0,o)))).join("")}const Pt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Lt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Ht(){return Yn(Pt)}function zt(e){return`${Ft()}.${e||Nt()}`}function Nt(){return Yn(Lt)}var It={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},$t={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Ut,_screenSize:Bt,_videoSize:Gt}=It;const Wt=Object.keys($t);function Xt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Yn(Ut)),r=(r||tt()).replace(/^#/,""),t=(t||tt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Kt=["东北","华北","华东","华中","华南","西南","西北"];var Yt=Object.freeze({__proto__:null,integer:wn,isNumber:function(e){return"number"==typeof e&&!isNaN(e)},random:on,natural:kn,int:wn,boolean:An,bool:An,character:En,char:En,string:Cn,str:Cn,range:hn,float:function(e,n,t,r){let a=on(t,r,!1);return on(e,n,a)},color:function(e){return e||Kn[e]?Kn[e].nicer:Yn(Qn).hex},hex:tt,rgb:function(){return nt().hsv().string()},rgba:function(){return nt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return nt().hsl().string()},_goldenRatioColor:nt,first:it,last:ct,name:function(e){return e=e?` ${it()} `:" ",`${it()}${e}${ct()}`},cfirst:ht,clast:st,cname:function(){return ht()+st()},capitalize:Ye,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Yn,shuffle:Jn,order:Zn,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:vt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Yn(kt).id+Et("yyyyMMdd")+Cn("number",3);for(var r=0;rTt()))},word:Ft,sentence:Tt,title:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>Ye(Ft()))).join("")},ctitle:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>Dt())).join("")},csentence:qt,cparagraph:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>qt())).join("")},cword:Dt,protocol:Ht,domain:zt,tld:Nt,email:function(e){return`${En("lower")}.${Ft()}@${e||Ft()+"."+Nt()}`},ip:function(){return[...Array(4)].map((()=>kn(0,255))).join(".")},url:function(e,n){return`${e||Ht()}://${n||zt()}/${Ft()}`},_patternLetters:At,_rformat:Mt,_formatDate:Ct,_randomDate:jt,time:function(e="HH:mm:ss"){return Et(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Et(e)},date:Et,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ct(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?jt(e,n).getTime():jt().getTime()},_adSize:Ut,_screenSize:Bt,_videoSize:Gt,image:Xt,img:Xt,_brandColors:$t,_brandNames:Wt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Yn(Ut)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=$t[Yn(Wt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Yn(Kt)},province:function(){return Yn(kt).name},city:function(e){var n=Yn(kt),t=Yn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Yn(kt),t=Yn(n.children),r=Yn(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=kn(0,9);return n}}),Jt={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Vt(e=""){"string"!=typeof e&&(e+="");var n=e.match(Jt.RE_KEY),t=n&&n[3]&&n[3].match(Jt.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?wn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Jt.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||wn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function Zt({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Yn(zr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=zr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(zr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(zr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function Qt({rule:{max:e,min:n,parameters:t},template:r=""}){return t?An(n,e,r):r}function er(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function nr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;if(e){let[e,a]=(""+o).split(".");for(e=n?t:e,a=(a||"").slice(0,r);a.length{let t=n.replace(Jt.RE_KEY,"$1");l[t]=zr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(Jt.RE_KEY,"$1");l[t]=zr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(Jt.RE_KEY);i&&i[2]&&"number"===pn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function rr(e){this.type=e,this.offset=rr.offset(),this.text=rr.text()}function ar(e,n){rr.call(this,"alternate"),this.left=e,this.right=n}function or(e){rr.call(this,"match"),this.body=e.filter(Boolean)}function ur(e,n){rr.call(this,e),this.body=n}function lr(e){ur.call(this,"capture-group"),this.index=yr[this.offset]||(yr[this.offset]=vr++),this.body=e}function ir(e,n){rr.call(this,"quantified"),this.body=e,this.quantifier=n}function cr(e,n){rr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function hr(e,n){rr.call(this,"charset"),this.invert=e,this.body=n}function sr(e,n){rr.call(this,"range"),this.start=e,this.end=n}function fr(e){rr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function mr(e){rr.call(this,"unicode"),this.code=e.toUpperCase()}function dr(e){rr.call(this,"hex"),this.code=e.toUpperCase()}function pr(e){rr.call(this,"octal"),this.code=e.toUpperCase()}function xr(e){rr.call(this,"back-reference"),this.code=e.toUpperCase()}function br(e){rr.call(this,"control-character"),this.code=e.toUpperCase()}var gr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Tt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ft?(t=Ft,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new ar(e,n[1]):e},me=function(e,n,t){return new or([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new rr("start")},be="$",ge='"$"',ve=function(){return new rr("end")},ye=function(e,n){return new ir(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new cr(e,n)},Se=",}",_e='",}"',Te=function(e){return new cr(e,1/0)},Fe=function(e){return new cr(e,e)},qe="+",De='"+"',Pe=function(){return new cr(1,1/0)},Le="*",He='"*"',ze=function(){return new cr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new cr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new lr(e)},Ze="?:",Qe='"?:"',en=function(e){return new ur("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new ur("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new ur("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new hr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new sr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new fr(e)},kn=".",An='"."',Mn=function(){return new rr("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new rr("backspace")},_n=function(){return new rr("word-boundary")},Tn="\\B",Fn='"\\\\B"',qn=function(){return new rr("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new rr("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new rr("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new rr("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new rr("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new rr("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new rr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new rr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new rr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new rr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new rr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new rr("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new br(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new xr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new pr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Tt=function(e){return new dr(e.join(""))},Ft="\\u",qt='"\\\\u"',Dt=function(e){return new mr(e.join(""))},Pt=function(){return new rr("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(rr.offset=r,rr.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}wr.gen=function(e,n,t){return t=t||{guid:1},wr[e.type]?wr[e.type](e,n,t):wr.token(e,n,t)},wr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return En();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Yn(Mr.split(""));case"non-digit":return Yn((kr+Ar+Er).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Yn(jr.split(""));case"non-white-space":return Yn((kr+Ar+Mr).split(""));case"tab":case"vertical-tab":break;case"word":return Yn((kr+Ar+Mr).split(""));case"non-word":return Yn(Er.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(An()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Fr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Tr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=zr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Yt)&&!(u in Yt))return e;for(var i=0;i{if(/^\\/.test(t))return void n.splice(o--,1);let l=Dr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return u=l,!0;u=u.replace(t,l)}))}else u=n?Cn(t):o;return u}var Lr=Object.freeze({__proto__:null,array:Zt,boolean:Qt,function:er,number:nr,object:tr,regexp:_r,string:Pr});let Hr=1;function zr(e,n="",t={}){var r={path:t.path||[Hr],templatePath:t.templatePath||[Hr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=pn(e);let o=Lr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Jt.RE_KEY,"$1"):n,rule:Vt(n),context:r}),r.root||(r.root=u),u):e}var Nr={gen:zr,extend:xn};function Ir(e,n,t=[]){var r={name:"string"==typeof n?n.replace(Jt.RE_KEY,"$1"):n,template:e,type:pn(e),rule:Vt.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Ir(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Ir(e,n,r.path)))}return r}function $r(e,n){for(var t=Ir(e),r=Ur.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Dr,getValueByKeyPath:Tr,normalizePath:Fr,splitPathToArray:qr});var Ur={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Br.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(Jt.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Br.equal("type",e.path,pn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Br.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(Jt.RE_PLACEHOLDER))return r.length===o}return Br.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Br.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Br.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Br.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Br.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Br.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Br.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Br.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Br.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Br.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=vn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Br.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Br.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Br.equal("properties length",e.path,u.length,o.min,r)):Br.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Br.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Br.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Br.message(u),a.push(u),!1}};$r.Diff=Ur,$r.Assert=Br,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Gr,Wr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Xr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Kr="timeout withCredentials".split(" "),Yr="readyState responseURL status statusText responseType response responseText responseXML".split(" "),Jr="OK";function Vr(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}Vr._settings={timeout:"10-100"},Vr.setup=function(e){return _e(Vr._settings,e),Vr._settings},_e(Vr,Wr),_e(Vr.prototype,Wr),Vr.prototype.mock=!0,Vr.prototype.match=!1,_e(Vr.prototype,{open:function(e,n,t=!0,r,a){var o=this;_e(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(Vr._settings.timeout);var u=function(e){for(var n in Vr.Mock._mocked){var t=Vr.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===pn(e)?e===n:"regexp"===pn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;n Date: Sat, 12 Jun 2021 22:14:43 +0800 Subject: [PATCH 13/65] bug --- index.html | 2 +- rollup.config.build.js | 2 +- rollup.config.dev.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 64427af5..269439cd 100644 --- a/index.html +++ b/index.html @@ -11,6 +11,6 @@ - + \ No newline at end of file diff --git a/rollup.config.build.js b/rollup.config.build.js index 55217a37..56696002 100644 --- a/rollup.config.build.js +++ b/rollup.config.build.js @@ -14,7 +14,7 @@ export default { }, { // 打包出口 - file: "./dist/Mock.min.js", + file: "./dist/mock.min.js", format: "iife", name: "Mock", }, diff --git a/rollup.config.dev.js b/rollup.config.dev.js index ad14ebcf..cd52ceaf 100644 --- a/rollup.config.dev.js +++ b/rollup.config.dev.js @@ -13,7 +13,7 @@ export default { }, { // 打包出口 - file: "./dist/Mock.min.js", + file: "./dist/mock.min.js", format: "iife", name: "Mock", }, From ac23b25c8c0ef43a50e18e7bdd5b7b587f14ff81 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 12 Jun 2021 22:14:52 +0800 Subject: [PATCH 14/65] 0.9.1 --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 784ffed5..fabb8d1c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.0", + "version": "0.9.1", "homepage": "http://mockjs.com/", "keywords": [ "mock", @@ -14,7 +14,8 @@ { "type": "MIT", "url": "https://github.com/nuysoft/Mock/blob/master/MIT-LICENSE.txt" - },{ + }, + { "type": "MIT", "url": "https://gitee.com/dongzhongzhidong/Mock/LICENSE" } From 5d283ed3f25a49850d60203e421237521259d698 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 12 Jun 2021 22:28:01 +0800 Subject: [PATCH 15/65] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/README.md b/README.md index 67bd06ab..51208ac1 100644 --- a/README.md +++ b/README.md @@ -30,3 +30,17 @@ Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](htt ```js Mock.mock('@timestamp') // 生成数字型的 timestamp ``` + +## 从 Mockjs 迁移到 Mockjs-esm + +不用修改任何的 API ,只需要改变 Mockjs 的引用方式即可。 + +```html + +``` + +## 作者的闲聊 + +Mockjs 无疑是一个非常优秀的开源库,这个开源库在模块化思想还没有开始流行,运用类似 jQuery 的编程结构完成了对 Mockjs 的编写,作者的功底很深厚,几乎每个代码文件都有 500 多行,大量运用函数重载,但是整个 Mockjs 的 bug 出奇的少,足见其对于整个项目的理解。 + +我想要对 Mockjs 进行修改的原因是我的前端爬虫项目需要一个前端的 API 后台,而 Mockjs 对 fetch 这个已经流行了很久的新 API 没有进行适配!所以我下定决心将 Mockjs 全部使用 esm 模块化的方式对源代码进行了重写,重写过程中发现了很多不严谨的地方也加以了限制,对于某些底层的繁复的代码使用 lodash 的函数进行了替代。完善后的 Mockjs 是完全可以运行在浏览器端的,而且完整地运行相应地函数。 From 56e10a6bcf6491652d62d959b8c136aa7cdd0806 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sun, 13 Jun 2021 16:32:06 +0800 Subject: [PATCH 16/65] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20float=20BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 6 +++--- dist/mock.js | 6 +++--- src/mock/handle/number.js | 14 ++++---------- src/mock/handle/placeholder.js | 18 ++++++++++-------- src/mock/handle/string.js | 8 +++----- src/mock/random/address.js | 2 +- src/mock/random/basic.js | 1 - src/mock/random/basic/float.js | 6 ------ src/mock/random/basic/number.js | 27 ++++++++++++++++++++++++--- src/mock/random/file.js | 19 +++++++++++++++++++ src/mock/random/helper.js | 24 ++++++++---------------- src/mock/random/index.js | 1 + test/allTemplate.js | 4 ---- test/fakeServer.js | 12 ++++++++++++ test/index.html | 6 +++--- 15 files changed, 91 insertions(+), 63 deletions(-) delete mode 100644 src/mock/random/basic/float.js create mode 100644 src/mock/random/file.js delete mode 100644 test/allTemplate.js create mode 100644 test/fakeServer.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 300b225d..8cd79542 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -48,9 +48,9 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++B>=800)return arguments[0]}else B=0;return U.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!R(e)}function ae(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&V(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return s(e)&&"[object Arguments]"==h(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return s(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},xe={};function be(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?be(ke):function(e){return s(e)&&te(e.length)&&!!xe[h(e)]},Me=Object.prototype.hasOwnProperty;function Ee(e,n){var t=d(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=un();return on(e+a*(n-e+an("1e-"+((a+"").length-1))),n)}return rn(e,n)}var cn=Math.ceil,hn=Math.max;var sn,fn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=hn(cn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r0){if(++B>=800)return arguments[0]}else B=0;return U.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!R(e)}function ae(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&V(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return s(e)&&"[object Arguments]"==h(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return s(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},xe={};function be(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?be(ke):function(e){return s(e)&&te(e.length)&&!!xe[h(e)]},Me=Object.prototype.hasOwnProperty;function Ee(e,n){var t=d(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=un();return on(e+a*(n-e+an("1e-"+((a+"").length-1))),n)}return rn(e,n)}var cn=Math.ceil,hn=Math.max;var sn,fn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=hn(cn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=ln(t,r,!1);return parseFloat(ln(e,n,!0).toFixed(a))},Rn=function(e,n,t){ //! cur:boolean 是划分概率的一个启动符号 -return t?ln(0,e+n)>e?!t:t:ln(10,-10)>0},Cn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Cn.alpha=Cn.lower+Cn.upper,Cn.default=Cn.lower+Cn.upper+Cn.number+Cn.symbol;const jn=function(e="default"){return Cn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Cn[e.toLowerCase()]),e.charAt(Mn(0,e.length-1))},On=function(...e){var n,t,r,a;switch(e.length){case 0:n=Mn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Mn(r,a));break;case 3:[t,r,a]=e,n=Mn(r,a)}return[...Array(n).keys()].map((()=>jn(t))).join("")};function Rn(e,n){return e(n={exports:{}},n.exports),n.exports}var Sn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Rn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Tn=Rn((function(e){var n={};for(var t in Sn)Sn.hasOwnProperty(t)&&(n[Sn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Sn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Tn.to,Tn.get;var Fn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=Rn((function(e){var n={};for(var t in Fn)Fn.hasOwnProperty(t)&&(n[Fn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Fn)if(Fn.hasOwnProperty(l)){var i=Fn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Dn(e){var n=function(){for(var e={},n=Object.keys(qn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var zn=Hn,Nn=[].slice,In=["keyword","gray","hex"],$n={};Object.keys(zn).forEach((function(e){$n[Nn.call(zn[e].labels).sort().join("")]=e}));var Un={};function Bn(e,n){if(!(this instanceof Bn))return new Bn(e,n);if(n&&n in In&&(n=null),n&&!(n in zn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Bn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Tn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=zn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=zn[this.model].channels;var o=Nn.call(e,0,r);this.color=Kn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in $n))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=$n[l];var i=zn[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Bn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Bn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(zn).forEach((function(e){if(-1===In.indexOf(e)){var n=zn[e].channels;Bn.prototype[e]=function(){if(this.model===e)return new Bn(this);if(arguments.length)return new Bn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Bn(Xn(zn[this.model][e].raw(this.color)).concat(t),e)},Bn[e]=function(t){return"number"==typeof t&&(t=Kn(Nn.call(arguments),n)),new Bn(t,e)}}}));var Yn=Bn,Jn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Vn=function(...e){let[n,t,r]=e;return n instanceof Array?(void 0===t&&(t=1),void 0===r&&(r=t)):(n=e,t=1,r=1),1===t&&1===r?n[Mn(0,n.length-1)]:Zn(n,t,r)},Zn=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(0,Mn(n,t))}},Qn={},et=function(...e){1===e.length&&(e=e[0]);var n=et.options.context.templatePath.join("."),t=Qn[n]=Qn[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var nt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let tt;function rt(e,n){return tt=tt||Math.random(),tt+=.618033988749895,tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Yn.hsv(360*tt,100*e,100*n)}function at(){return rt().hex()}var ot={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ut,lastName:lt,cfirstName:it,clastName:ct}=ot;function ht(){var e=ut.male.concat();return Vn(e)}function st(){return Vn(lt)}function ft(){return Vn(it)}function mt(){return Vn(ct)}var dt,pt=new Uint8Array(16);function xt(){if(!dt&&!(dt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return dt(pt)}var bt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function gt(e){return"string"==typeof e&&bt.test(e)}for(var vt=[],yt=0;yt<256;++yt)vt.push((yt+256).toString(16).substr(1));function wt(e,n,t){var r=(e=e||{}).random||(e.rng||xt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(vt[e[n+0]]+vt[e[n+1]]+vt[e[n+2]]+vt[e[n+3]]+"-"+vt[e[n+4]]+vt[e[n+5]]+"-"+vt[e[n+6]]+vt[e[n+7]]+"-"+vt[e[n+8]]+vt[e[n+9]]+"-"+vt[e[n+10]]+vt[e[n+11]]+vt[e[n+12]]+vt[e[n+13]]+vt[e[n+14]]+vt[e[n+15]]).toLowerCase();if(!gt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var kt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const At=Object.keys(kt),Mt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(kt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return At.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Et={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ct=new RegExp(`(${Object.keys(Et).join("|")})`,"g");function jt(e="yyyy-MM-dd"){return Ot(Rt(),e)}function Ot(e,n){return n.replace(Ct,(function n(t,r){let a=Et[r];return"function"==typeof a?a(e):a in Et?n(t,a):e[a]()}))}function Rt(e=new Date(0),n=new Date){return new Date(An(e.getTime(),n.getTime()))}let St=0;const _t=function(e){return St+=+e||1},Tt=_t;function Ft(e,n,t,r){return void 0===t?Mn(e,n):void 0===r?t:Mn(parseInt(t,10),parseInt(r,10))}function qt(e,n){var t=Ft(12,18,e,n);return Ve([...Array(t)].map((()=>Dt())).join(""))+"."}function Dt(e,n){var t=Ft(3,10,e,n);return[...Array(t)].map((()=>jn("lower"))).join("")}function Pt(e,n){var t=Ft(12,18,e,n);return[...Array(t)].map((()=>Lt())).join("")+"。"}function Lt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Mn(n,t));break;case 3:[a,n,t]=e,r=Mn(n,t)}const o=a.length;return 1===r?a.charAt(Mn(0,o)):[...Array(r)].map((()=>a.charAt(Mn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Nt(){return Vn(Ht)}function It(e){return`${Dt()}.${e||$t()}`}function $t(){return Vn(zt)}var Ut={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Bt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Gt,_screenSize:Wt,_videoSize:Xt}=Ut;const Kt=Object.keys(Bt);function Yt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Vn(Gt)),r=(r||at()).replace(/^#/,""),t=(t||at()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Jt=["东北","华北","华东","华中","华南","西南","西北"];var Vt=Object.freeze({__proto__:null,integer:An,isNumber:function(e){return"number"==typeof e&&!isNaN(e)},random:ln,natural:Mn,int:An,boolean:En,bool:En,character:jn,char:jn,string:On,str:On,range:fn,float:function(e,n,t,r){let a=ln(t,r,!1);return ln(e,n,a)},color:function(e){return e||Jn[e]?Jn[e].nicer:Vn(nt).hex},hex:at,rgb:function(){return rt().hsv().string()},rgba:function(){return rt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return rt().hsl().string()},_goldenRatioColor:rt,first:ht,last:st,name:function(e){return e=e?` ${ht()} `:" ",`${ht()}${e}${st()}`},cfirst:ft,clast:mt,cname:function(){return ft()+mt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Vn,shuffle:Zn,order:et,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return wt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:wt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Vn(Mt).id+jt("yyyyMMdd")+On("number",3);for(var r=0;rqt()))},word:Dt,sentence:qt,title:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Ve(Dt()))).join("")},ctitle:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},csentence:Pt,cparagraph:function(e,n){var t=Ft(3,7,e,n);return[...Array(t)].map((()=>Pt())).join("")},cword:Lt,protocol:Nt,domain:It,tld:$t,email:function(e){return`${jn("lower")}.${Dt()}@${e||Dt()+"."+$t()}`},ip:function(){return[...Array(4)].map((()=>Mn(0,255))).join(".")},url:function(e,n){return`${e||Nt()}://${n||It()}/${Dt()}`},_patternLetters:Et,_rformat:Ct,_formatDate:Ot,_randomDate:Rt,time:function(e="HH:mm:ss"){return jt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return jt(e)},date:jt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ot(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Rt(e,n).getTime():Rt().getTime()},_adSize:Gt,_screenSize:Wt,_videoSize:Xt,image:Yt,img:Yt,_brandColors:Bt,_brandNames:Kt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Vn(Gt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Bt[Vn(Kt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Vn(Jt)},province:function(){return Vn(Mt).name},city:function(e){var n=Vn(Mt),t=Vn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Vn(Mt),t=Vn(n.children),r=Vn(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Mn(0,9);return n}}),Zt={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Qt(e=""){"string"!=typeof e&&(e+="");var n=e.match(Zt.RE_KEY),t=n&&n[3]&&n[3].match(Zt.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?An(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Zt.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||An(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function er({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Vn(Ir(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Ir(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Ir(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Ir(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function nr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?En(n,e,r):r}function tr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function rr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;if(e){let[e,a]=(""+o).split(".");for(e=n?t:e,a=(a||"").slice(0,r);a.length{let t=n.replace(Zt.RE_KEY,"$1");l[t]=Ir(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(Zt.RE_KEY,"$1");l[t]=Ir(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(Zt.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function or(e){this.type=e,this.offset=or.offset(),this.text=or.text()}function ur(e,n){or.call(this,"alternate"),this.left=e,this.right=n}function lr(e){or.call(this,"match"),this.body=e.filter(Boolean)}function ir(e,n){or.call(this,e),this.body=n}function cr(e){ir.call(this,"capture-group"),this.index=kr[this.offset]||(kr[this.offset]=wr++),this.body=e}function hr(e,n){or.call(this,"quantified"),this.body=e,this.quantifier=n}function sr(e,n){or.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function fr(e,n){or.call(this,"charset"),this.invert=e,this.body=n}function mr(e,n){or.call(this,"range"),this.start=e,this.end=n}function dr(e){or.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function pr(e){or.call(this,"unicode"),this.code=e.toUpperCase()}function xr(e){or.call(this,"hex"),this.code=e.toUpperCase()}function br(e){or.call(this,"octal"),this.code=e.toUpperCase()}function gr(e){or.call(this,"back-reference"),this.code=e.toUpperCase()}function vr(e){or.call(this,"control-character"),this.code=e.toUpperCase()}var yr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Tt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ft?(t=Ft,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new ur(e,n[1]):e},me=function(e,n,t){return new lr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new or("start")},be="$",ge='"$"',ve=function(){return new or("end")},ye=function(e,n){return new hr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new sr(e,n)},Se=",}",_e='",}"',Te=function(e){return new sr(e,1/0)},Fe=function(e){return new sr(e,e)},qe="+",De='"+"',Pe=function(){return new sr(1,1/0)},Le="*",He='"*"',ze=function(){return new sr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new sr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new ir("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new ir("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new ir("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new fr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new mr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new dr(e)},kn=".",An='"."',Mn=function(){return new or("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new or("backspace")},_n=function(){return new or("word-boundary")},Tn="\\B",Fn='"\\\\B"',qn=function(){return new or("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new or("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new or("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new or("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new or("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new or("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new or("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new or("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new or("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new or("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new or("word")},st="\\W",ft='"\\\\W"',mt=function(){return new or("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new vr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new gr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new br(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Tt=function(e){return new xr(e.join(""))},Ft="\\u",qt='"\\\\u"',Dt=function(e){return new pr(e.join(""))},Pt=function(){return new or("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(or.offset=r,or.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Ar.gen=function(e,n,t){return t=t||{guid:1},Ar[e.type]?Ar[e.type](e,n,t):Ar.token(e,n,t)},Ar.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return jn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Vn(Cr.split(""));case"non-digit":return Vn((Mr+Er+jr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Vn(Rr.split(""));case"non-white-space":return Vn((Mr+Er+Cr).split(""));case"tab":case"vertical-tab":break;case"word":return Vn((Mr+Er+Cr).split(""));case"non-word":return Vn(jr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(En()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Dr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return qr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Ir(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Vt)&&!(u in Vt))return e;for(var i=0;i{if(/^\\/.test(t))return void n.splice(o--,1);let l=Lr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return u=l,!0;u=u.replace(t,l)}))}else u=n?On(t):o;return u}var zr=Object.freeze({__proto__:null,array:er,boolean:nr,function:tr,number:rr,object:ar,regexp:Fr,string:Hr});let Nr=1;function Ir(e,n="",t={}){var r={path:t.path||[Nr],templatePath:t.templatePath||[Nr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=zr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Zt.RE_KEY,"$1"):n,rule:Qt(n),context:r}),r.root||(r.root=u),u):e}var $r={gen:Ir,extend:gn};function Ur(e,n,t=[]){var r={name:"string"==typeof n?n.replace(Zt.RE_KEY,"$1"):n,template:e,type:bn(e),rule:Qt.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Ur(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Ur(e,n,r.path)))}return r}function Br(e,n){for(var t=Ur(e),r=Gr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Lr,getValueByKeyPath:qr,normalizePath:Dr,splitPathToArray:Pr});var Gr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Wr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(Zt.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Wr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Wr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(Zt.RE_PLACEHOLDER))return r.length===o}return Wr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Wr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Wr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Wr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Wr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Wr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Wr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Wr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Wr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Wr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Wr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Wr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Wr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Wr.equal("properties length",e.path,u.length,o.min,r)):Wr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Wr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Wr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Wr.message(u),a.push(u),!1}};Br.Diff=Gr,Br.Assert=Wr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Xr,Kr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Yr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Jr="timeout withCredentials".split(" "),Vr="readyState responseURL status statusText responseType response responseText responseXML".split(" "),Zr="OK";function Qr(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}Qr._settings={timeout:"10-100"},Qr.setup=function(e){return Te(Qr._settings,e),Qr._settings},Te(Qr,Kr),Te(Qr.prototype,Kr),Qr.prototype.mock=!0,Qr.prototype.match=!1,Te(Qr.prototype,{open:function(e,n,t=!0,r,a){var o=this;Te(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(Qr._settings.timeout);var u=function(e){for(var n in Qr.Mock._mocked){var t=Qr.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===bn(e)?e===n:"regexp"===bn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;ne?!t:t:ln(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const _n=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Fn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>_n(t))).join("")};function Tn(e,n){return e(n={exports:{}},n.exports),n.exports}var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dn=Tn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=Tn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=qn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Dn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Dn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Dn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var Ln={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Hn=Tn((function(e){var n={};for(var t in Ln)Ln.hasOwnProperty(t)&&(n[Ln[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Ln)if(Ln.hasOwnProperty(l)){var i=Ln[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Hn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=$n,Bn=[].slice,Gn=["keyword","gray","hex"],Wn={};Object.keys(Un).forEach((function(e){Wn[Bn.call(Un[e].labels).sort().join("")]=e}));var Xn={};function Kn(e,n){if(!(this instanceof Kn))return new Kn(e,n);if(n&&n in Gn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Kn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Bn.call(e,0,r);this.color=Zn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Wn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Wn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Kn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Kn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Gn.indexOf(e)){var n=Un[e].channels;Kn.prototype[e]=function(){if(this.model===e)return new Kn(this);if(arguments.length)return new Kn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Kn(Vn(Un[this.model][e].raw(this.color)).concat(t),e)},Kn[e]=function(t){return"number"==typeof t&&(t=Zn(Bn.call(arguments),n)),new Kn(t,e)}}}));var Qn=Kn,et={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const nt=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?tt(e,n,t):tt(e,0,n)},tt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},rt={},at=function(...e){1===e.length&&(e=e[0]);var n=at.options.context.templatePath.join("."),t=rt[n]=rt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ot=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ut;function lt(e,n){return ut=ut||Math.random(),ut+=.618033988749895,ut%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Qn.hsv(360*ut,100*e,100*n)}function it(){return lt().hex()}var ct={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ht,lastName:st,cfirstName:ft,clastName:mt}=ct;function dt(){var e=ht.male.concat();return nt(e)}function pt(){return nt(st)}function xt(){return nt(ft)}function bt(){return nt(mt)}var gt,vt=new Uint8Array(16);function yt(){if(!gt&&!(gt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return gt(vt)}var wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function kt(e){return"string"==typeof e&&wt.test(e)}for(var At=[],Mt=0;Mt<256;++Mt)At.push((Mt+256).toString(16).substr(1));function Et(e,n,t){var r=(e=e||{}).random||(e.rng||yt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(At[e[n+0]]+At[e[n+1]]+At[e[n+2]]+At[e[n+3]]+"-"+At[e[n+4]]+At[e[n+5]]+"-"+At[e[n+6]]+At[e[n+7]]+"-"+At[e[n+8]]+At[e[n+9]]+"-"+At[e[n+10]]+At[e[n+11]]+At[e[n+12]]+At[e[n+13]]+At[e[n+14]]+At[e[n+15]]).toLowerCase();if(!kt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Ct={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Ct),Ot=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Ct).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function _t(e="yyyy-MM-dd"){return Ft(Tt(),e)}function Ft(e,n){return n.replace(St,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function Tt(e=new Date(0),n=new Date){return new Date(Cn(e.getTime(),n.getTime()))}let qt=0;const Dt=function(e){return qt+=+e||1},Pt=Dt;function Lt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Ht(e,n){var t=Lt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=Lt(3,10,e,n);return[...Array(t)].map((()=>_n("lower"))).join("")}function Nt(e,n){var t=Lt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const $t="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return nt($t)}function Gt(e){return`${zt()}.${e||Wt()}`}function Wt(){return nt(Ut)}var Xt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Kt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Yt,_screenSize:Jt,_videoSize:Vt}=Xt;const Zt=Object.keys(Kt);function Qt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=nt(Yt)),r=(r||it()).replace(/^#/,""),t=(t||it()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var er=["东北","华北","华东","华中","华南","西南","西北"];function nr(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var tr=Object.freeze({__proto__:null,integer:Cn,isNumber:Mn,random:ln,natural:jn,int:Cn,float:On,boolean:Rn,bool:Rn,character:_n,char:_n,string:Fn,str:Fn,range:fn,color:function(e){return e||et[e]?et[e].nicer:nt(ot).hex},hex:it,rgb:function(){return lt().hsv().string()},rgba:function(){return lt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return lt().hsl().string()},_goldenRatioColor:lt,first:dt,last:pt,name:function(e){return e=e?` ${dt()} `:" ",`${dt()}${e}${pt()}`},cfirst:xt,clast:bt,cname:function(){return xt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:nt,shuffle:tt,order:at,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Et().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Et,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=nt(Ot).id+_t("yyyyMMdd")+Fn("number",3);for(var r=0;rHt()))},word:zt,sentence:Ht,title:function(e,n){var t=Lt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=Lt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Nt,cparagraph:function(e,n){var t=Lt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},cword:It,protocol:Bt,domain:Gt,tld:Wt,email:function(e){return`${_n("lower")}.${zt()}@${e||zt()+"."+Wt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Gt()}/${zt()}`},_patternLetters:Rt,_rformat:St,_formatDate:Ft,_randomDate:Tt,time:function(e="HH:mm:ss"){return _t(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return _t(e)},date:_t,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ft(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Tt(e,n).getTime():Tt().getTime()},_adSize:Yt,_screenSize:Jt,_videoSize:Vt,image:Qt,img:Qt,_brandColors:Kt,_brandNames:Zt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=nt(Yt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Kt[nt(Zt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return nt(er)},province:function(){return nt(Ot).name},city:function(e){var n=nt(Ot),t=nt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=nt(Ot),t=nt(n.children),r=nt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(nr(e),zt())},genBlob:function(){return new Blob(nr(anyData))}}),rr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function ar(e=""){"string"!=typeof e&&(e+="");var n=e.match(rr.RE_KEY),t=n&&n[3]&&n[3].match(rr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Cn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(rr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Cn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function or({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=nt(Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Wr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Wr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function ur({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function lr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function ir({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=On(n,t,r,a)})):u=n&&!a[2]?t:o,u}function cr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=tt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(rr.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(rr.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(rr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function hr(e){this.type=e,this.offset=hr.offset(),this.text=hr.text()}function sr(e,n){hr.call(this,"alternate"),this.left=e,this.right=n}function fr(e){hr.call(this,"match"),this.body=e.filter(Boolean)}function mr(e,n){hr.call(this,e),this.body=n}function dr(e){mr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Cr++),this.body=e}function pr(e,n){hr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){hr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){hr.call(this,"charset"),this.invert=e,this.body=n}function gr(e,n){hr.call(this,"range"),this.start=e,this.end=n}function vr(e){hr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function yr(e){hr.call(this,"unicode"),this.code=e.toUpperCase()}function wr(e){hr.call(this,"hex"),this.code=e.toUpperCase()}function kr(e){hr.call(this,"octal"),this.code=e.toUpperCase()}function Ar(e){hr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){hr.call(this,"control-character"),this.code=e.toUpperCase()}var Er=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Ft(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Tt?(t=Tt,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new sr(e,n[1]):e},me=function(e,n,t){return new fr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new hr("start")},be="$",ge='"$"',ve=function(){return new hr("end")},ye=function(e,n){return new pr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new xr(e,n)},Se=",}",_e='",}"',Fe=function(e){return new xr(e,1/0)},Te=function(e){return new xr(e,e)},qe="+",De='"+"',Pe=function(){return new xr(1,1/0)},Le="*",He='"*"',ze=function(){return new xr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new xr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new dr(e)},Ze="?:",Qe='"?:"',en=function(e){return new mr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new mr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new mr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new gr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new vr(e)},kn=".",An='"."',Mn=function(){return new hr("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new hr("backspace")},_n=function(){return new hr("word-boundary")},Fn="\\B",Tn='"\\\\B"',qn=function(){return new hr("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new hr("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new hr("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new hr("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new hr("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new hr("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new hr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new hr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new hr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new hr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new hr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new hr("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Ar(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new kr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Ft=function(e){return new wr(e.join(""))},Tt="\\u",qt='"\\\\u"',Dt=function(e){return new yr(e.join(""))},Pt=function(){return new hr("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(hr.offset=r,hr.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Or.gen=function(e,n,t){return t=t||{guid:1},Or[e.type]?Or[e.type](e,n,t):Or.token(e,n,t)},Or.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return _n();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return nt(_r.split(""));case"non-digit":return nt((Rr+Sr+Fr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return nt(qr.split(""));case"non-white-space":return nt((Rr+Sr+_r).split(""));case"tab":case"vertical-tab":break;case"word":return nt((Rr+Sr+_r).split(""));case"non-word":return nt(Fr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Nr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Wr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in tr)&&!(u in tr))return e;o=o.map((e=>(rr.RE_PLACEHOLDER.exec(""),rr.RE_PLACEHOLDER.test(e)?$r(e,n,t,r):e)));var i=tr[a]||tr[u];switch(bn(i)){case"array":return nt(i);case"function":i.options=r;var c=i.apply(tr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(rr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=$r(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return gn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Fn(t):o;return u}var Br=Object.freeze({__proto__:null,array:or,boolean:ur,function:lr,number:ir,object:cr,regexp:Hr,string:Ur});let Gr=1;function Wr(e,n="",t={}){var r={path:t.path||[Gr],templatePath:t.templatePath||[Gr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(rr.RE_KEY,"$1"):n,rule:ar(n),context:r}),r.root||(r.root=u),u):e}var Xr={gen:Wr,extend:vn};function Kr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(rr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:ar.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Kr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Kr(e,n,r.path)))}return r}function Yr(e,n){for(var t=Kr(e),r=Jr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:$r,getValueByKeyPath:zr,normalizePath:Nr,splitPathToArray:Ir});var Jr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(rr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(rr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Yr.Diff=Jr,Yr.Assert=Vr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Zr,Qr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},ea="readystatechange loadstart progress abort error load timeout loadend".split(" "),na="timeout withCredentials".split(" "),ta="readyState responseURL status statusText responseType response responseText responseXML".split(" "),ra="OK";function aa(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}aa._settings={timeout:"10-100"},aa.setup=function(e){return Fe(aa._settings,e),aa._settings},Fe(aa,Qr),Fe(aa.prototype,Qr),aa.prototype.mock=!0,aa.prototype.match=!1,Fe(aa.prototype,{open:function(e,n,t=!0,r,a){var o=this;Fe(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(aa._settings.timeout);var u=function(e){for(var n in aa.Mock._mocked){var t=aa.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===bn(e)?e===n:"regexp"===bn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;ne?!t:t:ln(10,-10)>0},Cn={lower:"abcdefghijklmnopqrstuvwxyz",u 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ - */;var ea={Handler:$r,Random:Vt,Util:kn,XHR:Xr,RE:Tr,toJSONSchema:Ur,valid:Br,heredoc:yn,setup:function(e){return Xr.setup(e)},_mocked:{},version:"1.1.1-es6"};return Xr&&(Xr.Mock=ea),ea.mock=function(...e){let n,t;switch(e.length){case 1:return[t]=e,$r.gen(t);case 2:[n,t]=e;case 3:default:return Xr&&(window.XMLHttpRequest=Xr),ea._mocked[n+""]={rurl:n,rtype:"",template:t},ea}},ea}(); + */;var oa={Handler:Xr,Random:tr,Util:An,XHR:Zr,RE:Lr,toJSONSchema:Kr,valid:Yr,heredoc:wn,setup:function(e){return Zr.setup(e)},_mocked:{},version:"1.1.1-es6"};return Zr&&(Zr.Mock=oa),oa.mock=function(...e){let n,t;switch(e.length){case 1:return[t]=e,Xr.gen(t);case 2:[n,t]=e;case 3:default:return Zr&&(window.XMLHttpRequest=Zr),oa._mocked[n+""]={rurl:n,rtype:"",template:t},oa}},oa}(); diff --git a/dist/mock.js b/dist/mock.js index 3be21890..32b7cb9c 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -48,9 +48,9 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return $.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function K(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function te(e){return null!=e&&ne(e.length)&&!O(e)}function re(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?te(t)&&K(n,t.length):"string"==r&&n in t)&&J(t[n],e)}var ae=Object.prototype;function oe(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ae)}function ue(e){return s(e)&&"[object Arguments]"==h(e)}var le=Object.prototype,ie=le.hasOwnProperty,ce=le.propertyIsEnumerable,he=ue(function(){return arguments}())?ue:function(e){return s(e)&&ie.call(e,"callee")&&!ce.call(e,"callee")};var se="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=se&&"object"==typeof module&&module&&!module.nodeType&&module,me=fe&&fe.exports===se?t.Buffer:void 0,de=(me?me.isBuffer:void 0)||function(){return!1},pe={};function xe(e){return function(n){return e(n)}}pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe["[object Arguments]"]=pe["[object Array]"]=pe["[object ArrayBuffer]"]=pe["[object Boolean]"]=pe["[object DataView]"]=pe["[object Date]"]=pe["[object Error]"]=pe["[object Function]"]=pe["[object Map]"]=pe["[object Number]"]=pe["[object Object]"]=pe["[object RegExp]"]=pe["[object Set]"]=pe["[object String]"]=pe["[object WeakMap]"]=!1;var be="object"==typeof exports&&exports&&!exports.nodeType&&exports,ge=be&&"object"==typeof module&&module&&!module.nodeType&&module,ve=ge&&ge.exports===be&&e.process,ye=function(){try{var e=ge&&ge.require&&ge.require("util").types;return e||ve&&ve.binding&&ve.binding("util")}catch(e){}}(),we=ye&&ye.isTypedArray,ke=we?xe(we):function(e){return s(e)&&ne(e.length)&&!!pe[h(e)]},Ae=Object.prototype.hasOwnProperty;function Me(e,n){var t=d(e),r=!t&&he(e),a=!t&&!r&&de(e),o=!t&&!r&&!a&&ke(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Se.length>3&&"function"==typeof a?(r--,a):void 0,o&&re(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=an();return rn(e+a*(n-e+tn("1e-"+((a+"").length-1))),n)}return nn(e,n)}var un=Math.ceil,ln=Math.max;var cn,hn=function(e,n,t){return t&&"number"!=typeof t&&re(e,n,t)&&(n=t=void 0),e=C(e),void 0===n?(n=e,e=0):n=C(n),function(e,n,t,r){for(var a=-1,o=ln(un((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r0){if(++U>=800)return arguments[0]}else U=0;return $.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function K(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function te(e){return null!=e&&ne(e.length)&&!O(e)}function re(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?te(t)&&K(n,t.length):"string"==r&&n in t)&&J(t[n],e)}var ae=Object.prototype;function oe(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ae)}function ue(e){return s(e)&&"[object Arguments]"==h(e)}var le=Object.prototype,ie=le.hasOwnProperty,ce=le.propertyIsEnumerable,he=ue(function(){return arguments}())?ue:function(e){return s(e)&&ie.call(e,"callee")&&!ce.call(e,"callee")};var se="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=se&&"object"==typeof module&&module&&!module.nodeType&&module,me=fe&&fe.exports===se?t.Buffer:void 0,de=(me?me.isBuffer:void 0)||function(){return!1},pe={};function xe(e){return function(n){return e(n)}}pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe["[object Arguments]"]=pe["[object Array]"]=pe["[object ArrayBuffer]"]=pe["[object Boolean]"]=pe["[object DataView]"]=pe["[object Date]"]=pe["[object Error]"]=pe["[object Function]"]=pe["[object Map]"]=pe["[object Number]"]=pe["[object Object]"]=pe["[object RegExp]"]=pe["[object Set]"]=pe["[object String]"]=pe["[object WeakMap]"]=!1;var be="object"==typeof exports&&exports&&!exports.nodeType&&exports,ge=be&&"object"==typeof module&&module&&!module.nodeType&&module,ve=ge&&ge.exports===be&&e.process,ye=function(){try{var e=ge&&ge.require&&ge.require("util").types;return e||ve&&ve.binding&&ve.binding("util")}catch(e){}}(),we=ye&&ye.isTypedArray,ke=we?xe(we):function(e){return s(e)&&ne(e.length)&&!!pe[h(e)]},Ae=Object.prototype.hasOwnProperty;function Me(e,n){var t=d(e),r=!t&&he(e),a=!t&&!r&&de(e),o=!t&&!r&&!a&&ke(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Se.length>3&&"function"==typeof a?(r--,a):void 0,o&&re(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=an();return rn(e+a*(n-e+tn("1e-"+((a+"").length-1))),n)}return nn(e,n)}var un=Math.ceil,ln=Math.max;var cn,hn=function(e,n,t){return t&&"number"!=typeof t&&re(e,n,t)&&(n=t=void 0),e=C(e),void 0===n?(n=e,e=0):n=C(n),function(e,n,t,r){for(var a=-1,o=ln(un((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=on(t,r,!1);return parseFloat(on(e,n,!0).toFixed(a))},jn=function(e,n,t){ //! cur:boolean 是划分概率的一个启动符号 -return t?on(0,e+n)>e?!t:t:on(10,-10)>0},Mn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Mn.alpha=Mn.lower+Mn.upper,Mn.default=Mn.lower+Mn.upper+Mn.number+Mn.symbol;const En=function(e="default"){return Mn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Mn[e.toLowerCase()]),e.charAt(kn(0,e.length-1))},Cn=function(...e){var n,t,r,a;switch(e.length){case 0:n=kn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=kn(r,a));break;case 3:[t,r,a]=e,n=kn(r,a)}return[...Array(n).keys()].map((()=>En(t))).join("")};function jn(e,n){return e(n={exports:{}},n.exports),n.exports}var On={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Rn=jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Sn=jn((function(e){var n={};for(var t in On)On.hasOwnProperty(t)&&(n[On[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=On[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Rn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Rn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Rn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Rn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Rn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Sn.to,Sn.get;var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Tn=jn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in _n)if(_n.hasOwnProperty(l)){var i=_n[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Fn(e){var n=function(){for(var e={},n=Object.keys(Tn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Ln=Pn,Hn=[].slice,zn=["keyword","gray","hex"],Nn={};Object.keys(Ln).forEach((function(e){Nn[Hn.call(Ln[e].labels).sort().join("")]=e}));var In={};function $n(e,n){if(!(this instanceof $n))return new $n(e,n);if(n&&n in zn&&(n=null),n&&!(n in Ln))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof $n)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Sn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Ln[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Ln[this.model].channels;var o=Hn.call(e,0,r);this.color=Wn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Nn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Nn[l];var i=Ln[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return $n.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return $n.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Ln).forEach((function(e){if(-1===zn.indexOf(e)){var n=Ln[e].channels;$n.prototype[e]=function(){if(this.model===e)return new $n(this);if(arguments.length)return new $n(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new $n(Gn(Ln[this.model][e].raw(this.color)).concat(t),e)},$n[e]=function(t){return"number"==typeof t&&(t=Wn(Hn.call(arguments),n)),new $n(t,e)}}}));var Xn=$n,Kn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Yn=function(...e){let[n,t,r]=e;return n instanceof Array?(void 0===t&&(t=1),void 0===r&&(r=t)):(n=e,t=1,r=1),1===t&&1===r?n[kn(0,n.length-1)]:Jn(n,t,r)},Jn=function(e,n,t){let r=dn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(0,kn(n,t))}},Vn={},Zn=function(...e){1===e.length&&(e=e[0]);var n=Zn.options.context.templatePath.join("."),t=Vn[n]=Vn[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Qn=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let et;function nt(e,n){return et=et||Math.random(),et+=.618033988749895,et%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Xn.hsv(360*et,100*e,100*n)}function tt(){return nt().hex()}var rt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:at,lastName:ot,cfirstName:ut,clastName:lt}=rt;function it(){var e=at.male.concat();return Yn(e)}function ct(){return Yn(ot)}function ht(){return Yn(ut)}function st(){return Yn(lt)}var ft,mt=new Uint8Array(16);function dt(){if(!ft&&!(ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return ft(mt)}var pt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function xt(e){return"string"==typeof e&&pt.test(e)}for(var bt=[],gt=0;gt<256;++gt)bt.push((gt+256).toString(16).substr(1));function vt(e,n,t){var r=(e=e||{}).random||(e.rng||dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(bt[e[n+0]]+bt[e[n+1]]+bt[e[n+2]]+bt[e[n+3]]+"-"+bt[e[n+4]]+bt[e[n+5]]+"-"+bt[e[n+6]]+bt[e[n+7]]+"-"+bt[e[n+8]]+bt[e[n+9]]+"-"+bt[e[n+10]]+bt[e[n+11]]+bt[e[n+12]]+bt[e[n+13]]+bt[e[n+14]]+bt[e[n+15]]).toLowerCase();if(!xt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var yt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const wt=Object.keys(yt),kt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(yt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return wt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var At={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Mt=new RegExp(`(${Object.keys(At).join("|")})`,"g");function Et(e="yyyy-MM-dd"){return Ct(jt(),e)}function Ct(e,n){return n.replace(Mt,(function n(t,r){let a=At[r];return"function"==typeof a?a(e):a in At?n(t,a):e[a]()}))}function jt(e=new Date(0),n=new Date){return new Date(wn(e.getTime(),n.getTime()))}let Ot=0;const Rt=function(e){return Ot+=+e||1},St=Rt;function _t(e,n,t,r){return void 0===t?kn(e,n):void 0===r?t:kn(parseInt(t,10),parseInt(r,10))}function Tt(e,n){var t=_t(12,18,e,n);return Ye([...Array(t)].map((()=>Ft())).join(""))+"."}function Ft(e,n){var t=_t(3,10,e,n);return[...Array(t)].map((()=>En("lower"))).join("")}function qt(e,n){var t=_t(12,18,e,n);return[...Array(t)].map((()=>Dt())).join("")+"。"}function Dt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=kn(n,t));break;case 3:[a,n,t]=e,r=kn(n,t)}const o=a.length;return 1===r?a.charAt(kn(0,o)):[...Array(r)].map((()=>a.charAt(kn(0,o)))).join("")}const Pt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Lt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Ht(){return Yn(Pt)}function zt(e){return`${Ft()}.${e||Nt()}`}function Nt(){return Yn(Lt)}var It={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},$t={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Ut,_screenSize:Bt,_videoSize:Gt}=It;const Wt=Object.keys($t);function Xt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Yn(Ut)),r=(r||tt()).replace(/^#/,""),t=(t||tt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Kt=["东北","华北","华东","华中","华南","西南","西北"];var Yt=Object.freeze({__proto__:null,integer:wn,isNumber:function(e){return"number"==typeof e&&!isNaN(e)},random:on,natural:kn,int:wn,boolean:An,bool:An,character:En,char:En,string:Cn,str:Cn,range:hn,float:function(e,n,t,r){let a=on(t,r,!1);return on(e,n,a)},color:function(e){return e||Kn[e]?Kn[e].nicer:Yn(Qn).hex},hex:tt,rgb:function(){return nt().hsv().string()},rgba:function(){return nt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return nt().hsl().string()},_goldenRatioColor:nt,first:it,last:ct,name:function(e){return e=e?` ${it()} `:" ",`${it()}${e}${ct()}`},cfirst:ht,clast:st,cname:function(){return ht()+st()},capitalize:Ye,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Yn,shuffle:Jn,order:Zn,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:vt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Yn(kt).id+Et("yyyyMMdd")+Cn("number",3);for(var r=0;rTt()))},word:Ft,sentence:Tt,title:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>Ye(Ft()))).join("")},ctitle:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>Dt())).join("")},csentence:qt,cparagraph:function(e,n){var t=_t(3,7,e,n);return[...Array(t)].map((()=>qt())).join("")},cword:Dt,protocol:Ht,domain:zt,tld:Nt,email:function(e){return`${En("lower")}.${Ft()}@${e||Ft()+"."+Nt()}`},ip:function(){return[...Array(4)].map((()=>kn(0,255))).join(".")},url:function(e,n){return`${e||Ht()}://${n||zt()}/${Ft()}`},_patternLetters:At,_rformat:Mt,_formatDate:Ct,_randomDate:jt,time:function(e="HH:mm:ss"){return Et(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Et(e)},date:Et,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ct(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?jt(e,n).getTime():jt().getTime()},_adSize:Ut,_screenSize:Bt,_videoSize:Gt,image:Xt,img:Xt,_brandColors:$t,_brandNames:Wt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Yn(Ut)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=$t[Yn(Wt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Yn(Kt)},province:function(){return Yn(kt).name},city:function(e){var n=Yn(kt),t=Yn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Yn(kt),t=Yn(n.children),r=Yn(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=kn(0,9);return n}}),Jt={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Vt(e=""){"string"!=typeof e&&(e+="");var n=e.match(Jt.RE_KEY),t=n&&n[3]&&n[3].match(Jt.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?wn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Jt.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||wn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function Zt({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Yn(zr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=zr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(zr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(zr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function Qt({rule:{max:e,min:n,parameters:t},template:r=""}){return t?An(n,e,r):r}function er(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function nr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;if(e){let[e,a]=(""+o).split(".");for(e=n?t:e,a=(a||"").slice(0,r);a.length{let t=n.replace(Jt.RE_KEY,"$1");l[t]=zr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(Jt.RE_KEY,"$1");l[t]=zr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(Jt.RE_KEY);i&&i[2]&&"number"===pn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function rr(e){this.type=e,this.offset=rr.offset(),this.text=rr.text()}function ar(e,n){rr.call(this,"alternate"),this.left=e,this.right=n}function or(e){rr.call(this,"match"),this.body=e.filter(Boolean)}function ur(e,n){rr.call(this,e),this.body=n}function lr(e){ur.call(this,"capture-group"),this.index=yr[this.offset]||(yr[this.offset]=vr++),this.body=e}function ir(e,n){rr.call(this,"quantified"),this.body=e,this.quantifier=n}function cr(e,n){rr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function hr(e,n){rr.call(this,"charset"),this.invert=e,this.body=n}function sr(e,n){rr.call(this,"range"),this.start=e,this.end=n}function fr(e){rr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function mr(e){rr.call(this,"unicode"),this.code=e.toUpperCase()}function dr(e){rr.call(this,"hex"),this.code=e.toUpperCase()}function pr(e){rr.call(this,"octal"),this.code=e.toUpperCase()}function xr(e){rr.call(this,"back-reference"),this.code=e.toUpperCase()}function br(e){rr.call(this,"control-character"),this.code=e.toUpperCase()}var gr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Tt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ft?(t=Ft,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new ar(e,n[1]):e},me=function(e,n,t){return new or([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new rr("start")},be="$",ge='"$"',ve=function(){return new rr("end")},ye=function(e,n){return new ir(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new cr(e,n)},Se=",}",_e='",}"',Te=function(e){return new cr(e,1/0)},Fe=function(e){return new cr(e,e)},qe="+",De='"+"',Pe=function(){return new cr(1,1/0)},Le="*",He='"*"',ze=function(){return new cr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new cr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new lr(e)},Ze="?:",Qe='"?:"',en=function(e){return new ur("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new ur("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new ur("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new hr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new sr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new fr(e)},kn=".",An='"."',Mn=function(){return new rr("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new rr("backspace")},_n=function(){return new rr("word-boundary")},Tn="\\B",Fn='"\\\\B"',qn=function(){return new rr("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new rr("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new rr("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new rr("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new rr("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new rr("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new rr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new rr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new rr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new rr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new rr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new rr("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new br(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new xr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new pr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Tt=function(e){return new dr(e.join(""))},Ft="\\u",qt='"\\\\u"',Dt=function(e){return new mr(e.join(""))},Pt=function(){return new rr("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(rr.offset=r,rr.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}wr.gen=function(e,n,t){return t=t||{guid:1},wr[e.type]?wr[e.type](e,n,t):wr.token(e,n,t)},wr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return En();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Yn(Mr.split(""));case"non-digit":return Yn((kr+Ar+Er).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Yn(jr.split(""));case"non-white-space":return Yn((kr+Ar+Mr).split(""));case"tab":case"vertical-tab":break;case"word":return Yn((kr+Ar+Mr).split(""));case"non-word":return Yn(Er.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(An()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Fr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Tr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=zr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Yt)&&!(u in Yt))return e;for(var i=0;i{if(/^\\/.test(t))return void n.splice(o--,1);let l=Dr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return u=l,!0;u=u.replace(t,l)}))}else u=n?Cn(t):o;return u}var Lr=Object.freeze({__proto__:null,array:Zt,boolean:Qt,function:er,number:nr,object:tr,regexp:_r,string:Pr});let Hr=1;function zr(e,n="",t={}){var r={path:t.path||[Hr],templatePath:t.templatePath||[Hr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=pn(e);let o=Lr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Jt.RE_KEY,"$1"):n,rule:Vt(n),context:r}),r.root||(r.root=u),u):e}var Nr={gen:zr,extend:xn};function Ir(e,n,t=[]){var r={name:"string"==typeof n?n.replace(Jt.RE_KEY,"$1"):n,template:e,type:pn(e),rule:Vt.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Ir(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Ir(e,n,r.path)))}return r}function $r(e,n){for(var t=Ir(e),r=Ur.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Dr,getValueByKeyPath:Tr,normalizePath:Fr,splitPathToArray:qr});var Ur={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Br.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(Jt.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Br.equal("type",e.path,pn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Br.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(Jt.RE_PLACEHOLDER))return r.length===o}return Br.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Br.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Br.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Br.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Br.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Br.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Br.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Br.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Br.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Br.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Br.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=vn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Br.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Br.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Br.equal("properties length",e.path,u.length,o.min,r)):Br.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Br.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Br.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Br.message(u),a.push(u),!1}};$r.Diff=Ur,$r.Assert=Br,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Gr,Wr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Xr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Kr="timeout withCredentials".split(" "),Yr="readyState responseURL status statusText responseType response responseText responseXML".split(" "),Jr="OK";function Vr(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}Vr._settings={timeout:"10-100"},Vr.setup=function(e){return _e(Vr._settings,e),Vr._settings},_e(Vr,Wr),_e(Vr.prototype,Wr),Vr.prototype.mock=!0,Vr.prototype.match=!1,_e(Vr.prototype,{open:function(e,n,t=!0,r,a){var o=this;_e(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(Vr._settings.timeout);var u=function(e){for(var n in Vr.Mock._mocked){var t=Vr.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===pn(e)?e===n:"regexp"===pn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;ne?!t:t:on(10,-10)>0},On={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};On.alpha=On.lower+On.upper,On.default=On.lower+On.upper+On.number+On.symbol;const Rn=function(e="default"){return On.hasOwnProperty(e.toLocaleLowerCase())&&(e=On[e.toLowerCase()]),e.charAt(En(0,e.length-1))},Sn=function(...e){var n,t,r,a;switch(e.length){case 0:n=En(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=En(r,a));break;case 3:[t,r,a]=e,n=En(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function _n(e,n){return e(n={exports:{}},n.exports),n.exports}var Fn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Tn=_n((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),qn=_n((function(e){var n={};for(var t in Fn)Fn.hasOwnProperty(t)&&(n[Fn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Fn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Tn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Tn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Tn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Tn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Tn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));qn.to,qn.get;var Dn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=_n((function(e){var n={};for(var t in Dn)Dn.hasOwnProperty(t)&&(n[Dn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Dn)if(Dn.hasOwnProperty(l)){var i=Dn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Ln(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Nn,$n=[].slice,Un=["keyword","gray","hex"],Bn={};Object.keys(In).forEach((function(e){Bn[$n.call(In[e].labels).sort().join("")]=e}));var Gn={};function Wn(e,n){if(!(this instanceof Wn))return new Wn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Wn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=qn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=$n.call(e,0,r);this.color=Jn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Bn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Bn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Wn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Wn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Wn.prototype[e]=function(){if(this.model===e)return new Wn(this);if(arguments.length)return new Wn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Wn(Yn(In[this.model][e].raw(this.color)).concat(t),e)},Wn[e]=function(t){return"number"==typeof t&&(t=Jn($n.call(arguments),n)),new Wn(t,e)}}}));var Vn=Wn,Zn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Qn=function(e,n,t){return void 0===n&&void 0===t?e[En(0,e.length-1)]:void 0!==n&&void 0!==t?et(e,n,t):et(e,0,n)},et=function(e,n,t){let r=dn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},nt={},tt=function(...e){1===e.length&&(e=e[0]);var n=tt.options.context.templatePath.join("."),t=nt[n]=nt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let at;function ot(e,n){return at=at||Math.random(),at+=.618033988749895,at%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Vn.hsv(360*at,100*e,100*n)}function ut(){return ot().hex()}var lt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:it,lastName:ct,cfirstName:ht,clastName:st}=lt;function ft(){var e=it.male.concat();return Qn(e)}function mt(){return Qn(ct)}function dt(){return Qn(ht)}function pt(){return Qn(st)}var xt,bt=new Uint8Array(16);function gt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(bt)}var vt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function yt(e){return"string"==typeof e&&vt.test(e)}for(var wt=[],kt=0;kt<256;++kt)wt.push((kt+256).toString(16).substr(1));function At(e,n,t){var r=(e=e||{}).random||(e.rng||gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(wt[e[n+0]]+wt[e[n+1]]+wt[e[n+2]]+wt[e[n+3]]+"-"+wt[e[n+4]]+wt[e[n+5]]+"-"+wt[e[n+6]]+wt[e[n+7]]+"-"+wt[e[n+8]]+wt[e[n+9]]+"-"+wt[e[n+10]]+wt[e[n+11]]+wt[e[n+12]]+wt[e[n+13]]+wt[e[n+14]]+wt[e[n+15]]).toLowerCase();if(!yt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Et=Object.keys(Mt),Ct=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Et.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var jt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ot=new RegExp(`(${Object.keys(jt).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return St(_t(),e)}function St(e,n){return n.replace(Ot,(function n(t,r){let a=jt[r];return"function"==typeof a?a(e):a in jt?n(t,a):e[a]()}))}function _t(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let Ft=0;const Tt=function(e){return Ft+=+e||1},qt=Tt;function Dt(e,n,t,r){return void 0===t?En(e,n):void 0===r?t:En(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=Dt(12,18,e,n);return Ye([...Array(t)].map((()=>Lt())).join(""))+"."}function Lt(e,n){var t=Dt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Ht(e,n){var t=Dt(12,18,e,n);return[...Array(t)].map((()=>zt())).join("")+"。"}function zt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=En(n,t));break;case 3:[a,n,t]=e,r=En(n,t)}const o=a.length;return 1===r?a.charAt(En(0,o)):[...Array(r)].map((()=>a.charAt(En(0,o)))).join("")}const Nt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function $t(){return Qn(Nt)}function Ut(e){return`${Lt()}.${e||Bt()}`}function Bt(){return Qn(It)}var Gt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Wt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Xt,_screenSize:Kt,_videoSize:Yt}=Gt;const Jt=Object.keys(Wt);function Vt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Qn(Xt)),r=(r||ut()).replace(/^#/,""),t=(t||ut()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Zt=["东北","华北","华东","华中","华南","西南","西北"];function Qt(e){let n;switch(pn(e)){case"array":n=e;default:n=[e]}return n}var er=Object.freeze({__proto__:null,integer:Mn,isNumber:kn,random:on,natural:En,int:Mn,float:Cn,boolean:jn,bool:jn,character:Rn,char:Rn,string:Sn,str:Sn,range:hn,color:function(e){return e||Zn[e]?Zn[e].nicer:Qn(rt).hex},hex:ut,rgb:function(){return ot().hsv().string()},rgba:function(){return ot().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ot().hsl().string()},_goldenRatioColor:ot,first:ft,last:mt,name:function(e){return e=e?` ${ft()} `:" ",`${ft()}${e}${mt()}`},cfirst:dt,clast:pt,cname:function(){return dt()+pt()},capitalize:Ye,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Qn,shuffle:et,order:tt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return At().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:At,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Qn(Ct).id+Rt("yyyyMMdd")+Sn("number",3);for(var r=0;rPt()))},word:Lt,sentence:Pt,title:function(e,n){var t=Dt(3,7,e,n);return[...Array(t)].map((()=>Ye(Lt()))).join("")},ctitle:function(e,n){var t=Dt(3,7,e,n);return[...Array(t)].map((()=>zt())).join("")},csentence:Ht,cparagraph:function(e,n){var t=Dt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},cword:zt,protocol:$t,domain:Ut,tld:Bt,email:function(e){return`${Rn("lower")}.${Lt()}@${e||Lt()+"."+Bt()}`},ip:function(){return[...Array(4)].map((()=>En(0,255))).join(".")},url:function(e,n){return`${e||$t()}://${n||Ut()}/${Lt()}`},_patternLetters:jt,_rformat:Ot,_formatDate:St,_randomDate:_t,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return St(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?_t(e,n).getTime():_t().getTime()},_adSize:Xt,_screenSize:Kt,_videoSize:Yt,image:Vt,img:Vt,_brandColors:Wt,_brandNames:Jt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Qn(Xt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Wt[Qn(Jt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Qn(Zt)},province:function(){return Qn(Ct).name},city:function(e){var n=Qn(Ct),t=Qn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Qn(Ct),t=Qn(n.children),r=Qn(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=En(0,9);return n},genFile:function(e){return new File(Qt(e),Lt())},genBlob:function(){return new Blob(Qt(anyData))}}),nr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function tr(e=""){"string"!=typeof e&&(e+="");var n=e.match(nr.RE_KEY),t=n&&n[3]&&n[3].match(nr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(nr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function rr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Qn(Br(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Br(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Br(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Br(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function ar({rule:{max:e,min:n,parameters:t},template:r=""}){return t?jn(n,e,r):r}function or(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function ur({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Cn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function lr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=et(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(nr.RE_KEY,"$1");l[t]=Br(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(nr.RE_KEY,"$1");l[t]=Br(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(nr.RE_KEY);i&&i[2]&&"number"===pn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function ir(e){this.type=e,this.offset=ir.offset(),this.text=ir.text()}function cr(e,n){ir.call(this,"alternate"),this.left=e,this.right=n}function hr(e){ir.call(this,"match"),this.body=e.filter(Boolean)}function sr(e,n){ir.call(this,e),this.body=n}function fr(e){sr.call(this,"capture-group"),this.index=Er[this.offset]||(Er[this.offset]=Mr++),this.body=e}function mr(e,n){ir.call(this,"quantified"),this.body=e,this.quantifier=n}function dr(e,n){ir.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function pr(e,n){ir.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){ir.call(this,"range"),this.start=e,this.end=n}function br(e){ir.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function gr(e){ir.call(this,"unicode"),this.code=e.toUpperCase()}function vr(e){ir.call(this,"hex"),this.code=e.toUpperCase()}function yr(e){ir.call(this,"octal"),this.code=e.toUpperCase()}function wr(e){ir.call(this,"back-reference"),this.code=e.toUpperCase()}function kr(e){ir.call(this,"control-character"),this.code=e.toUpperCase()}var Ar=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Ft(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Tt?(t=Tt,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new cr(e,n[1]):e},me=function(e,n,t){return new hr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new ir("start")},be="$",ge='"$"',ve=function(){return new ir("end")},ye=function(e,n){return new mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new dr(e,n)},Se=",}",_e='",}"',Fe=function(e){return new dr(e,1/0)},Te=function(e){return new dr(e,e)},qe="+",De='"+"',Pe=function(){return new dr(1,1/0)},Le="*",He='"*"',ze=function(){return new dr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new dr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new fr(e)},Ze="?:",Qe='"?:"',en=function(e){return new sr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new sr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new sr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new pr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new br(e)},kn=".",An='"."',Mn=function(){return new ir("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new ir("backspace")},_n=function(){return new ir("word-boundary")},Fn="\\B",Tn='"\\\\B"',qn=function(){return new ir("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new ir("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new ir("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new ir("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new ir("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new ir("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new ir("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new ir("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new ir("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new ir("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new ir("word")},st="\\W",ft='"\\\\W"',mt=function(){return new ir("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new kr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new wr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new yr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Ft=function(e){return new vr(e.join(""))},Tt="\\u",qt='"\\\\u"',Dt=function(e){return new gr(e.join(""))},Pt=function(){return new ir("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(ir.offset=r,ir.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Cr.gen=function(e,n,t){return t=t||{guid:1},Cr[e.type]?Cr[e.type](e,n,t):Cr.token(e,n,t)},Cr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Qn(Rr.split(""));case"non-digit":return Qn((jr+Or+Sr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Qn(Fr.split(""));case"non-white-space":return Qn((jr+Or+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return Qn((jr+Or+Rr).split(""));case"non-word":return Qn(Sr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(jn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Hr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Lr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Br(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in er)&&!(u in er))return e;o=o.map((e=>(nr.RE_PLACEHOLDER.exec(""),nr.RE_PLACEHOLDER.test(e)?Nr(e,n,t,r):e)));var i=er[a]||er[u];switch(pn(i)){case"array":return Qn(i);case"function":i.options=r;var c=i.apply(er,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(nr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Nr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Sn(t):o;return u}var $r=Object.freeze({__proto__:null,array:rr,boolean:ar,function:or,number:ur,object:lr,regexp:Pr,string:Ir});let Ur=1;function Br(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=pn(e);let o=$r[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(nr.RE_KEY,"$1"):n,rule:tr(n),context:r}),r.root||(r.root=u),u):e}var Gr={gen:Br,extend:bn};function Wr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(nr.RE_KEY,"$1"):n,template:e,type:pn(e),rule:tr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Wr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Wr(e,n,r.path)))}return r}function Xr(e,n){for(var t=Wr(e),r=Kr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Nr,getValueByKeyPath:Lr,normalizePath:Hr,splitPathToArray:zr});var Kr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Yr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(nr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Yr.equal("type",e.path,pn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Yr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(nr.RE_PLACEHOLDER))return r.length===o}return Yr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Yr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Yr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Yr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Yr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Yr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Yr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Yr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Yr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Yr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Yr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Yr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Yr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=yn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Yr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Yr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Yr.equal("properties length",e.path,u.length,o.min,r)):Yr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Yr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Yr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Yr.message(u),a.push(u),!1}};Xr.Diff=Kr,Xr.Assert=Yr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Jr,Vr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Zr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Qr="timeout withCredentials".split(" "),ea="readyState responseURL status statusText responseType response responseText responseXML".split(" "),na="OK";function ta(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}ta._settings={timeout:"10-100"},ta.setup=function(e){return _e(ta._settings,e),ta._settings},_e(ta,Vr),_e(ta.prototype,Vr),ta.prototype.mock=!0,ta.prototype.match=!1,_e(ta.prototype,{open:function(e,n,t=!0,r,a){var o=this;_e(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(ta._settings.timeout);var u=function(e){for(var n in ta.Mock._mocked){var t=ta.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===pn(e)?e===n:"regexp"===pn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;ne?!t:t:on(10,-10)>0},Mn={lower:"abcdefghijklmnopqrstuvwxyz",u 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/;var Zr={Handler:Nr,Random:Yt,Util:yn,XHR:Gr,RE:Sr,toJSONSchema:Ir,valid:$r,heredoc:gn,setup:function(e){return Gr.setup(e)},_mocked:{},version:"1.1.1-es6"};Gr&&(Gr.Mock=Zr),Zr.mock=function(...e){let n,t;switch(e.length){case 1:return[t]=e,Nr.gen(t);case 2:[n,t]=e;case 3:default:return Gr&&(window.XMLHttpRequest=Gr),Zr._mocked[n+""]={rurl:n,rtype:"",template:t},Zr}};export default Zr; +*/;var ra={Handler:Gr,Random:er,Util:wn,XHR:Jr,RE:Dr,toJSONSchema:Wr,valid:Xr,heredoc:vn,setup:function(e){return Jr.setup(e)},_mocked:{},version:"1.1.1-es6"};Jr&&(Jr.Mock=ra),ra.mock=function(...e){let n,t;switch(e.length){case 1:return[t]=e,Gr.gen(t);case 2:[n,t]=e;case 3:default:return Jr&&(window.XMLHttpRequest=Jr),ra._mocked[n+""]={rurl:n,rtype:"",template:t},ra}};export default ra; diff --git a/src/mock/handle/number.js b/src/mock/handle/number.js index 06c09521..a0210abc 100644 --- a/src/mock/handle/number.js +++ b/src/mock/handle/number.js @@ -1,20 +1,14 @@ -import { character } from "../random/index.js"; +import { float } from "../random/basic/number.js"; export function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { var result; if (decimal) { - let [Integer, Decimal] = ("" + template).split("."); // 'float1|.1-10': 10, // 'float2|1-100.1-10': 1, // 'float3|999.1-10': 1, // 'float4|.3-10': 123.123, - Integer = range ? count : Integer; - Decimal = (Decimal || "").slice(0, dcount); - while (Decimal.length < dcount) { - Decimal += - // 最后一位不能为 0:如果最后一位为 0,会被 JS 引擎忽略掉。 - Decimal.length < dcount - 1 ? character("number") : character("123456789"); - } - result = parseFloat(Integer + "." + Decimal, 10); + parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { + result = float(min, max, dmin, dmax); // 内置字符串转数字 + }); } else { // integer // 'grade1|1-100': 1, diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js index 58d086ab..dba35b8a 100644 --- a/src/mock/handle/placeholder.js +++ b/src/mock/handle/placeholder.js @@ -6,11 +6,11 @@ import { gen } from "./gen.js"; import { splitPathToArray, getValueByKeyPath } from "./path.js"; // 占位符即是字符串函数的意思 -export function placeholder(placeholder, obj, templateContext, options) { +function placeholder(Placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params Constant.RE_PLACEHOLDER.exec(""); - var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(placeholder); + var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(Placeholder); var lkey = key && key.toLowerCase(), pathParts = splitPathToArray(key); @@ -30,7 +30,7 @@ export function placeholder(placeholder, obj, templateContext, options) { templateContext && typeof templateContext === "object" && key in templateContext && - placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 ) { // 先计算被引用的属性值 templateContext[key] = gen(templateContext[key], key, { @@ -41,15 +41,16 @@ export function placeholder(placeholder, obj, templateContext, options) { } // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return placeholder; + if (!(key in Random) && !(lkey in Random)) return Placeholder; // 递归解析参数中的占位符 - for (var i = 0; i < params.length; i++) { + params = params.map((param) => { Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(params[i])) { - params[i] = placeholder(params[i], obj, templateContext, options); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); } - } + return param; + }); var handle = Random[key] || Random[lkey]; switch (Type(handle)) { @@ -64,3 +65,4 @@ export function placeholder(placeholder, obj, templateContext, options) { return re; } } +export { placeholder }; diff --git a/src/mock/handle/string.js b/src/mock/handle/string.js index 37a58777..b0fc182a 100644 --- a/src/mock/handle/string.js +++ b/src/mock/handle/string.js @@ -28,10 +28,6 @@ export function string(options) { // 只有一个占位符,并且没有其他字符 if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - // - result = phed; - return true; - if (isNumeric(phed)) { result = parseFloat(phed, 10); return true; @@ -39,7 +35,9 @@ export function string(options) { if (/^(true|false)$/.test(phed)) { result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 return true; - } + } // + result = phed; + return true; } result = result.replace(ph, phed); }); diff --git a/src/mock/random/address.js b/src/mock/random/address.js index 3a8962e9..fe17c056 100644 --- a/src/mock/random/address.js +++ b/src/mock/random/address.js @@ -24,7 +24,7 @@ function city(prefix) { function county(prefix) { var province = pick(DICT); var city = pick(province.children); - var county = pick(city.children) || { + var county = pick(city) || { name: "-", }; return prefix ? [province.name, city.name, county.name].join(" ") : county.name; diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js index eb1ea1e4..b75e0185 100644 --- a/src/mock/random/basic.js +++ b/src/mock/random/basic.js @@ -6,4 +6,3 @@ export * from "./basic/boolean.js"; export * from "./basic/character.js"; export * from "./basic/string.js"; export * from "./basic/range.js"; -export * from "./basic/float.js"; diff --git a/src/mock/random/basic/float.js b/src/mock/random/basic/float.js deleted file mode 100644 index 6119a103..00000000 --- a/src/mock/random/basic/float.js +++ /dev/null @@ -1,6 +0,0 @@ -import { random } from "lodash-es"; -const float = function (min, max, dmin, dmax) { - let dcount = random(dmin, dmax, false); - return random(min, max, dcount); -}; -export { float }; diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index 2f966d4a..10bec7fc 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -1,13 +1,34 @@ import { random } from "lodash-es"; +const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); +}; +const numberGate = function (input) { + if (isNumber(input)) return input; + let res = parseInt(input); + return isNumber(res) ? res : undefined; +}; // 返回一个随机的整数。 const integer = function (min, max) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; return random(min, max, false); }; const natural = function (min, max) { return Math.abs(integer(min, max)); }; -const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); +const float = function (min, max, dmin, dmax) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + dmin = numberGate(dmin) || 1; + dmax = numberGate(dmax) || 17; + if (dmin < 1) dmin = 1; + if (dmax > 17) dmax = 17; + let dcount = random(dmin, dmax, false); + return parseFloat(random(min, max, true).toFixed(dcount)); }; -export { integer, isNumber, random, natural, integer as int }; +export { integer, isNumber, random, natural, integer as int, float }; diff --git a/src/mock/random/file.js b/src/mock/random/file.js new file mode 100644 index 00000000..b5276b7c --- /dev/null +++ b/src/mock/random/file.js @@ -0,0 +1,19 @@ +// 用于生成 Blob 和 File 型数据的工具 +import { type } from "../util.js"; +import { word } from "./text/text_en.js"; +function prepare(anyData) { + let prepared; + switch (type(anyData)) { + case "array": + prepared = anyData; + default: + prepared = [anyData]; + } + return prepared; +} +export function genFile(anyData) { + return new File(prepare(anyData), word()); +} +export function genBlob() { + return new Blob(prepare(anyData)); +} diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index 948e193b..35465c20 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -14,22 +14,14 @@ const lower = function (str) { }; // 从数组中随机选取一个元素,并返回。 -const pick = function (...args) { - let [arr, min, max] = args; - // pick( item1, item2 ... ) - if (!(arr instanceof Array)) { - arr = args; - min = 1; - max = 1; - } else { - // pick( [ item1, item2 ... ] ) - if (min === undefined) min = 1; - // pick( [ item1, item2 ... ], count ) - if (max === undefined) max = min; - } - if (min === 1 && max === 1) return arr[natural(0, arr.length - 1)]; +// 更改 pick 函数 , 函数不进行重载 +const pick = function (arr, min, max) { + // pick( [ item1, item2 ... ] ) + if (min === undefined && max === undefined) return arr[natural(0, arr.length - 1)]; // pick( [ item1, item2 ... ], min, max ) - return shuffle(arr, min, max); + if (min !== undefined && max !== undefined) return shuffle(arr, min, max); + // pick( [ item1, item2 ... ], count ) + return shuffle(arr, 0, min); }; /* 打乱数组中元素的顺序,并返回。 @@ -45,7 +37,7 @@ const shuffle = function (arr, min, max) { max = min; // 这里 max = undefined /* falls through */ case 3: - return result.slice(0, natural(min, max)); + return result.slice(min, max); } }; /* diff --git a/src/mock/random/index.js b/src/mock/random/index.js index 08bed89b..fbf943a7 100644 --- a/src/mock/random/index.js +++ b/src/mock/random/index.js @@ -14,3 +14,4 @@ export * from "./web.js"; export * from "./date.js"; export * from "./image.js"; export * from "./address.js"; +export * from "./file.js"; diff --git a/test/allTemplate.js b/test/allTemplate.js deleted file mode 100644 index 5d04d315..00000000 --- a/test/allTemplate.js +++ /dev/null @@ -1,4 +0,0 @@ -const template = { - String: {}, -}; -Mock.mock(template); diff --git a/test/fakeServer.js b/test/fakeServer.js new file mode 100644 index 00000000..e8d6ba2e --- /dev/null +++ b/test/fakeServer.js @@ -0,0 +1,12 @@ +Mock.mock("fake/file", { + "data|100": [ + { + ID: "@increment()", + name: "@cname()", + description: "@csentence()", + avatar: '@dataImage("64x64")', + address: "@region()", + province: "@province()", + }, + ], +}); diff --git a/test/index.html b/test/index.html index 437588b7..59fd8fe8 100644 --- a/test/index.html +++ b/test/index.html @@ -11,11 +11,11 @@ - - + - + \ No newline at end of file From 2821e7b52e9566e68084ab9fb88f545698e54e9d Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sun, 13 Jun 2021 16:32:22 +0800 Subject: [PATCH 17/65] 0.9.2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fabb8d1c..922bb058 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.1", + "version": "0.9.2", "homepage": "http://mockjs.com/", "keywords": [ "mock", From 6adb97cbc8e26bff853dfcdea885a652a69906c5 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Mon, 14 Jun 2021 17:11:01 +0800 Subject: [PATCH 18/65] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20fetch=20=E7=9A=84?= =?UTF-8?q?=E4=BB=A3=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + dist/Mock.min.js | 15235 +++++++++++++++- dist/mock.js | 15226 ++++++++++++++- src/mock.js | 28 +- src/mock/_mocked.js | 11 + src/mock/xhr/ajax-tools.js | 34 + src/mock/xhr/fetch/fetch.js | 35 + src/mock/xhr/fetch/src/INTERNALS.js | 2 + src/mock/xhr/fetch/src/body.js | 106 + src/mock/xhr/fetch/src/body/consumeBody.js | 24 + .../xhr/fetch/src/body/exactContentType.js | 39 + src/mock/xhr/fetch/src/response.js | 130 + src/mock/xhr/fetch/src/utils/is-redirect.js | 11 + src/mock/xhr/fetch/src/utils/is.js | 20 + src/mock/xhr/index.js | 5 + src/mock/xhr/xhr.js | 27 +- test/fakeServer.js | 1 + test/index.html | 4 +- 18 files changed, 30791 insertions(+), 148 deletions(-) create mode 100644 src/mock/_mocked.js create mode 100644 src/mock/xhr/ajax-tools.js create mode 100644 src/mock/xhr/fetch/fetch.js create mode 100644 src/mock/xhr/fetch/src/INTERNALS.js create mode 100644 src/mock/xhr/fetch/src/body.js create mode 100644 src/mock/xhr/fetch/src/body/consumeBody.js create mode 100644 src/mock/xhr/fetch/src/body/exactContentType.js create mode 100644 src/mock/xhr/fetch/src/response.js create mode 100644 src/mock/xhr/fetch/src/utils/is-redirect.js create mode 100644 src/mock/xhr/fetch/src/utils/is.js diff --git a/README.md b/README.md index 51208ac1..7b7e16c1 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,7 @@ Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](htt 3. 源代码打包方式改为 rollup 打包,生成 esm 版本和 iife 版本。 4. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) +6. 删除 XHR 代理时的同步行为,这个行为已经不被浏览器所使用。 ## 教程 diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 8cd79542..9386c230 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,57 +1,15118 @@ -/** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++B>=800)return arguments[0]}else B=0;return U.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!R(e)}function ae(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&V(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return s(e)&&"[object Arguments]"==h(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return s(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},xe={};function be(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?be(ke):function(e){return s(e)&&te(e.length)&&!!xe[h(e)]},Me=Object.prototype.hasOwnProperty;function Ee(e,n){var t=d(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=un();return on(e+a*(n-e+an("1e-"+((a+"").length-1))),n)}return rn(e,n)}var cn=Math.ceil,hn=Math.max;var sn,fn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=hn(cn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=ln(t,r,!1);return parseFloat(ln(e,n,!0).toFixed(a))},Rn=function(e,n,t){ -//! cur:boolean 是划分概率的一个启动符号 -return t?ln(0,e+n)>e?!t:t:ln(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const _n=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Fn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>_n(t))).join("")};function Tn(e,n){return e(n={exports:{}},n.exports),n.exports}var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dn=Tn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=Tn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=qn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Dn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Dn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Dn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var Ln={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Hn=Tn((function(e){var n={};for(var t in Ln)Ln.hasOwnProperty(t)&&(n[Ln[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Ln)if(Ln.hasOwnProperty(l)){var i=Ln[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Hn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=$n,Bn=[].slice,Gn=["keyword","gray","hex"],Wn={};Object.keys(Un).forEach((function(e){Wn[Bn.call(Un[e].labels).sort().join("")]=e}));var Xn={};function Kn(e,n){if(!(this instanceof Kn))return new Kn(e,n);if(n&&n in Gn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Kn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Bn.call(e,0,r);this.color=Zn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Wn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Wn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Kn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Kn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Gn.indexOf(e)){var n=Un[e].channels;Kn.prototype[e]=function(){if(this.model===e)return new Kn(this);if(arguments.length)return new Kn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Kn(Vn(Un[this.model][e].raw(this.color)).concat(t),e)},Kn[e]=function(t){return"number"==typeof t&&(t=Zn(Bn.call(arguments),n)),new Kn(t,e)}}}));var Qn=Kn,et={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const nt=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?tt(e,n,t):tt(e,0,n)},tt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},rt={},at=function(...e){1===e.length&&(e=e[0]);var n=at.options.context.templatePath.join("."),t=rt[n]=rt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ot=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ut;function lt(e,n){return ut=ut||Math.random(),ut+=.618033988749895,ut%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Qn.hsv(360*ut,100*e,100*n)}function it(){return lt().hex()}var ct={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ht,lastName:st,cfirstName:ft,clastName:mt}=ct;function dt(){var e=ht.male.concat();return nt(e)}function pt(){return nt(st)}function xt(){return nt(ft)}function bt(){return nt(mt)}var gt,vt=new Uint8Array(16);function yt(){if(!gt&&!(gt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return gt(vt)}var wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function kt(e){return"string"==typeof e&&wt.test(e)}for(var At=[],Mt=0;Mt<256;++Mt)At.push((Mt+256).toString(16).substr(1));function Et(e,n,t){var r=(e=e||{}).random||(e.rng||yt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(At[e[n+0]]+At[e[n+1]]+At[e[n+2]]+At[e[n+3]]+"-"+At[e[n+4]]+At[e[n+5]]+"-"+At[e[n+6]]+At[e[n+7]]+"-"+At[e[n+8]]+At[e[n+9]]+"-"+At[e[n+10]]+At[e[n+11]]+At[e[n+12]]+At[e[n+13]]+At[e[n+14]]+At[e[n+15]]).toLowerCase();if(!kt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Ct={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Ct),Ot=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Ct).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function _t(e="yyyy-MM-dd"){return Ft(Tt(),e)}function Ft(e,n){return n.replace(St,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function Tt(e=new Date(0),n=new Date){return new Date(Cn(e.getTime(),n.getTime()))}let qt=0;const Dt=function(e){return qt+=+e||1},Pt=Dt;function Lt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Ht(e,n){var t=Lt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=Lt(3,10,e,n);return[...Array(t)].map((()=>_n("lower"))).join("")}function Nt(e,n){var t=Lt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const $t="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return nt($t)}function Gt(e){return`${zt()}.${e||Wt()}`}function Wt(){return nt(Ut)}var Xt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Kt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Yt,_screenSize:Jt,_videoSize:Vt}=Xt;const Zt=Object.keys(Kt);function Qt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=nt(Yt)),r=(r||it()).replace(/^#/,""),t=(t||it()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var er=["东北","华北","华东","华中","华南","西南","西北"];function nr(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var tr=Object.freeze({__proto__:null,integer:Cn,isNumber:Mn,random:ln,natural:jn,int:Cn,float:On,boolean:Rn,bool:Rn,character:_n,char:_n,string:Fn,str:Fn,range:fn,color:function(e){return e||et[e]?et[e].nicer:nt(ot).hex},hex:it,rgb:function(){return lt().hsv().string()},rgba:function(){return lt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return lt().hsl().string()},_goldenRatioColor:lt,first:dt,last:pt,name:function(e){return e=e?` ${dt()} `:" ",`${dt()}${e}${pt()}`},cfirst:xt,clast:bt,cname:function(){return xt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:nt,shuffle:tt,order:at,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Et().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Et,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=nt(Ot).id+_t("yyyyMMdd")+Fn("number",3);for(var r=0;rHt()))},word:zt,sentence:Ht,title:function(e,n){var t=Lt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=Lt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Nt,cparagraph:function(e,n){var t=Lt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},cword:It,protocol:Bt,domain:Gt,tld:Wt,email:function(e){return`${_n("lower")}.${zt()}@${e||zt()+"."+Wt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Gt()}/${zt()}`},_patternLetters:Rt,_rformat:St,_formatDate:Ft,_randomDate:Tt,time:function(e="HH:mm:ss"){return _t(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return _t(e)},date:_t,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Ft(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Tt(e,n).getTime():Tt().getTime()},_adSize:Yt,_screenSize:Jt,_videoSize:Vt,image:Qt,img:Qt,_brandColors:Kt,_brandNames:Zt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=nt(Yt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Kt[nt(Zt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return nt(er)},province:function(){return nt(Ot).name},city:function(e){var n=nt(Ot),t=nt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=nt(Ot),t=nt(n.children),r=nt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(nr(e),zt())},genBlob:function(){return new Blob(nr(anyData))}}),rr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function ar(e=""){"string"!=typeof e&&(e+="");var n=e.match(rr.RE_KEY),t=n&&n[3]&&n[3].match(rr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Cn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(rr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Cn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function or({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=nt(Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Wr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Wr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function ur({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function lr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function ir({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=On(n,t,r,a)})):u=n&&!a[2]?t:o,u}function cr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=tt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(rr.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(rr.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(rr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function hr(e){this.type=e,this.offset=hr.offset(),this.text=hr.text()}function sr(e,n){hr.call(this,"alternate"),this.left=e,this.right=n}function fr(e){hr.call(this,"match"),this.body=e.filter(Boolean)}function mr(e,n){hr.call(this,e),this.body=n}function dr(e){mr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Cr++),this.body=e}function pr(e,n){hr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){hr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){hr.call(this,"charset"),this.invert=e,this.body=n}function gr(e,n){hr.call(this,"range"),this.start=e,this.end=n}function vr(e){hr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function yr(e){hr.call(this,"unicode"),this.code=e.toUpperCase()}function wr(e){hr.call(this,"hex"),this.code=e.toUpperCase()}function kr(e){hr.call(this,"octal"),this.code=e.toUpperCase()}function Ar(e){hr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){hr.call(this,"control-character"),this.code=e.toUpperCase()}var Er=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Ft(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Tt?(t=Tt,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new sr(e,n[1]):e},me=function(e,n,t){return new fr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new hr("start")},be="$",ge='"$"',ve=function(){return new hr("end")},ye=function(e,n){return new pr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new xr(e,n)},Se=",}",_e='",}"',Fe=function(e){return new xr(e,1/0)},Te=function(e){return new xr(e,e)},qe="+",De='"+"',Pe=function(){return new xr(1,1/0)},Le="*",He='"*"',ze=function(){return new xr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new xr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new dr(e)},Ze="?:",Qe='"?:"',en=function(e){return new mr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new mr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new mr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new gr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new vr(e)},kn=".",An='"."',Mn=function(){return new hr("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new hr("backspace")},_n=function(){return new hr("word-boundary")},Fn="\\B",Tn='"\\\\B"',qn=function(){return new hr("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new hr("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new hr("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new hr("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new hr("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new hr("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new hr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new hr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new hr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new hr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new hr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new hr("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Ar(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new kr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Ft=function(e){return new wr(e.join(""))},Tt="\\u",qt='"\\\\u"',Dt=function(e){return new yr(e.join(""))},Pt=function(){return new hr("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(hr.offset=r,hr.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Or.gen=function(e,n,t){return t=t||{guid:1},Or[e.type]?Or[e.type](e,n,t):Or.token(e,n,t)},Or.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return _n();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return nt(_r.split(""));case"non-digit":return nt((Rr+Sr+Fr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return nt(qr.split(""));case"non-white-space":return nt((Rr+Sr+_r).split(""));case"tab":case"vertical-tab":break;case"word":return nt((Rr+Sr+_r).split(""));case"non-word":return nt(Fr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Nr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Wr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in tr)&&!(u in tr))return e;o=o.map((e=>(rr.RE_PLACEHOLDER.exec(""),rr.RE_PLACEHOLDER.test(e)?$r(e,n,t,r):e)));var i=tr[a]||tr[u];switch(bn(i)){case"array":return nt(i);case"function":i.options=r;var c=i.apply(tr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(rr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=$r(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return gn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Fn(t):o;return u}var Br=Object.freeze({__proto__:null,array:or,boolean:ur,function:lr,number:ir,object:cr,regexp:Hr,string:Ur});let Gr=1;function Wr(e,n="",t={}){var r={path:t.path||[Gr],templatePath:t.templatePath||[Gr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(rr.RE_KEY,"$1"):n,rule:ar(n),context:r}),r.root||(r.root=u),u):e}var Xr={gen:Wr,extend:vn};function Kr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(rr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:ar.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Kr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Kr(e,n,r.path)))}return r}function Yr(e,n){for(var t=Kr(e),r=Jr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:$r,getValueByKeyPath:zr,normalizePath:Nr,splitPathToArray:Ir});var Jr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(rr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(rr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Yr.Diff=Jr,Yr.Assert=Vr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Zr,Qr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},ea="readystatechange loadstart progress abort error load timeout loadend".split(" "),na="timeout withCredentials".split(" "),ta="readyState responseURL status statusText responseType response responseText responseXML".split(" "),ra="OK";function aa(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}aa._settings={timeout:"10-100"},aa.setup=function(e){return Fe(aa._settings,e),aa._settings},Fe(aa,Qr),Fe(aa.prototype,Qr),aa.prototype.mock=!0,aa.prototype.match=!1,Fe(aa.prototype,{open:function(e,n,t=!0,r,a){var o=this;Fe(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(aa._settings.timeout);var u=function(e){for(var n in aa.Mock._mocked){var t=aa.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===bn(e)?e===n:"regexp"===bn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;n true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** Used as references for various `Number` constants. */ + var INFINITY$1 = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$1 = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax$1(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; + } + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + /** Detect free variable `exports`. */ + var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + + /** Built-in value references. */ + var Buffer = moduleExports$1 ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = + typedArrayTags[setTag] = typedArrayTags[stringTag$1] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsZWJ$1 = '\\u200d'; + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ + var upperFirst = createCaseFirst('toUpperCase'); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** `Object#toString` result references. */ + var stringTag = '[object String]'; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); + } + + /** `Object#toString` result references. */ + var regexpTag = '[object RegExp]'; + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /* Node.js helper references. */ + var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeRandom$1 = Math.random; + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); + } + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min, + nativeRandom = Math.random; + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + var range$1 = createRange(); + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + // 使用 lodash 提供的方式 + function type$1(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); + } + + function isObjectOrArray(value) { + return isObject(value) || isArray(value); + } + + function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); + } + + // import { isObject, isArray } from "./type.js"; + function extend(...args) { + return assignIn(this, ...args); + } + + function each(obj, iterator, context) { + // each + var i, key; + if (type(obj) === "number") { + //表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } + } + + /* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 + */ + function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, "") + .replace(/\*\/[^\/]+$/, "") + .replace(/^[\s\xA0]+/, "") + .replace(/[\s\xA0]+$/, ""); // .trim() + } + + /* + ## Utilities + */ + function keys(obj) { + return Object.keys(obj); + } + function values(obj) { + return Object.values(obj); + } + function noop() {} + + var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc + }); + + const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); + }; + const numberGate = function (input) { + if (isNumber(input)) return input; + let res = parseInt(input); + return isNumber(res) ? res : undefined; + }; + // 返回一个随机的整数。 + const integer = function (min, max) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + return random(min, max, false); + }; + const natural = function (min, max) { + return Math.abs(integer(min, max)); + }; + + const float = function (min, max, dmin, dmax) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + dmin = numberGate(dmin) || 1; + dmax = numberGate(dmax) || 17; + if (dmin < 1) dmin = 1; + if (dmax > 17) dmax = 17; + let dcount = random(dmin, dmax, false); + return parseFloat(random(min, max, true).toFixed(dcount)); + }; + + const boolean$1 = function (min, max, cur) { + //! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; + }; + + const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", + }; + pools.alpha = pools.lower + pools.upper; + pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + + const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); + }; + + const string$1 = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map(() => character(pool)).join(""); + }; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + + var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); + }; + + var simpleSwizzle = createCommonjsModule(function (module) { + + + + var concat = Array.prototype.concat; + var slice = Array.prototype.slice; + + var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; + }; + + swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; + }; + }); + + var colorString = createCommonjsModule(function (module) { + /* MIT license */ + + + + var reverseNames = {}; + + // create a list of reverse color names + for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } + } + + var cs = module.exports = { + to: {}, + get: {} + }; + + cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; + }; + + cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; + }; + + cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; + }; + + cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; + }; + + cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); + }; + + cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; + }; + + cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; + }; + + cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; + }; + + // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax + // (hwb have alpha optional & 1 is default value) + cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; + }; + + cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; + }; + + // helpers + function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); + } + + function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; + } + }); + colorString.to; + colorString.get; + + var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + + var conversions = createCommonjsModule(function (module) { + /* MIT license */ + + + // NOTE: conversions should only return primitive values (i.e. arrays, or + // values that give correct `typeof` results). + // do not use box values types (i.e. Number(), String(), etc.) + + var reverseKeywords = {}; + for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } + } + + var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} + }; + + // hide .channels and .labels properties + for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } + } + + convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; + }; + + convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; + }; + + convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; + }; + + convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; + }; + + /** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ + function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); + } + + convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; + }; + + convert.keyword.rgb = function (keyword) { + return colorName[keyword]; + }; + + convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; + }; + + convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; + }; + + convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; + }; + + convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } + }; + + convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; + }; + + // http://dev.w3.org/csswg/css-color/#hwb-to-rgb + convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; + }; + + convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; + }; + + convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; + }; + + convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; + }; + + convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; + }; + + convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + }; + + convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; + }; + + convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; + }; + + convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; + }; + + convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; + }; + + convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; + }; + + convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; + }; + + convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; + }; + + convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; + }; + + convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; + }; + + convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; + }; + + convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; + }; + + convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; + }; + + convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; + }; + + convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; + }; + + convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; + }; + + convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; + }; + + convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; + }; + + convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; + }; + + convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; + }; + + convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; + }; + }); + conversions.rgb; + conversions.hsl; + conversions.hsv; + conversions.hwb; + conversions.cmyk; + conversions.xyz; + conversions.lab; + conversions.lch; + conversions.hex; + conversions.keyword; + conversions.ansi16; + conversions.ansi256; + conversions.hcg; + conversions.apple; + conversions.gray; + + /* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. + */ + + function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; + } + + // https://en.wikipedia.org/wiki/Breadth-first_search + function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; + } + + function link(from, to) { + return function (args) { + return to(from(args)); + }; + } + + function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; + } + + var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; + }; + + var convert$1 = {}; + + var models = Object.keys(conversions); + + function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); + }); + + var colorConvert = convert$1; + + var _slice = [].slice; + + var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' + ]; + + var hashedModelKeys = {}; + Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; + }); + + var limiters = {}; + + function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } + } + + Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } + }; + + // model conversion methods and static constructors + Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } + + var channels = colorConvert[model].channels; + + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } + + if (arguments.length) { + return new Color(arguments, model); + } + + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; + }); + + function roundTo(num, places) { + return Number(num.toFixed(places)); + } + + function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; + } + + function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; + } + + function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; + } + + function assertArray(val) { + return Array.isArray(val) ? val : [val]; + } + + function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; + } + + var color$1 = Color; + + /* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) + */ + var DICT$1 = { + // name value nicer + navy: { + value: "#000080", + nicer: "#001F3F", + }, + blue: { + value: "#0000ff", + nicer: "#0074D9", + }, + aqua: { + value: "#00ffff", + nicer: "#7FDBFF", + }, + teal: { + value: "#008080", + nicer: "#39CCCC", + }, + olive: { + value: "#008000", + nicer: "#3D9970", + }, + green: { + value: "#008000", + nicer: "#2ECC40", + }, + lime: { + value: "#00ff00", + nicer: "#01FF70", + }, + yellow: { + value: "#ffff00", + nicer: "#FFDC00", + }, + orange: { + value: "#ffa500", + nicer: "#FF851B", + }, + red: { + value: "#ff0000", + nicer: "#FF4136", + }, + maroon: { + value: "#800000", + nicer: "#85144B", + }, + fuchsia: { + value: "#ff00ff", + nicer: "#F012BE", + }, + purple: { + value: "#800080", + nicer: "#B10DC9", + }, + silver: { + value: "#c0c0c0", + nicer: "#DDDDDD", + }, + gray: { + value: "#808080", + nicer: "#AAAAAA", + }, + black: { + value: "#000000", + nicer: "#111111", + }, + white: { + value: "#FFFFFF", + nicer: "#FFFFFF", + }, + }; + + /* + ## Helpers + */ + + const upper = function (str) { + return (str + "").toUpperCase(); + }; + + const lower = function (str) { + return (str + "").toLowerCase(); + }; + + // 从数组中随机选取一个元素,并返回。 + // 更改 pick 函数 , 函数不进行重载 + const pick = function (arr, min, max) { + // pick( [ item1, item2 ... ] ) + if (min === undefined && max === undefined) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + if (min !== undefined && max !== undefined) return shuffle(arr, min, max); + // pick( [ item1, item2 ... ], count ) + return shuffle(arr, 0, min); + }; + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + */ + const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(min, max); + } + }; + /* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ + const Cache = {}; + const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; + }; + + var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } + ]; + + /* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() + */ + + let _hue; + function _goldenRatioColor(saturation, value) { + let _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return color$1.hsv(_hue * 360, saturation * 100, value * 100); + } + + // 中国色 数据来自于 http://zhongguose.com + + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 + function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return pick(RandomColor).hex; + } + + // #DAC0DE + function hex() { + var hsv = _goldenRatioColor(); + return hsv.hex(); + } + + // rgb(128,255,255) + function rgb() { + var hsv = _goldenRatioColor(); + return hsv.hsv().string(); + } + // rgba(128,255,255,0.3) + function rgba() { + var hsv = _goldenRatioColor(); + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); + } + + // hsl(300,80%,90%) + function hsl() { + var hsv = _goldenRatioColor(); + return hsv.hsl().string(); + } + + var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] + }; + var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" + ]; + var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" + ]; + var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" + ]; + var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 + }; + + /* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) + */ + let { firstName, lastName, cfirstName, clastName } = Name; + + // 随机生成一个常见的英文名。 + function first() { + var names = firstName.male.concat(); + return pick(names); + } + + // 随机生成一个常见的英文姓。 + function last() { + return pick(lastName); + } + + // 随机生成一个常见的英文姓名。 + function name(middle) { + middle = middle ? ` ${first()} ` : " "; + return `${first()}${middle}${last()}`; + } + + /* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + */ + function cfirst() { + return pick(cfirstName); + } /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + */ + function clast() { + return pick(clastName); + } + // 随机生成一个常见的中文姓名。 + function cname() { + return cfirst() + clast(); + } + + // Unique ID creation requires a high quality random # generator. In the browser we therefore + // require the crypto API and do not support built-in fallback to lower quality random number + // generators (like Math.random()). + var getRandomValues; + var rnds8 = new Uint8Array(16); + function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); + } + + var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; + + function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); + } + + /** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + + var byteToHex = []; + + for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); + } + + function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; + } + + function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); + } + + var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" + }; + + /* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 + */ + + // id pid/parentId name children + + // 将扁平数组转化为树状 + function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 + result.push(item); + return { mapped, result }; + } + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; + } + const ids = Object.keys(DICT); + + // 转化数组内对象的表现形式 + const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!ids.includes(pid)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + "0000"; + } + return { + id, + pid, + name: value, + }; + }); + + const DICT_FIXED = createTree(fixed); + + var _patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", + }; + + /* + ## Date + */ + + const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + + // 返回一个随机的日期字符串。 + function date(format = "yyyy-MM-dd") { + return _formatDate(_randomDate(), format); + } + function datetime(format = "yyyy-MM-dd HH:mm:ss") { + return date(format); + } + function time(format = "HH:mm:ss") { + return date(format); + } + function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } + + return _formatDate(date, format); + } + + function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); + } + + function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + } + + function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); + } + + /* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) + */ + function id() { + var id, + sum = 0, + rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], + last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + + id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; + } + + /* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ + function guid() { + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); + } + + /* + ## Miscellaneous + */ + + /* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 + */ + let key = 0; + const increment = function (step) { + return (key += +step || 1); + }; + const inc = increment; + + // Dice + function d4() { + return this.natural(1, 4); + } + function d6() { + return this.natural(1, 6); + } + function d8() { + return this.natural(1, 8); + } + function d12() { + return this.natural(1, 12); + } + function d20() { + return this.natural(1, 20); + } + function d100() { + return this.natural(1, 100); + } + + function range(defaultMin, defaultMax, min, max) { + return min === undefined + ? natural(defaultMin, defaultMax) // () + : max === undefined + ? min // ( len ) + : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) + } + + // 随机生成一个句子,第一个单词的首字母大写。 + function sentence(min, max) { + var len = range(12, 18, min, max); + let string = [...Array(len)].map(() => word()).join(""); + return capitalize(string) + "."; + } + + // 随机生成一个单词。 + function word(min, max) { + var len = range(3, 10, min, max); + return [...Array(len)].map(() => character("lower")).join(""); + } + + // 随机生成一段文本。 + function paragraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map((i) => sentence()); + } + + // 随机生成一句标题,其中每个单词的首字母大写。 + function title(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => capitalize(word())).join(""); + } + + function cparagraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => csentence()).join(""); + } + + // 随机生成一个中文句子。 + function csentence(min, max) { + var len = range(12, 18, min, max); + return [...Array(len)].map(() => cword()).join("") + "。"; + } + // 随机生成一句中文标题。 + function ctitle(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => cword()).join(""); + } + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + const DICT_HANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; + // 随机生成一个或多个汉字。 + function cword(...args) { + var len = 1, + pool = DICT_HANZI, + min, + max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === "string") { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof args[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + const poolLength = pool.length; + if (len === 1) return pool.charAt(natural(0, poolLength)); + + return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); + } + + // 协议簇 + const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); + const tlds = // 域名后缀 + ( + "com net org edu gov int mil cn " + + // 国内域名 + "com.cn net.cn gov.cn org.cn " + + // 中文国内域名 + "中国 中国互联.公司 中国互联.网络 " + + // 新国际域名 + "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + // 世界各国域名后缀 + "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" + ).split(" "); + + /* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers + */ + function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; + } + + // 随机生成一个 URL 协议。 + function protocol() { + return pick(protocols); + } + // 随机生成一个域名。 + function domain(Tld) { + return `${word()}.${Tld || tld()}`; + } + /* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) + */ + function tld() { + // Top Level Domain + return pick(tlds); + } + + // 随机生成一个邮件地址。 + function email(domain) { + return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; + } + // 随机生成一个 IP 地址。 + function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join("."); + } + + var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" + ]; + var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" + ]; + var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" + ]; + var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 + }; + + var Addvocate = "#ff6138"; + var Adobe = "#ff0000"; + var Aim = "#fcd20b"; + var Amazon = "#e47911"; + var Android = "#a4c639"; + var AOL = "#0060a3"; + var Atlassian = "#003366"; + var Behance = "#053eff"; + var bitly = "#ee6123"; + var Blogger = "#fc4f08"; + var Boeing = "#0039a6"; + var Carbonmade = "#613854"; + var Cheddar = "#ff7243"; + var Delicious = "#205cc0"; + var Dell = "#3287c1"; + var Designmoo = "#e54a4f"; + var Deviantart = "#4e6252"; + var Devour = "#fd0001"; + var DEWALT = "#febd17"; + var Dribbble = "#ea4c89"; + var Dropbox = "#3d9ae8"; + var Drupal = "#0c76ab"; + var Dunked = "#2a323a"; + var eBay = "#89c507"; + var Ember = "#f05e1b"; + var Engadget = "#00bdf6"; + var Envato = "#528036"; + var Etsy = "#eb6d20"; + var Evernote = "#5ba525"; + var Facebook = "#3b5998"; + var Firefox = "#e66000"; + var Forrst = "#5b9a68"; + var Foursquare = "#25a0ca"; + var Garmin = "#007cc3"; + var GetGlue = "#2d75a2"; + var Gimmebar = "#f70078"; + var GitHub = "#171515"; + var Grooveshark = "#f77f00"; + var Groupon = "#82b548"; + var HelloWallet = "#0085ca"; + var HootSuite = "#003366"; + var Houzz = "#73ba37"; + var HTML5 = "#ec6231"; + var IKEA = "#ffcc33"; + var IMDb = "#f3ce13"; + var Instagram = "#3f729b"; + var Intel = "#0071c5"; + var Intuit = "#365ebf"; + var Kickstarter = "#76cc1e"; + var kippt = "#e03500"; + var Kodery = "#00af81"; + var LastFM = "#c3000d"; + var LinkedIn = "#0e76a8"; + var Livestream = "#cf0005"; + var Lumo = "#576396"; + var Mixpanel = "#a086d3"; + var Meetup = "#e51937"; + var Nokia = "#183693"; + var NVIDIA = "#76b900"; + var Opera = "#cc0f16"; + var Path = "#e41f11"; + var Pinboard = "#0000e6"; + var Pinterest = "#c8232c"; + var PlayStation = "#665cbe"; + var Pocket = "#ee4056"; + var Prezi = "#318bff"; + var Pusha = "#0f71b4"; + var Quora = "#a82400"; + var Rdio = "#008fd5"; + var Readability = "#9c0000"; + var Resource = "#7eb400"; + var Rockpack = "#0ba6ab"; + var Roon = "#62b0d9"; + var RSS = "#ee802f"; + var Salesforce = "#1798c1"; + var Samsung = "#0c4da2"; + var Shopify = "#96bf48"; + var Skype = "#00aff0"; + var Snagajob = "#f47a20"; + var Softonic = "#008ace"; + var SoundCloud = "#ff7700"; + var Spotify = "#81b71a"; + var Sprint = "#fee100"; + var Squarespace = "#121212"; + var StackOverflow = "#ef8236"; + var Staples = "#cc0000"; + var Stripe = "#008cdd"; + var StudyBlue = "#00afe1"; + var StumbleUpon = "#f74425"; + var Technorati = "#40a800"; + var Treehouse = "#5cb868"; + var Trulia = "#5eab1f"; + var Tumblr = "#34526f"; + var Twitter = "#00acee"; + var TYPO3 = "#ff8700"; + var Ubuntu = "#dd4814"; + var Ustream = "#3388ff"; + var Verizon = "#ef1d1d"; + var Vimeo = "#86c9ef"; + var Vine = "#00a478"; + var Virb = "#06afd8"; + var Wooga = "#5b009c"; + var Wunderlist = "#2b88d9"; + var XBOX = "#9bc848"; + var XING = "#126567"; + var Yandex = "#ffcc00"; + var Yelp = "#c41200"; + var YouTube = "#c4302b"; + var Zalongo = "#5498dc"; + var Zendesk = "#78a300"; + var Zerply = "#9dcc7a"; + var Zootool = "#5e8b1d"; + var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool + }; + + /* global document */ + let { _adSize, _screenSize, _videoSize } = size; + const _brandNames = Object.keys(_brandColors); + + /* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 + */ + function image(...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = (foreground || hex()).replace(/^#/, ""); + background = (background || hex()).replace(/^#/, ""); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; + } + /* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, + */ + function dataImage(size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); + } + + /* + ## Address + */ + var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; + + // 随机生成一个大区。 + function region() { + return pick(REGION); + } + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + function province() { + return pick(DICT_FIXED).name; + } + // 随机生成一个(中国)市。 + function city(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; + } + // 随机生成一个(中国)县。 + function county(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + var county = pick(city) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; + } + // 随机生成一个邮政编码(六位数字)。 + function zip(len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; + } + + // 用于生成 Blob 和 File 型数据的工具 + function prepare(anyData) { + let prepared; + switch (type$1(anyData)) { + case "array": + prepared = anyData; + default: + prepared = [anyData]; + } + return prepared; + } + function genFile(anyData) { + return new File(prepare(anyData), word()); + } + function genBlob() { + return new Blob(prepare(anyData)); + } + + /* + ## Mock.Random + + 工具类,用于生成各种随机数据。 + */ + + var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + float: float, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range$1, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip, + genFile: genFile, + genBlob: genBlob + }); + + /* + ## Constant + + 常量集合。 + */ + /* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 + */ + var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ + }; + + /* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + /* jshint -W041 */ + function parser$1(name = "") { + if (typeof name !== "string") name = name + ""; + var parameters = name.match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; + } + + function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { + var result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + }); + } + } + } + return result; + } + + function boolean({ rule: { max, min, parameters }, template = "" }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; + } + + function _function(options) { + let { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); + } + + function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { + var result; + if (decimal) { + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { + result = float(min, max, dmin, dmax); // 内置字符串转数字 + }); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; + } + + function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + var result = {}, + keys = [], + fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (let key in template) { + (typeof template[key] === "function" ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + let inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type$1(template[key]) === "number") { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; + } + + // https://github.com/nuysoft/regexp + + function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); + } + + function Alternate(n, l) { + Token.call(this, "alternate"), (this.left = n), (this.right = l); + } + + function Match(n) { + Token.call(this, "match"), (this.body = n.filter(Boolean)); + } + + function Group(n, l) { + Token.call(this, n), (this.body = l); + } + + function CaptureGroup(n) { + Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); + } + + function Quantified(n, l) { + Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); + } + + function Quantifier(n, l) { + Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); + } + + function CharSet(n, l) { + Token.call(this, "charset"), (this.invert = n), (this.body = l); + } + + function CharacterRange(n, l) { + Token.call(this, "range"), (this.start = n), (this.end = l); + } + + function Literal(n) { + Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); + } + + function Unicode(n) { + Token.call(this, "unicode"), (this.code = n.toUpperCase()); + } + + function Hex(n) { + Token.call(this, "hex"), (this.code = n.toUpperCase()); + } + + function Octal(n) { + Token.call(this, "octal"), (this.code = n.toUpperCase()); + } + + function BackReference(n) { + Token.call(this, "back-reference"), (this.code = n.toUpperCase()); + } + + function ControlCharacter(n) { + Token.call(this, "control-character"), (this.code = n.toUpperCase()); + } + + var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, "\\\\") + .replace(/"/g, '\\"') + .replace(/\x08/g, "\\b") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\f/g, "\\f") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return "\\x0" + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return "\\x" + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return "\\u0" + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; + } + (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + "\n" === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : "\r" === e || "\u2028" === e || "\u2029" === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null === t && (t = al), + null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function s() { + var l, u; + return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function h() { + var n, l, u; + return ( + (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), + null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function g() { + var l, u; + return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function b() { + var l, u; + return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) + for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) + if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function M() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function D() { + var l, u; + return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function H() { + var l, u; + return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function O() { + var l, u; + return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function W() { + var l, u; + return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function z() { + var l, u; + return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function I() { + var l, u; + return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function J() { + var l, u; + return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function K() { + var l, u; + return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function N() { + var l, u; + return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function P() { + var l, u; + return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function V() { + var l, u; + return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function X() { + var l, u; + return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { + if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) + for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = "", + fl = "|", + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = "^", + vl = '"^"', + wl = function () { + return new Token("start"); + }, + Al = "$", + Cl = '"$"', + gl = function () { + return new Token("end"); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = "Quantifier", + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = "{", + yl = '"{"', + ml = ",", + Rl = '","', + Fl = "}", + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ",}", + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = "+", + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = "*", + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = "?", + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = "[0-9]", + Jl = function (n) { + return +n.join(""); + }, + Kl = "(", + Nl = '"("', + Pl = ")", + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = "?:", + _l = '"?:"', + nu = function (n) { + return new Group("non-capture-group", n); + }, + lu = "?=", + uu = '"?="', + tu = function (n) { + return new Group("positive-lookahead", n); + }, + ru = "?!", + eu = '"?!"', + ou = function (n) { + return new Group("negative-lookahead", n); + }, + cu = "CharacterSet", + iu = "[", + au = '"["', + fu = "]", + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = "CharacterRange", + pu = "-", + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = "Character", + Cu = /^[^\\\]]/, + gu = "[^\\\\\\]]", + bu = function (n) { + return new Literal(n); + }, + ku = ".", + Tu = '"."', + xu = function () { + return new Token("any-character"); + }, + yu = "Literal", + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = "[^|\\\\\\/.[()?+*$\\^]", + Fu = "\\b", + Qu = '"\\\\b"', + Su = function () { + return new Token("backspace"); + }, + Uu = function () { + return new Token("word-boundary"); + }, + Eu = "\\B", + Gu = '"\\\\B"', + Bu = function () { + return new Token("non-word-boundary"); + }, + ju = "\\d", + $u = '"\\\\d"', + qu = function () { + return new Token("digit"); + }, + Lu = "\\D", + Mu = '"\\\\D"', + Du = function () { + return new Token("non-digit"); + }, + Hu = "\\f", + Ou = '"\\\\f"', + Wu = function () { + return new Token("form-feed"); + }, + zu = "\\n", + Iu = '"\\\\n"', + Ju = function () { + return new Token("line-feed"); + }, + Ku = "\\r", + Nu = '"\\\\r"', + Pu = function () { + return new Token("carriage-return"); + }, + Vu = "\\s", + Xu = '"\\\\s"', + Yu = function () { + return new Token("white-space"); + }, + Zu = "\\S", + _u = '"\\\\S"', + nt = function () { + return new Token("non-white-space"); + }, + lt = "\\t", + ut = '"\\\\t"', + tt = function () { + return new Token("tab"); + }, + rt = "\\v", + et = '"\\\\v"', + ot = function () { + return new Token("vertical-tab"); + }, + ct = "\\w", + it = '"\\\\w"', + at = function () { + return new Token("word"); + }, + ft = "\\W", + st = '"\\\\W"', + ht = function () { + return new Token("non-word"); + }, + dt = "\\c", + pt = '"\\\\c"', + vt = "any character", + wt = function (n) { + return new ControlCharacter(n); + }, + At = "\\", + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = "[1-9]", + kt = function (n) { + return new BackReference(n); + }, + Tt = "\\0", + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = "[0-7]", + Rt = function (n) { + return new Octal(n.join("")); + }, + Ft = "\\x", + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = "[0-9a-fA-F]", + Et = function (n) { + return new Hex(n.join("")); + }, + Gt = "\\u", + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join("")); + }, + $t = function () { + return new Token("null-character"); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + + /* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } + + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ + /* + + */ + var Handler$2 = { + extend: extend, + }; + + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart + /*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] + }*/ + + // ASCII printable code chart + // var LOWER = 'abcdefghijklmnopqrstuvwxyz' + // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + // var NUMBER = '0123456789' + // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' + var LOWER = ascii(97, 122); + var UPPER = ascii(65, 90); + var NUMBER = ascii(48, 57); + var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) + var PRINTABLE = ascii(32, 126); + var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; + var CHARACTER_CLASSES = { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ""); + } + return result; + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, + }; + + // 从 from 到 to 包含两个端点的字符串 + function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); + } + + // var ast = RegExpParser.parse(regexp.source) + Handler$2.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); + }; + + Handler$2.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case "start": + case "end": + return ""; + case "any-character": + return character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return pick(NUMBER.split("")); + case "non-digit": + return pick((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return pick(SPACE.split("")); + case "non-white-space": + return pick((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return pick(OTHER.replace("_", "").split("")); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean$1() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ""; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + "capture-group": function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + "non-capture-group": function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + "positive-lookahead": function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + "negative-lookahead": function (node, result, cache) { + // node.body + return ""; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this["invert-charset"](node, result, cache); + + // node.body [] + var literal = pick(node.body); + return this.gen(literal, result, cache); + }, + "invert-charset": function (node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ""); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ""); + } + } + } + } + return pick(pool.split("")); + }, + range: function (node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, + }); + + var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$2 + }); + + function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + let Source = count === undefined ? source : Array(count).fill(source).join(""); + return Handler$2.gen(parser.parse(Source)); + } + + function getValueByKeyPath(key, options) { + var originalKey = key; + var keyPathParts = splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); + } + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + function normalizePath(pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; + } + function splitPathToArray(path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + } + + // 占位符即是字符串函数的意思 + function placeholder(Placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(Placeholder); + + var lkey = key && key.toLowerCase(), + pathParts = splitPathToArray(key); + + // 解析占位符的参数 + // !不进行低版本浏览器的匹配 + params = params.split(/\s*,\s*/); + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random)) return Placeholder; + + // 递归解析参数中的占位符 + params = params.map((param) => { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); + } + return param; + }); + + var handle = Random[key] || Random[lkey]; + switch (type$1(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + } + + function string(options) { + let { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = "", + } = options; + var result = ""; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(""); + + // 'email|1-10': '@EMAIL, ', + let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + let phed = placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + if (isNumeric(phed)) { + result = parseFloat(phed, 10); + return true; + } + if (/^(true|false)$/.test(phed)) { + result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 + return true; + } // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; + } + return result; + } + + var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string + }); + + let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 + function gen(template, name = "", context = {}) { + var newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + var type = type$1(template); + let func = typeset[type]; + var data; + + if (func) { + data = func({ + // 属性值类型 + type, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, + // 解析后的生成规则 + rule: parser$1(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; + } + + /* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + + */ + /* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot + */ + var Handler$1 = { + gen, + extend, + }; + Handler$1.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, + }); + Handler$1.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, + }); + + /* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + + function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + var result = { + name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + template, + type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? "ROOT" : result.name); + + switch (result.type) { + case "array": + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case "object": + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } + + return result; + } + + /* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) + */ + + function valid(template, data) { + var schema = toJSONSchema(template); + var result = Diff.diff(schema, data); + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; + } + + /* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 + */ + var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + var result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + var length = result.length; + + Assert.equal("name", schema.path, name + "", schema.name + "", result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + var length = result.length; + + switch (schema.type) { + case "string": + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case "array": + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case "function": + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } + + Assert.equal("type", schema.path, type$1(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var templateType = schema.type; + if (templateType === "object" || templateType === "array" || templateType === "function") return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case "regexp": + Assert.match("value", schema.path, data, schema.template, result); + return result.length === length; + case "string": + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal("value", schema.path, data, schema.template, result); + return result.length === length; + } + + // 有生成规则 + var actualRepeatCount; + switch (templateType) { + case "number": + var parts = (data + "").split("."); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case "boolean": + break; + + case "string": + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case "regexp": + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + break; + } + + return result.length === length; + }, + properties: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); + } + } + + if (result.length !== length) return false; + + for (var i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + var property; + each(schema.properties, function (item /*, index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i] + ) + ); + } + + return result.length === length; + }, + items: function (schema, data, name, result) { + var length = result.length; + + if (!schema.items) return; + + var rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("items length", schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + "items", + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + ); + Assert.lessThanOrEqualTo( + "items", + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + + if (result.length !== length) return false; + + for (var i = 0; i < data.length; i++) { + result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); + } + + return result.length === length; + }, + }; + + /* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + + */ + var Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace("{utype}", item.type.toUpperCase()) + .replace("{ltype}", item.type.toLowerCase()) + .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) + .replace("{action}", item.action) + .replace("{expected}", item.expected) + .replace("{actual}", item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case "type": + // 正则模板 === 字符串最终值 + if (expected === "regexp" && actual === "string") return true; + break; + } + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "matches", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is not equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + }; + + valid.Diff = Diff; + valid.Assert = Assert; + + // 集中管理 mocked 的 url + + const _mocked = { + $set(value) { + this[value.rurl + value.rtype.toLowerCase()] = value; + }, + $delete(key) { + delete this[key]; + }, + }; + + // 查找与请求参数匹配的数据模板:URL,Type + function find({ url, type }) { + type = type.toLowerCase(); + for (var sUrlType in _mocked) { + var item = _mocked[sUrlType]; + let { rurl, rtype } = item; + if (match(rurl, url) && match(rtype, type)) { + // console.log('[mock]', url, '>', item.rurl) + return item; + } + } + return false; + } + + function match(expected, actual) { + switch (type$1(expected)) { + case "string": + return expected === actual; + case "regexp": + return expected.test(actual); + default: + return false; + } + } + + // 数据模板 => 响应数据 + function convert({ template }, options) { + return isFunction(template) ? template(options) : gen(template); + } + + /** + * Check if `obj` is a URLSearchParams object + * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 + * + * @param {*} obj + * @return {boolean} + */ + const isURLSearchParameters = (object) => { + return ( + typeof object === "object" && + typeof object.append === "function" && + typeof object.delete === "function" && + typeof object.get === "function" && + typeof object.getAll === "function" && + typeof object.has === "function" && + typeof object.set === "function" && + typeof object.sort === "function" && + object[Symbol.toStringTag] === "URLSearchParams" // 获取类名的方式哦 + ); + }; + + const BODY = Symbol("Body internals"); + const RESPONSE = Symbol("Response internals"); + + /** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ + async function consumeBody(data) { + // 标记为已经使用 + if (data.disturbed) { + throw new TypeError(`body used already for: ${data.url}`); + } + data.disturbed = true; + + // 报错 + if (data.error) { + throw data.error; + } + + if (data.body instanceof FormData) { + return new Blob([Object.fromEntries(a.entries())]); + } + return data.body; + } + + /** + * Body.js + * + * Body interface provides common methods for Request and Response + */ + /** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ + class Body { + constructor(body, { size = 0 } = {}) { + if (body === null) { + // Body is undefined or null + body = new Blob([]); + } else if (isURLSearchParameters(body)) { + // Body is a URLSearchParams + body = new Blob([body]); + } else if (ArrayBuffer.isView(body)) { + // Body is ArrayBufferView + body = new Blob([body]); + } else { + body = new Blob([JSON.stringify(body)]); + } + + this[BODY] = { + body, + boundary: null, + disturbed: false, + error: null, + }; + this.size = size; + } + + get body() { + return this[BODY].body; + } + + get bodyUsed() { + return this[BODY].disturbed; + } + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + async arrayBuffer() { + const blob = await consumeBody(this[BODY]); + return blob.arrayBuffer(); + } + + /** + * Return raw response as Blob + * + * @return Promise + */ + async blob() { + return consumeBody(this[BODY]); + } + + /** + * Decode response as json + * + * @return Promise + */ + async json() { + const text = await this.text(); + return JSON.parse(text || "{}"); + } + + /** + * Decode response as text + * + * @return Promise + */ + async text() { + const blob = await consumeBody(this[BODY]); + return blob.text(); + } + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + } + + // In browsers, all properties are enumerable. + Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true }, + }); + + /** + * Performs the operation "extract a `Content-Type` value from |object|" as + * specified in the specification: + * https://fetch.spec.whatwg.org/#concept-bodyinit-extract + * + * This function assumes that instance.body is present. + * + * @param {any} body Any options.body input + * @returns {string | null} + */ + const extractContentType = (body, request) => { + // Body is null or undefined + if (body === null) { + return null; + } + + // Body is string + if (typeof body === "string") { + return "text/plain;charset=UTF-8"; + } + + // Body is a URLSearchParams + if (isURLSearchParameters(body)) { + return "application/x-www-form-urlencoded;charset=UTF-8"; + } + + // Body is blob + if (body instanceof Blob) { + return body.type || null; + } + + if (body instanceof FormData) { + return `multipart/form-data; boundary=${request[INTERNALS].boundary}`; + } + + // Body constructor defaults other things to string + return "text/plain;charset=UTF-8"; + }; + + const redirectStatus = new Set([301, 302, 303, 307, 308]); + + /** + * Redirect code matching + * + * @param {number} code - Status code + * @return {boolean} + */ + const isRedirect = code => { + return redirectStatus.has(code); + }; + + /** + * Response.js + * + * Response class provides content decoding + */ + /** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ + class fakeResponse extends Body { + constructor(body = null, options = {}) { + super(body, options); + const status = options.status != null ? options.status : 200; + const headers = new Headers(options.headers); + if (body !== null && !headers.has("Content-Type")) { + const contentType = extractContentType(body); + if (contentType) { + headers.append("Content-Type", contentType); + } + } + this[RESPONSE] = { + type: "default", + url: options.url, + status, + statusText: options.statusText || "", + headers, + counter: options.counter, + }; + } + + get type() { + return this[RESPONSE].type; + } + + get url() { + return this[RESPONSE].url || ""; + } + + get status() { + return this[RESPONSE].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; + } + + get redirected() { + return this[RESPONSE].counter > 0; + } + + get statusText() { + return this[RESPONSE].statusText; + } + + get headers() { + return this[RESPONSE].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + // Don't allow cloning a used body + if (bodyUsed) { + throw new Error("cannot clone body after it is used"); + } + return new Response(this.body, { + type: this.type, + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected, + size: this.size, + }); + } + + /** + * @param {string} url The URL that the new response is to originate from. + * @param {number} status An optional status code for the response (e.g., 302.) + * @returns {Response} A Response object. + */ + static redirect(url, status = 302) { + if (!isRedirect(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + + return new Response(null, { + headers: { + location: new URL(url).toString(), + }, + status, + }); + } + + static error() { + const response = new Response(null, { status: 0, statusText: "" }); + response[RESPONSE].type = "error"; + return response; + } + + get [Symbol.toStringTag]() { + return "Response"; + } + } + + Object.defineProperties(Response.prototype, { + type: { enumerable: true }, + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true }, + }); + + var realFetch = window.fetch; + function mockFetch() { + // 代理 fetch 的初始化函数 + if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { + window.fetch = fakeFetch; + window.fetch.$mock = true; + console.warn("fetch 已经被代理"); + } + } + + async function fakeFetch(url, options = {}) { + if (window.fetch.$mock === true) { + // 只有在 $mock 标记为 true 时才进行代理 + let result = find({ + url, + type: (options.method || "get").toLowerCase(), + }); + if (result) { + const data = convert(result, {}); + console.warn("mock代理中"); + return new fakeResponse(data, options); + } + } + + console.warn("未使用 mockjs"); + return realFetch(url, options); + } + + /* global window, document, location, Event, setTimeout */ + // 备份原生 XMLHttpRequest + window._XMLHttpRequest = window.XMLHttpRequest; + window._ActiveXObject = window.ActiveXObject; + + /* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 + */ + try { + new window.Event("custom"); + } catch (exception) { + window.Event = function (type, bubbles, cancelable, detail) { + var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event; + }; + } + + var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4, + }; + + var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); + var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); + var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); + + // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 + var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", + }; + + /* + MockXMLHttpRequest + */ + + function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {}, + }; + } + + MockXMLHttpRequest._settings = { + timeout: "10-100", + /* + timeout: 50, + timeout: '10-100', + */ + }; + + MockXMLHttpRequest.setup = function (settings) { + assignIn(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings; + }; + + assignIn(MockXMLHttpRequest, XHR_STATES); + assignIn(MockXMLHttpRequest.prototype, XHR_STATES); + + // 标记当前对象为 MockXMLHttpRequest + MockXMLHttpRequest.prototype.mock = true; + + // 是否拦截 Ajax 请求 + MockXMLHttpRequest.prototype.match = false; + + // 初始化 Request 相关的属性和方法 + assignIn(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function (method, url, async = true, username, password) { + var that = this; + + assignIn(this.custom, { + method: method, + url: url, + async: typeof async === "boolean" ? async : true, + username: username, + password: password, + options: { + url: url, + type: method, + }, + }); + + this.custom.timeout = (function (timeout) { + if (typeof timeout === "number") return timeout; + if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); + if (typeof timeout === "string" && ~timeout.indexOf("-")) { + var tmp = timeout.split("-"); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min; + } + })(MockXMLHttpRequest._settings.timeout); + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options); + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/)); + } + + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; + + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle); + } + + // xhr.open() + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); + + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; + } catch (e) {} + } + + return; + } + + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function (name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value); + return; + } + + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += "," + value; + else requestHeaders[name] = value; + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this; + this.custom.options.body = data; + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data); + return; + } + + // 拦截 XHR + + // X-Requested-With header + this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); + + // loadstart The fetch initiates. + this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); + + if (this.custom.async) setTimeout(done, this.custom.timeout); + // 异步 + else done(); // 同步 + + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; + + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); + + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.dispatchEvent(new Event("load" /*, false, false, that*/)); + that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); + } + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort(); + return; + } + + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event("abort", false, false, this)); + this.dispatchEvent(new Event("error", false, false, this)); + }, + }); + + // 初始化 Response 相关的属性和方法 + assignIn(MockXMLHttpRequest.prototype, { + responseURL: "", + status: MockXMLHttpRequest.UNSENT, + statusText: "", + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function (name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name); + } + + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()]; + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function () { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders(); + } + + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders; + var headers = ""; + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue; + headers += h + ": " + responseHeaders[h] + "\r\n"; + } + return headers; + }, + overrideMimeType: function (/*mime*/) {}, + responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: "", + responseXML: null, + }); + + // EventTarget + assignIn(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || []; + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1); + } + } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || []; + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event); + } + + var ontype = "on" + event.type; + if (this[ontype]) this[ontype](event); + }, + }); + + // Inspired by jQuery + function createNativeXMLHttpRequest() { + var isLocal = (function () { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]); + })(); + + return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} + } + + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } + } + + // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 + typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 + + /* global require, module, window */ + + var XHR; + if (typeof window !== "undefined") XHR = MockXMLHttpRequest; + + /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com @@ -59,4 +15120,68 @@ return t?ln(0,e+n)>e?!t:t:ln(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",u 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ - */;var oa={Handler:Xr,Random:tr,Util:An,XHR:Zr,RE:Lr,toJSONSchema:Kr,valid:Yr,heredoc:wn,setup:function(e){return Zr.setup(e)},_mocked:{},version:"1.1.1-es6"};return Zr&&(Zr.Mock=oa),oa.mock=function(...e){let n,t;switch(e.length){case 1:return[t]=e,Xr.gen(t);case 2:[n,t]=e;case 3:default:return Zr&&(window.XMLHttpRequest=Zr),oa._mocked[n+""]={rurl:n,rtype:"",template:t},oa}},oa}(); + */ + var Mock = { + Handler: Handler$1, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked, + }; + + Mock.version = "1.1.1-es6"; + + // 避免循环依赖 + if (XHR) XHR.Mock = Mock; + + /* + * Mock.mock( template ) + * Mock.mock( function() ) + * Mock.mock( rurl, template ) + * Mock.mock( rurl, function(options) ) + * Mock.mock( rurl, rtype, template ) + * Mock.mock( rurl, rtype, function(options) ) + + 根据数据模板生成模拟数据。 + */ + Mock.mock = function (...args) { + let rurl, + rtype = "get", + template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler$1.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + break; + case 3: + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; + } + + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + _mocked.$set({ + rurl, + rtype, + template, + }); + return Mock; + }; + + return Mock; + +}()); diff --git a/dist/mock.js b/dist/mock.js index 32b7cb9c..535e7d10 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -1,56 +1,15114 @@ + +(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol$1 = root.Symbol; + +/** Used for built-in method references. */ +var objectProto$8 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$8.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$7 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto$7.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** Used as references for various `Number` constants. */ +var INFINITY$1 = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$1 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax$1 = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax$1(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Built-in value references. */ +var Buffer = moduleExports$1 ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = +typedArrayTags[setTag] = typedArrayTags[stringTag$1] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ$1 = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +/** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ +var upperFirst = createCaseFirst('toUpperCase'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); +} + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom$1 = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); +} + +/** Built-in method references without a dependency on `root`. */ +var freeParseFloat = parseFloat; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min, + nativeRandom = Math.random; + +/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; +} + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range$1 = createRange(); + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; +} + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); +} + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); +} + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); +} + +// 使用 lodash 提供的方式 +function type$1(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); +} + +function isObjectOrArray(value) { + return isObject(value) || isArray(value); +} + +function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); +} + +// import { isObject, isArray } from "./type.js"; +function extend(...args) { + return assignIn(this, ...args); +} + +function each(obj, iterator, context) { + // each + var i, key; + if (type(obj) === "number") { + //表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } +} + +/* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 +*/ +function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, "") + .replace(/\*\/[^\/]+$/, "") + .replace(/^[\s\xA0]+/, "") + .replace(/[\s\xA0]+$/, ""); // .trim() +} + +/* + ## Utilities +*/ +function keys(obj) { + return Object.keys(obj); +} +function values(obj) { + return Object.values(obj); +} +function noop() {} + +var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type$1, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc +}); + +const isNumber = function (el) { + return typeof el === "number" && !isNaN(el); +}; +const numberGate = function (input) { + if (isNumber(input)) return input; + let res = parseInt(input); + return isNumber(res) ? res : undefined; +}; +// 返回一个随机的整数。 +const integer = function (min, max) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + return random(min, max, false); +}; +const natural = function (min, max) { + return Math.abs(integer(min, max)); +}; + +const float = function (min, max, dmin, dmax) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + dmin = numberGate(dmin) || 1; + dmax = numberGate(dmax) || 17; + if (dmin < 1) dmin = 1; + if (dmax > 17) dmax = 17; + let dcount = random(dmin, dmax, false); + return parseFloat(random(min, max, true).toFixed(dcount)); +}; + +const boolean$1 = function (min, max, cur) { + //! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; +}; + +const pools = { + lower: "abcdefghijklmnopqrstuvwxyz", + upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", + number: "0123456789", + symbol: "!@#$%^&*()[]", +}; +pools.alpha = pools.lower + pools.upper; +pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + +const character = function (pool = "default") { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return pool.charAt(natural(0, pool.length - 1)); +}; + +const string$1 = function (...args) { + var len, pool, min, max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof arguments[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return [...Array(len).keys()].map(() => character(pool)).join(""); +}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); +}; + +var simpleSwizzle = createCommonjsModule(function (module) { + + + +var concat = Array.prototype.concat; +var slice = Array.prototype.slice; + +var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; +}; + +swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; +}; +}); + +var colorString = createCommonjsModule(function (module) { +/* MIT license */ + + + +var reverseNames = {}; + +// create a list of reverse color names +for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } +} + +var cs = module.exports = { + to: {}, + get: {} +}; + +cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; +}; + +cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; +}; + +cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; +}; + +cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; +}; + +cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); +}; + +cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; +}; + +cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; +}; + +cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; +}; + +// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax +// (hwb have alpha optional & 1 is default value) +cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; +}; + +cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; + +// helpers +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} + +function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; +} +}); +colorString.to; +colorString.get; + +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var conversions = createCommonjsModule(function (module) { +/* MIT license */ + + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return colorName[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; +}); +conversions.rgb; +conversions.hsl; +conversions.hsv; +conversions.hwb; +conversions.cmyk; +conversions.xyz; +conversions.lab; +conversions.lch; +conversions.hex; +conversions.keyword; +conversions.ansi16; +conversions.ansi256; +conversions.hcg; +conversions.apple; +conversions.gray; + +/* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + +var convert$1 = {}; + +var models = Object.keys(conversions); + +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +var colorConvert = convert$1; + +var _slice = [].slice; + +var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' +]; + +var hashedModelKeys = {}; +Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; +}); + +var limiters = {}; + +function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } +} + +Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } +}; + +// model conversion methods and static constructors +Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } + + var channels = colorConvert[model].channels; + + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } + + if (arguments.length) { + return new Color(arguments, model); + } + + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; +}); + +function roundTo(num, places) { + return Number(num.toFixed(places)); +} + +function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; +} + +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; +} + +function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; +} + +function assertArray(val) { + return Array.isArray(val) ? val : [val]; +} + +function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; +} + +var color$1 = Color; + +/* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) +*/ +var DICT$1 = { + // name value nicer + navy: { + value: "#000080", + nicer: "#001F3F", + }, + blue: { + value: "#0000ff", + nicer: "#0074D9", + }, + aqua: { + value: "#00ffff", + nicer: "#7FDBFF", + }, + teal: { + value: "#008080", + nicer: "#39CCCC", + }, + olive: { + value: "#008000", + nicer: "#3D9970", + }, + green: { + value: "#008000", + nicer: "#2ECC40", + }, + lime: { + value: "#00ff00", + nicer: "#01FF70", + }, + yellow: { + value: "#ffff00", + nicer: "#FFDC00", + }, + orange: { + value: "#ffa500", + nicer: "#FF851B", + }, + red: { + value: "#ff0000", + nicer: "#FF4136", + }, + maroon: { + value: "#800000", + nicer: "#85144B", + }, + fuchsia: { + value: "#ff00ff", + nicer: "#F012BE", + }, + purple: { + value: "#800080", + nicer: "#B10DC9", + }, + silver: { + value: "#c0c0c0", + nicer: "#DDDDDD", + }, + gray: { + value: "#808080", + nicer: "#AAAAAA", + }, + black: { + value: "#000000", + nicer: "#111111", + }, + white: { + value: "#FFFFFF", + nicer: "#FFFFFF", + }, +}; + +/* + ## Helpers +*/ + +const upper = function (str) { + return (str + "").toUpperCase(); +}; + +const lower = function (str) { + return (str + "").toLowerCase(); +}; + +// 从数组中随机选取一个元素,并返回。 +// 更改 pick 函数 , 函数不进行重载 +const pick = function (arr, min, max) { + // pick( [ item1, item2 ... ] ) + if (min === undefined && max === undefined) return arr[natural(0, arr.length - 1)]; + // pick( [ item1, item2 ... ], min, max ) + if (min !== undefined && max !== undefined) return shuffle(arr, min, max); + // pick( [ item1, item2 ... ], count ) + return shuffle(arr, 0, min); +}; +/* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. +*/ +const shuffle = function (arr, min, max) { + let result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(min, max); + } +}; +/* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ +const Cache = {}; +const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + var options = order.options; + var templatePath = options.context.templatePath.join("."); + + var cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; +}; + +var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } +]; + +/* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() +*/ + +let _hue; +function _goldenRatioColor(saturation, value) { + let _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== "number") saturation = 0.5; + if (typeof value !== "number") value = 0.95; + + return color$1.hsv(_hue * 360, saturation * 100, value * 100); +} + +// 中国色 数据来自于 http://zhongguose.com + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 +function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return pick(RandomColor).hex; +} + +// #DAC0DE +function hex() { + var hsv = _goldenRatioColor(); + return hsv.hex(); +} + +// rgb(128,255,255) +function rgb() { + var hsv = _goldenRatioColor(); + return hsv.hsv().string(); +} +// rgba(128,255,255,0.3) +function rgba() { + var hsv = _goldenRatioColor(); + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); +} + +// hsl(300,80%,90%) +function hsl() { + var hsv = _goldenRatioColor(); + return hsv.hsl().string(); +} + +var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] +}; +var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" +]; +var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" +]; +var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" +]; +var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 +}; + +/* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) +*/ +let { firstName, lastName, cfirstName, clastName } = Name; + +// 随机生成一个常见的英文名。 +function first() { + var names = firstName.male.concat(); + return pick(names); +} + +// 随机生成一个常见的英文姓。 +function last() { + return pick(lastName); +} + +// 随机生成一个常见的英文姓名。 +function name(middle) { + middle = middle ? ` ${first()} ` : " "; + return `${first()}${middle}${last()}`; +} + +/* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) +*/ +function cfirst() { + return pick(cfirstName); +} /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) +*/ +function clast() { + return pick(clastName); +} +// 随机生成一个常见的中文姓名。 +function cname() { + return cfirst() + clast(); +} + +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +var getRandomValues; +var rnds8 = new Uint8Array(16); +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} + +var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +var byteToHex = []; + +for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); +} + +var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" +}; + +/* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 +*/ + +// id pid/parentId name children + +// 将扁平数组转化为树状 +function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + let { mapped, result } = all; + let { id, pid } = item; + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 + result.push(item); + return { mapped, result }; + } + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { + //父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + } + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; +} +const ids = Object.keys(DICT); + +// 转化数组内对象的表现形式 +const fixed = Object.entries(DICT).map(([id, value]) => { + var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + if (!ids.includes(pid)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + "0000"; + } + return { + id, + pid, + name: value, + }; +}); + +const DICT_FIXED = createTree(fixed); + +var _patternLetters = { + yyyy: "getFullYear", + yy: function (date) { + return ("" + date.getFullYear()).slice(2); + }, + y: "yy", + + MM: function (date) { + var m = date.getMonth() + 1; + return m < 10 ? "0" + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + var d = date.getDate(); + return d < 10 ? "0" + d : d; + }, + d: "getDate", + + HH: function (date) { + var h = date.getHours(); + return h < 10 ? "0" + h : h; + }, + H: "getHours", + hh: function (date) { + var h = date.getHours() % 12; + return h < 10 ? "0" + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + var m = date.getMinutes(); + return m < 10 ? "0" + m : m; + }, + m: "getMinutes", + + ss: function (date) { + var s = date.getSeconds(); + return s < 10 ? "0" + s : s; + }, + s: "getSeconds", + + SS: function (date) { + var ms = date.getMilliseconds(); + return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + }, + S: "getMilliseconds", + + A: function (date) { + return date.getHours() < 12 ? "AM" : "PM"; + }, + a: function (date) { + return date.getHours() < 12 ? "am" : "pm"; + }, + T: "getTime", +}; + +/* + ## Date +*/ + +const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); + +// 返回一个随机的日期字符串。 +function date(format = "yyyy-MM-dd") { + return _formatDate(_randomDate(), format); +} +function datetime(format = "yyyy-MM-dd HH:mm:ss") { + return date(format); +} +function time(format = "HH:mm:ss") { + return date(format); +} +function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ""; + } + } + unit = (unit || "").toLowerCase(); + format = format || "yyyy-MM-dd HH:mm:ss"; + + var date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case "year": + date.setMonth(0); + case "month": + date.setDate(1); + case "week": + case "day": + date.setHours(0); + case "hour": + date.setMinutes(0); + case "minute": + date.setSeconds(0); + case "second": + date.setMilliseconds(0); + } + switch (unit) { + case "week": + date.setDate(date.getDate() - date.getDay()); + } + + return _formatDate(date, format); +} + +function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + let targetPattern = _patternLetters[flag]; + return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + }); +} + +function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); +} + +function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); +} + +/* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) +*/ +function id() { + var id, + sum = 0, + rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], + last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + + id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); + + for (var i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; +} + +/* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ +function guid() { + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); +} + +/* + ## Miscellaneous +*/ + +/* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 +*/ +let key = 0; +const increment = function (step) { + return (key += +step || 1); +}; +const inc = increment; + +// Dice +function d4() { + return this.natural(1, 4); +} +function d6() { + return this.natural(1, 6); +} +function d8() { + return this.natural(1, 8); +} +function d12() { + return this.natural(1, 12); +} +function d20() { + return this.natural(1, 20); +} +function d100() { + return this.natural(1, 100); +} + +function range(defaultMin, defaultMax, min, max) { + return min === undefined + ? natural(defaultMin, defaultMax) // () + : max === undefined + ? min // ( len ) + : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) +} + +// 随机生成一个句子,第一个单词的首字母大写。 +function sentence(min, max) { + var len = range(12, 18, min, max); + let string = [...Array(len)].map(() => word()).join(""); + return capitalize(string) + "."; +} + +// 随机生成一个单词。 +function word(min, max) { + var len = range(3, 10, min, max); + return [...Array(len)].map(() => character("lower")).join(""); +} + +// 随机生成一段文本。 +function paragraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map((i) => sentence()); +} + +// 随机生成一句标题,其中每个单词的首字母大写。 +function title(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => capitalize(word())).join(""); +} + +function cparagraph(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => csentence()).join(""); +} + +// 随机生成一个中文句子。 +function csentence(min, max) { + var len = range(12, 18, min, max); + return [...Array(len)].map(() => cword()).join("") + "。"; +} +// 随机生成一句中文标题。 +function ctitle(min, max) { + var len = range(3, 7, min, max); + return [...Array(len)].map(() => cword()).join(""); +} +// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm +const DICT_HANZI = + "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; +// 随机生成一个或多个汉字。 +function cword(...args) { + var len = 1, + pool = DICT_HANZI, + min, + max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === "string") { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof args[0] === "string") { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + const poolLength = pool.length; + if (len === 1) return pool.charAt(natural(0, poolLength)); + + return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); +} + +// 协议簇 +const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); +const tlds = // 域名后缀 +( + "com net org edu gov int mil cn " + + // 国内域名 + "com.cn net.cn gov.cn org.cn " + + // 中文国内域名 + "中国 中国互联.公司 中国互联.网络 " + + // 新国际域名 + "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + // 世界各国域名后缀 + "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" +).split(" "); + +/* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers +*/ +function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; +} + +// 随机生成一个 URL 协议。 +function protocol() { + return pick(protocols); +} +// 随机生成一个域名。 +function domain(Tld) { + return `${word()}.${Tld || tld()}`; +} +/* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) +*/ +function tld() { + // Top Level Domain + return pick(tlds); +} + +// 随机生成一个邮件地址。 +function email(domain) { + return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; +} +// 随机生成一个 IP 地址。 +function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join("."); +} + +var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" +]; +var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" +]; +var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" +]; +var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 +}; + +var Addvocate = "#ff6138"; +var Adobe = "#ff0000"; +var Aim = "#fcd20b"; +var Amazon = "#e47911"; +var Android = "#a4c639"; +var AOL = "#0060a3"; +var Atlassian = "#003366"; +var Behance = "#053eff"; +var bitly = "#ee6123"; +var Blogger = "#fc4f08"; +var Boeing = "#0039a6"; +var Carbonmade = "#613854"; +var Cheddar = "#ff7243"; +var Delicious = "#205cc0"; +var Dell = "#3287c1"; +var Designmoo = "#e54a4f"; +var Deviantart = "#4e6252"; +var Devour = "#fd0001"; +var DEWALT = "#febd17"; +var Dribbble = "#ea4c89"; +var Dropbox = "#3d9ae8"; +var Drupal = "#0c76ab"; +var Dunked = "#2a323a"; +var eBay = "#89c507"; +var Ember = "#f05e1b"; +var Engadget = "#00bdf6"; +var Envato = "#528036"; +var Etsy = "#eb6d20"; +var Evernote = "#5ba525"; +var Facebook = "#3b5998"; +var Firefox = "#e66000"; +var Forrst = "#5b9a68"; +var Foursquare = "#25a0ca"; +var Garmin = "#007cc3"; +var GetGlue = "#2d75a2"; +var Gimmebar = "#f70078"; +var GitHub = "#171515"; +var Grooveshark = "#f77f00"; +var Groupon = "#82b548"; +var HelloWallet = "#0085ca"; +var HootSuite = "#003366"; +var Houzz = "#73ba37"; +var HTML5 = "#ec6231"; +var IKEA = "#ffcc33"; +var IMDb = "#f3ce13"; +var Instagram = "#3f729b"; +var Intel = "#0071c5"; +var Intuit = "#365ebf"; +var Kickstarter = "#76cc1e"; +var kippt = "#e03500"; +var Kodery = "#00af81"; +var LastFM = "#c3000d"; +var LinkedIn = "#0e76a8"; +var Livestream = "#cf0005"; +var Lumo = "#576396"; +var Mixpanel = "#a086d3"; +var Meetup = "#e51937"; +var Nokia = "#183693"; +var NVIDIA = "#76b900"; +var Opera = "#cc0f16"; +var Path = "#e41f11"; +var Pinboard = "#0000e6"; +var Pinterest = "#c8232c"; +var PlayStation = "#665cbe"; +var Pocket = "#ee4056"; +var Prezi = "#318bff"; +var Pusha = "#0f71b4"; +var Quora = "#a82400"; +var Rdio = "#008fd5"; +var Readability = "#9c0000"; +var Resource = "#7eb400"; +var Rockpack = "#0ba6ab"; +var Roon = "#62b0d9"; +var RSS = "#ee802f"; +var Salesforce = "#1798c1"; +var Samsung = "#0c4da2"; +var Shopify = "#96bf48"; +var Skype = "#00aff0"; +var Snagajob = "#f47a20"; +var Softonic = "#008ace"; +var SoundCloud = "#ff7700"; +var Spotify = "#81b71a"; +var Sprint = "#fee100"; +var Squarespace = "#121212"; +var StackOverflow = "#ef8236"; +var Staples = "#cc0000"; +var Stripe = "#008cdd"; +var StudyBlue = "#00afe1"; +var StumbleUpon = "#f74425"; +var Technorati = "#40a800"; +var Treehouse = "#5cb868"; +var Trulia = "#5eab1f"; +var Tumblr = "#34526f"; +var Twitter = "#00acee"; +var TYPO3 = "#ff8700"; +var Ubuntu = "#dd4814"; +var Ustream = "#3388ff"; +var Verizon = "#ef1d1d"; +var Vimeo = "#86c9ef"; +var Vine = "#00a478"; +var Virb = "#06afd8"; +var Wooga = "#5b009c"; +var Wunderlist = "#2b88d9"; +var XBOX = "#9bc848"; +var XING = "#126567"; +var Yandex = "#ffcc00"; +var Yelp = "#c41200"; +var YouTube = "#c4302b"; +var Zalongo = "#5498dc"; +var Zendesk = "#78a300"; +var Zerply = "#9dcc7a"; +var Zootool = "#5e8b1d"; +var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool +}; + +/* global document */ +let { _adSize, _screenSize, _videoSize } = size; +const _brandNames = Object.keys(_brandColors); + +/* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 +*/ +function image(...args) { + let size, background, foreground, format, text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = (foreground || hex()).replace(/^#/, ""); + background = (background || hex()).replace(/^#/, ""); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; +} +/* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, +*/ +function dataImage(size, text) { + var canvas; + if (typeof document !== "undefined") { + canvas = document.createElement("canvas"); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + var Canvas = module.require("canvas"); + canvas = new Canvas(); + } + + var ctx = canvas && canvas.getContext && canvas.getContext("2d"); + if (!canvas || !ctx) return ""; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split("x"); + + var width = parseInt(size[0], 10), + height = parseInt(size[1], 10), + background = _brandColors[pick(_brandNames)], + foreground = "#FFF", + text_height = 14, + font = "sans-serif"; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = "center"; + ctx.textBaseline = "middle"; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = "bold " + text_height + "px " + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL("image/png"); +} + +/* + ## Address +*/ +var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; + +// 随机生成一个大区。 +function region() { + return pick(REGION); +} +// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 +function province() { + return pick(DICT_FIXED).name; +} +// 随机生成一个(中国)市。 +function city(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + return prefix ? [province.name, city.name].join(" ") : city.name; +} +// 随机生成一个(中国)县。 +function county(prefix) { + var province = pick(DICT_FIXED); + var city = pick(province.children); + var county = pick(city) || { + name: "-", + }; + return prefix ? [province.name, city.name, county.name].join(" ") : county.name; +} +// 随机生成一个邮政编码(六位数字)。 +function zip(len) { + var zip = ""; + for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; +} + +// 用于生成 Blob 和 File 型数据的工具 +function prepare(anyData) { + let prepared; + switch (type$1(anyData)) { + case "array": + prepared = anyData; + default: + prepared = [anyData]; + } + return prepared; +} +function genFile(anyData) { + return new File(prepare(anyData), word()); +} +function genBlob() { + return new Blob(prepare(anyData)); +} + +/* + ## Mock.Random + + 工具类,用于生成各种随机数据。 +*/ + +var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + float: float, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range$1, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip, + genFile: genFile, + genBlob: genBlob +}); + +/* + ## Constant + + 常量集合。 + */ +/* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 +*/ +var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ +}; + +/* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ +/* jshint -W041 */ +function parser$1(name = "") { + if (typeof name !== "string") name = name + ""; + var parameters = name.match(Constant.RE_KEY); + + var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + var min = range && range[1] && parseInt(range[1], 10); // || 1 + var max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + var result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + let isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; +} + +function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { + var result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }) + ); + }); + }); + } + } + } + return result; +} + +function boolean({ rule: { max, min, parameters }, template = "" }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; +} + +function _function(options) { + let { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); +} + +function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { + var result; + if (decimal) { + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { + result = float(min, max, dmin, dmax); // 内置字符串转数字 + }); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; +} + +function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + var result = {}, + keys = [], + fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (let key in template) { + (typeof template[key] === "function" ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + let parsedKey = key.replace(Constant.RE_KEY, "$1"); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + let inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type$1(template[key]) === "number") { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; +} + +// https://github.com/nuysoft/regexp + +function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); +} + +function Alternate(n, l) { + Token.call(this, "alternate"), (this.left = n), (this.right = l); +} + +function Match(n) { + Token.call(this, "match"), (this.body = n.filter(Boolean)); +} + +function Group(n, l) { + Token.call(this, n), (this.body = l); +} + +function CaptureGroup(n) { + Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); +} + +function Quantified(n, l) { + Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); +} + +function Quantifier(n, l) { + Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); +} + +function CharSet(n, l) { + Token.call(this, "charset"), (this.invert = n), (this.body = l); +} + +function CharacterRange(n, l) { + Token.call(this, "range"), (this.start = n), (this.end = l); +} + +function Literal(n) { + Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); +} + +function Unicode(n) { + Token.call(this, "unicode"), (this.code = n.toUpperCase()); +} + +function Hex(n) { + Token.call(this, "hex"), (this.code = n.toUpperCase()); +} + +function Octal(n) { + Token.call(this, "octal"), (this.code = n.toUpperCase()); +} + +function BackReference(n) { + Token.call(this, "back-reference"), (this.code = n.toUpperCase()); +} + +function ControlCharacter(n) { + Token.call(this, "control-character"), (this.code = n.toUpperCase()); +} + +var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, "\\\\") + .replace(/"/g, '\\"') + .replace(/\x08/g, "\\b") + .replace(/\t/g, "\\t") + .replace(/\n/g, "\\n") + .replace(/\f/g, "\\f") + .replace(/\r/g, "\\r") + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return "\\x0" + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return "\\x" + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return "\\u0" + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return "\\u" + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = "end of input"; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; + } + (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + "\n" === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : "\r" === e || "\u2028" === e || "\u2029" === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null === t && (t = al), + null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function s() { + var l, u; + return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function h() { + var n, l, u; + return ( + (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), + null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function g() { + var l, u; + return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function b() { + var l, u; + return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) + for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) + if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function M() { + var l, u; + return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function D() { + var l, u; + return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function H() { + var l, u; + return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function O() { + var l, u; + return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function W() { + var l, u; + return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function z() { + var l, u; + return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function I() { + var l, u; + return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function J() { + var l, u; + return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function K() { + var l, u; + return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function N() { + var l, u; + return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function P() { + var l, u; + return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function V() { + var l, u; + return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function X() { + var l, u; + return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { + if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) + for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { + if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) + for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = "", + fl = "|", + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = "^", + vl = '"^"', + wl = function () { + return new Token("start"); + }, + Al = "$", + Cl = '"$"', + gl = function () { + return new Token("end"); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = "Quantifier", + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = "{", + yl = '"{"', + ml = ",", + Rl = '","', + Fl = "}", + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ",}", + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = "+", + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = "*", + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = "?", + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = "[0-9]", + Jl = function (n) { + return +n.join(""); + }, + Kl = "(", + Nl = '"("', + Pl = ")", + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = "?:", + _l = '"?:"', + nu = function (n) { + return new Group("non-capture-group", n); + }, + lu = "?=", + uu = '"?="', + tu = function (n) { + return new Group("positive-lookahead", n); + }, + ru = "?!", + eu = '"?!"', + ou = function (n) { + return new Group("negative-lookahead", n); + }, + cu = "CharacterSet", + iu = "[", + au = '"["', + fu = "]", + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = "CharacterRange", + pu = "-", + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = "Character", + Cu = /^[^\\\]]/, + gu = "[^\\\\\\]]", + bu = function (n) { + return new Literal(n); + }, + ku = ".", + Tu = '"."', + xu = function () { + return new Token("any-character"); + }, + yu = "Literal", + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = "[^|\\\\\\/.[()?+*$\\^]", + Fu = "\\b", + Qu = '"\\\\b"', + Su = function () { + return new Token("backspace"); + }, + Uu = function () { + return new Token("word-boundary"); + }, + Eu = "\\B", + Gu = '"\\\\B"', + Bu = function () { + return new Token("non-word-boundary"); + }, + ju = "\\d", + $u = '"\\\\d"', + qu = function () { + return new Token("digit"); + }, + Lu = "\\D", + Mu = '"\\\\D"', + Du = function () { + return new Token("non-digit"); + }, + Hu = "\\f", + Ou = '"\\\\f"', + Wu = function () { + return new Token("form-feed"); + }, + zu = "\\n", + Iu = '"\\\\n"', + Ju = function () { + return new Token("line-feed"); + }, + Ku = "\\r", + Nu = '"\\\\r"', + Pu = function () { + return new Token("carriage-return"); + }, + Vu = "\\s", + Xu = '"\\\\s"', + Yu = function () { + return new Token("white-space"); + }, + Zu = "\\S", + _u = '"\\\\S"', + nt = function () { + return new Token("non-white-space"); + }, + lt = "\\t", + ut = '"\\\\t"', + tt = function () { + return new Token("tab"); + }, + rt = "\\v", + et = '"\\\\v"', + ot = function () { + return new Token("vertical-tab"); + }, + ct = "\\w", + it = '"\\\\w"', + at = function () { + return new Token("word"); + }, + ft = "\\W", + st = '"\\\\W"', + ht = function () { + return new Token("non-word"); + }, + dt = "\\c", + pt = '"\\\\c"', + vt = "any character", + wt = function (n) { + return new ControlCharacter(n); + }, + At = "\\", + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = "[1-9]", + kt = function (n) { + return new BackReference(n); + }, + Tt = "\\0", + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = "[0-7]", + Rt = function (n) { + return new Octal(n.join("")); + }, + Ft = "\\x", + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = "[0-9a-fA-F]", + Et = function (n) { + return new Hex(n.join("")); + }, + Gt = "\\u", + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join("")); + }, + $t = function () { + return new Token("null-character"); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ("startRule" in el) { + if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + +/* + ## RegExp Handler + + https://github.com/ForbesLindesay/regexp + https://github.com/dmajda/pegjs + http://www.regexper.com/ + + 每个节点的结构 + { + type: '', + offset: number, + text: '', + body: {}, + escaped: true/false + } + + type 可选值 + alternate | 选择 + match 匹配 + capture-group () 捕获组 + non-capture-group (?:...) 非捕获组 + positive-lookahead (?=p) 零宽正向先行断言 + negative-lookahead (?!p) 零宽负向先行断言 + quantified a* 重复节点 + quantifier * 量词 + charset [] 字符集 + range {m, n} 范围 + literal a 直接量字符 + unicode \uxxxx Unicode + hex \x 十六进制 + octal 八进制 + back-reference \n 反向引用 + control-character \cX 控制字符 + + // Token + start ^ 开头 + end $ 结尾 + any-character . 任意字符 + backspace [\b] 退格直接量 + word-boundary \b 单词边界 + non-word-boundary \B 非单词边界 + digit \d ASCII 数字,[0-9] + non-digit \D 非 ASCII 数字,[^0-9] + form-feed \f 换页符 + line-feed \n 换行符 + carriage-return \r 回车符 + white-space \s 空白符 + non-white-space \S 非空白符 + tab \t 制表符 + vertical-tab \v 垂直制表符 + word \w ASCII 字符,[a-zA-Z0-9] + non-word \W 非 ASCII 字符,[^a-zA-Z0-9] + null-character \o NUL 字符 + */ +/* + + */ +var Handler$2 = { + extend: extend, +}; + +// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +/*var ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] +}*/ + +// ASCII printable code chart +// var LOWER = 'abcdefghijklmnopqrstuvwxyz' +// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +// var NUMBER = '0123456789' +// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' +var LOWER = ascii(97, 122); +var UPPER = ascii(65, 90); +var NUMBER = ascii(48, 57); +var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) +var PRINTABLE = ascii(32, 126); +var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; +var CHARACTER_CLASSES = { + "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) + "\\W": OTHER.replace("_", ""), + "\\s": SPACE, + "\\S": (function () { + var result = PRINTABLE; + for (var i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ""); + } + return result; + })(), + "\\d": NUMBER, + "\\D": LOWER + UPPER + OTHER, +}; + +// 从 from 到 to 包含两个端点的字符串 +function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); +} + +// var ast = RegExpParser.parse(regexp.source) +Handler$2.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); +}; + +Handler$2.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case "start": + case "end": + return ""; + case "any-character": + return character(); + case "backspace": + return ""; + case "word-boundary": // TODO + return ""; + case "non-word-boundary": // TODO + break; + case "digit": + return pick(NUMBER.split("")); + case "non-digit": + return pick((LOWER + UPPER + OTHER).split("")); + case "form-feed": + break; + case "line-feed": + return node.body || node.text; + case "carriage-return": + break; + case "white-space": + return pick(SPACE.split("")); + case "non-white-space": + return pick((LOWER + UPPER + NUMBER).split("")); + case "tab": + break; + case "vertical-tab": + break; + case "word": // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split("")); + case "non-word": // \W [^a-zA-Z0-9] + return pick(OTHER.replace("_", "").split("")); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean$1() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ""; + // node.body [] + for (var i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + "capture-group": function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + "non-capture-group": function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + "positive-lookahead": function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + "negative-lookahead": function (node, result, cache) { + // node.body + return ""; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ""; + // node.quantifier {} + var count = this.quantifier(node.quantifier); + // node.body {} + for (var i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + var min = Math.max(node.min, 0); + var max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this["invert-charset"](node, result, cache); + + // node.body [] + var literal = pick(node.body); + return this.gen(literal, result, cache); + }, + "invert-charset": function (node, result, cache) { + var pool = PRINTABLE; + for (var i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case "literal": + pool = pool.replace(item.body, ""); + break; + case "range": + var min = this.gen(item.start, result, cache).charCodeAt(); + var max = this.gen(item.end, result, cache).charCodeAt(); + for (var ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ""); + } + /* falls through */ + default: + var characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (var iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ""); + } + } + } + } + return pick(pool.split("")); + }, + range: function (node, result, cache) { + // node.start, node.end + var min = this.gen(node.start, result, cache).charCodeAt(); + var max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + "back-reference": function (node, result, cache) { + return cache[node.code] || ""; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); + var CONTROL_CHARACTER_UNICODE = + "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( + " " + ); + var map = {}; + for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + "control-character": function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, +}); + +var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$2 +}); + +function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + let Source = count === undefined ? source : Array(count).fill(source).join(""); + return Handler$2.gen(parser.parse(Source)); +} + +function getValueByKeyPath(key, options) { + var originalKey = key; + var keyPathParts = splitPathToArray(key); + var absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === "/") { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + var currentContext = options.context.root; + var templateCurrentContext = options.context.templateRoot; + for (var i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === "object" && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) {} + + return "@" + keyPathParts.join("/"); +} +// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js +function normalizePath(pathParts) { + var newPathParts = []; + for (var i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case "..": + newPathParts.pop(); + break; + case ".": + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; +} +function splitPathToArray(path) { + var parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; +} + +// 占位符即是字符串函数的意思 +function placeholder(Placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(""); + var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(Placeholder); + + var lkey = key && key.toLowerCase(), + pathParts = splitPathToArray(key); + + // 解析占位符的参数 + // !不进行低版本浏览器的匹配 + params = params.split(/\s*,\s*/); + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // 绝对路径 or 相对路径 + if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === "object" && + key in templateContext && + Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random)) return Placeholder; + + // 递归解析参数中的占位符 + params = params.map((param) => { + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); + } + return param; + }); + + var handle = Random[key] || Random[lkey]; + switch (type$1(handle)) { + case "array": + // 自动从数组中取一个,例如 @areas + return pick(handle); + case "function": + // 执行占位符方法(大多数情况) + handle.options = options; + var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } +} + +function string(options) { + let { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = "", + } = options; + var result = ""; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(""); + + // 'email|1-10': '@EMAIL, ', + let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + let phed = placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + if (isNumeric(phed)) { + result = parseFloat(phed, 10); + return true; + } + if (/^(true|false)$/.test(phed)) { + result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 + return true; + } // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; + } + return result; +} + +var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string +}); + +let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 +function gen(template, name = "", context = {}) { + var newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + var type = type$1(template); + let func = typeset[type]; + var data; + + if (func) { + data = func({ + // 属性值类型 + type, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, + // 解析后的生成规则 + rule: parser$1(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; +} + +/* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + +*/ +/* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot +*/ +var Handler$1 = { + gen, + extend, +}; +Handler$1.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, +}); +Handler$1.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, +}); + +/* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + +function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + var result = { + name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + template, + type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? "ROOT" : result.name); + + switch (result.type) { + case "array": + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case "object": + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } + + return result; +} + +/* + ## valid(template, data) + + 校验真实数据 data 是否与数据模板 template 匹配。 + + 实现思路: + 1. 解析规则。 + 先把数据模板 template 解析为更方便机器解析的 JSON-Schame + name 属性名 + type 属性值类型 + template 属性值模板 + properties 对象属性数组 + items 数组元素数组 + rule 属性值生成规则 + 2. 递归验证规则。 + 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 + + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) + [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) +*/ + +function valid(template, data) { + var schema = toJSONSchema(template); + var result = Diff.diff(schema, data); + for (var i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; +} + +/* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 +*/ +var Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + var result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + var length = result.length; + + Assert.equal("name", schema.path, name + "", schema.name + "", result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + var length = result.length; + + switch (schema.type) { + case "string": + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case "array": + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case "function": + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } + + Assert.equal("type", schema.path, type$1(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var templateType = schema.type; + if (templateType === "object" || templateType === "array" || templateType === "function") return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case "regexp": + Assert.match("value", schema.path, data, schema.template, result); + return result.length === length; + case "string": + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal("value", schema.path, data, schema.template, result); + return result.length === length; + } + + // 有生成规则 + var actualRepeatCount; + switch (templateType) { + case "number": + var parts = (data + "").split("."); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case "boolean": + break; + + case "string": + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case "regexp": + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + } + break; + } + + return result.length === length; + }, + properties: function (schema, data, name, result) { + var length = result.length; + + var rule = schema.rule; + var keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); + Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); + } + } + + if (result.length !== length) return false; + + for (var i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + var property; + each(schema.properties, function (item /*, index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i] + ) + ); + } + + return result.length === length; + }, + items: function (schema, data, name, result) { + var length = result.length; + + if (!schema.items) return; + + var rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal("items length", schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + "items", + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + ); + Assert.lessThanOrEqualTo( + "items", + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + + if (result.length !== length) return false; + + for (var i = 0; i < data.length; i++) { + result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); + } + + return result.length === length; + }, +}; + +/* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + +*/ +var Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace("{utype}", item.type.toUpperCase()) + .replace("{ltype}", item.type.toLowerCase()) + .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) + .replace("{action}", item.action) + .replace("{expected}", item.expected) + .replace("{actual}", item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case "type": + // 正则模板 === 字符串最终值 + if (expected === "regexp" && actual === "string") return true; + break; + } + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "matches", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is not equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is greater than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + var item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: "is less than or equal to", + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, +}; + +valid.Diff = Diff; +valid.Assert = Assert; + +// 集中管理 mocked 的 url + +const _mocked = { + $set(value) { + this[value.rurl + value.rtype.toLowerCase()] = value; + }, + $delete(key) { + delete this[key]; + }, +}; + +// 查找与请求参数匹配的数据模板:URL,Type +function find({ url, type }) { + type = type.toLowerCase(); + for (var sUrlType in _mocked) { + var item = _mocked[sUrlType]; + let { rurl, rtype } = item; + if (match(rurl, url) && match(rtype, type)) { + // console.log('[mock]', url, '>', item.rurl) + return item; + } + } + return false; +} + +function match(expected, actual) { + switch (type$1(expected)) { + case "string": + return expected === actual; + case "regexp": + return expected.test(actual); + default: + return false; + } +} + +// 数据模板 => 响应数据 +function convert({ template }, options) { + return isFunction(template) ? template(options) : gen(template); +} + +/** + * Check if `obj` is a URLSearchParams object + * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 + * + * @param {*} obj + * @return {boolean} + */ +const isURLSearchParameters = (object) => { + return ( + typeof object === "object" && + typeof object.append === "function" && + typeof object.delete === "function" && + typeof object.get === "function" && + typeof object.getAll === "function" && + typeof object.has === "function" && + typeof object.set === "function" && + typeof object.sort === "function" && + object[Symbol.toStringTag] === "URLSearchParams" // 获取类名的方式哦 + ); +}; + +const BODY = Symbol("Body internals"); +const RESPONSE = Symbol("Response internals"); + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +async function consumeBody(data) { + // 标记为已经使用 + if (data.disturbed) { + throw new TypeError(`body used already for: ${data.url}`); + } + data.disturbed = true; + + // 报错 + if (data.error) { + throw data.error; + } + + if (data.body instanceof FormData) { + return new Blob([Object.fromEntries(a.entries())]); + } + return data.body; +} + +/** + * Body.js + * + * Body interface provides common methods for Request and Response + */ +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Body { + constructor(body, { size = 0 } = {}) { + if (body === null) { + // Body is undefined or null + body = new Blob([]); + } else if (isURLSearchParameters(body)) { + // Body is a URLSearchParams + body = new Blob([body]); + } else if (ArrayBuffer.isView(body)) { + // Body is ArrayBufferView + body = new Blob([body]); + } else { + body = new Blob([JSON.stringify(body)]); + } + + this[BODY] = { + body, + boundary: null, + disturbed: false, + error: null, + }; + this.size = size; + } + + get body() { + return this[BODY].body; + } + + get bodyUsed() { + return this[BODY].disturbed; + } + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + async arrayBuffer() { + const blob = await consumeBody(this[BODY]); + return blob.arrayBuffer(); + } + + /** + * Return raw response as Blob + * + * @return Promise + */ + async blob() { + return consumeBody(this[BODY]); + } + + /** + * Decode response as json + * + * @return Promise + */ + async json() { + const text = await this.text(); + return JSON.parse(text || "{}"); + } + + /** + * Decode response as text + * + * @return Promise + */ + async text() { + const blob = await consumeBody(this[BODY]); + return blob.text(); + } + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ +} + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true }, +}); + +/** + * Performs the operation "extract a `Content-Type` value from |object|" as + * specified in the specification: + * https://fetch.spec.whatwg.org/#concept-bodyinit-extract + * + * This function assumes that instance.body is present. + * + * @param {any} body Any options.body input + * @returns {string | null} + */ +const extractContentType = (body, request) => { + // Body is null or undefined + if (body === null) { + return null; + } + + // Body is string + if (typeof body === "string") { + return "text/plain;charset=UTF-8"; + } + + // Body is a URLSearchParams + if (isURLSearchParameters(body)) { + return "application/x-www-form-urlencoded;charset=UTF-8"; + } + + // Body is blob + if (body instanceof Blob) { + return body.type || null; + } + + if (body instanceof FormData) { + return `multipart/form-data; boundary=${request[INTERNALS].boundary}`; + } + + // Body constructor defaults other things to string + return "text/plain;charset=UTF-8"; +}; + +const redirectStatus = new Set([301, 302, 303, 307, 308]); + +/** + * Redirect code matching + * + * @param {number} code - Status code + * @return {boolean} + */ +const isRedirect = code => { + return redirectStatus.has(code); +}; + +/** + * Response.js + * + * Response class provides content decoding + */ /** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var i=Object.prototype.toString;var c=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":c&&c in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return i.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return $.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function K(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function te(e){return null!=e&&ne(e.length)&&!O(e)}function re(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?te(t)&&K(n,t.length):"string"==r&&n in t)&&J(t[n],e)}var ae=Object.prototype;function oe(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ae)}function ue(e){return s(e)&&"[object Arguments]"==h(e)}var le=Object.prototype,ie=le.hasOwnProperty,ce=le.propertyIsEnumerable,he=ue(function(){return arguments}())?ue:function(e){return s(e)&&ie.call(e,"callee")&&!ce.call(e,"callee")};var se="object"==typeof exports&&exports&&!exports.nodeType&&exports,fe=se&&"object"==typeof module&&module&&!module.nodeType&&module,me=fe&&fe.exports===se?t.Buffer:void 0,de=(me?me.isBuffer:void 0)||function(){return!1},pe={};function xe(e){return function(n){return e(n)}}pe["[object Float32Array]"]=pe["[object Float64Array]"]=pe["[object Int8Array]"]=pe["[object Int16Array]"]=pe["[object Int32Array]"]=pe["[object Uint8Array]"]=pe["[object Uint8ClampedArray]"]=pe["[object Uint16Array]"]=pe["[object Uint32Array]"]=!0,pe["[object Arguments]"]=pe["[object Array]"]=pe["[object ArrayBuffer]"]=pe["[object Boolean]"]=pe["[object DataView]"]=pe["[object Date]"]=pe["[object Error]"]=pe["[object Function]"]=pe["[object Map]"]=pe["[object Number]"]=pe["[object Object]"]=pe["[object RegExp]"]=pe["[object Set]"]=pe["[object String]"]=pe["[object WeakMap]"]=!1;var be="object"==typeof exports&&exports&&!exports.nodeType&&exports,ge=be&&"object"==typeof module&&module&&!module.nodeType&&module,ve=ge&&ge.exports===be&&e.process,ye=function(){try{var e=ge&&ge.require&&ge.require("util").types;return e||ve&&ve.binding&&ve.binding("util")}catch(e){}}(),we=ye&&ye.isTypedArray,ke=we?xe(we):function(e){return s(e)&&ne(e.length)&&!!pe[h(e)]},Ae=Object.prototype.hasOwnProperty;function Me(e,n){var t=d(e),r=!t&&he(e),a=!t&&!r&&de(e),o=!t&&!r&&!a&&ke(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Se.length>3&&"function"==typeof a?(r--,a):void 0,o&&re(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=an();return rn(e+a*(n-e+tn("1e-"+((a+"").length-1))),n)}return nn(e,n)}var un=Math.ceil,ln=Math.max;var cn,hn=function(e,n,t){return t&&"number"!=typeof t&&re(e,n,t)&&(n=t=void 0),e=C(e),void 0===n?(n=e,e=0):n=C(n),function(e,n,t,r){for(var a=-1,o=ln(un((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=on(t,r,!1);return parseFloat(on(e,n,!0).toFixed(a))},jn=function(e,n,t){ -//! cur:boolean 是划分概率的一个启动符号 -return t?on(0,e+n)>e?!t:t:on(10,-10)>0},On={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};On.alpha=On.lower+On.upper,On.default=On.lower+On.upper+On.number+On.symbol;const Rn=function(e="default"){return On.hasOwnProperty(e.toLocaleLowerCase())&&(e=On[e.toLowerCase()]),e.charAt(En(0,e.length-1))},Sn=function(...e){var n,t,r,a;switch(e.length){case 0:n=En(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=En(r,a));break;case 3:[t,r,a]=e,n=En(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function _n(e,n){return e(n={exports:{}},n.exports),n.exports}var Fn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Tn=_n((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),qn=_n((function(e){var n={};for(var t in Fn)Fn.hasOwnProperty(t)&&(n[Fn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Fn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Tn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Tn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Tn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Tn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Tn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));qn.to,qn.get;var Dn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=_n((function(e){var n={};for(var t in Dn)Dn.hasOwnProperty(t)&&(n[Dn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Dn)if(Dn.hasOwnProperty(l)){var i=Dn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Ln(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Nn,$n=[].slice,Un=["keyword","gray","hex"],Bn={};Object.keys(In).forEach((function(e){Bn[$n.call(In[e].labels).sort().join("")]=e}));var Gn={};function Wn(e,n){if(!(this instanceof Wn))return new Wn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Wn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=qn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=$n.call(e,0,r);this.color=Jn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Bn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Bn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Wn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Wn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Wn.prototype[e]=function(){if(this.model===e)return new Wn(this);if(arguments.length)return new Wn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Wn(Yn(In[this.model][e].raw(this.color)).concat(t),e)},Wn[e]=function(t){return"number"==typeof t&&(t=Jn($n.call(arguments),n)),new Wn(t,e)}}}));var Vn=Wn,Zn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const Qn=function(e,n,t){return void 0===n&&void 0===t?e[En(0,e.length-1)]:void 0!==n&&void 0!==t?et(e,n,t):et(e,0,n)},et=function(e,n,t){let r=dn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},nt={},tt=function(...e){1===e.length&&(e=e[0]);var n=tt.options.context.templatePath.join("."),t=nt[n]=nt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let at;function ot(e,n){return at=at||Math.random(),at+=.618033988749895,at%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Vn.hsv(360*at,100*e,100*n)}function ut(){return ot().hex()}var lt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:it,lastName:ct,cfirstName:ht,clastName:st}=lt;function ft(){var e=it.male.concat();return Qn(e)}function mt(){return Qn(ct)}function dt(){return Qn(ht)}function pt(){return Qn(st)}var xt,bt=new Uint8Array(16);function gt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(bt)}var vt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function yt(e){return"string"==typeof e&&vt.test(e)}for(var wt=[],kt=0;kt<256;++kt)wt.push((kt+256).toString(16).substr(1));function At(e,n,t){var r=(e=e||{}).random||(e.rng||gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(wt[e[n+0]]+wt[e[n+1]]+wt[e[n+2]]+wt[e[n+3]]+"-"+wt[e[n+4]]+wt[e[n+5]]+"-"+wt[e[n+6]]+wt[e[n+7]]+"-"+wt[e[n+8]]+wt[e[n+9]]+"-"+wt[e[n+10]]+wt[e[n+11]]+wt[e[n+12]]+wt[e[n+13]]+wt[e[n+14]]+wt[e[n+15]]).toLowerCase();if(!yt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Et=Object.keys(Mt),Ct=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Et.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var jt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ot=new RegExp(`(${Object.keys(jt).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return St(_t(),e)}function St(e,n){return n.replace(Ot,(function n(t,r){let a=jt[r];return"function"==typeof a?a(e):a in jt?n(t,a):e[a]()}))}function _t(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let Ft=0;const Tt=function(e){return Ft+=+e||1},qt=Tt;function Dt(e,n,t,r){return void 0===t?En(e,n):void 0===r?t:En(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=Dt(12,18,e,n);return Ye([...Array(t)].map((()=>Lt())).join(""))+"."}function Lt(e,n){var t=Dt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Ht(e,n){var t=Dt(12,18,e,n);return[...Array(t)].map((()=>zt())).join("")+"。"}function zt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=En(n,t));break;case 3:[a,n,t]=e,r=En(n,t)}const o=a.length;return 1===r?a.charAt(En(0,o)):[...Array(r)].map((()=>a.charAt(En(0,o)))).join("")}const Nt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function $t(){return Qn(Nt)}function Ut(e){return`${Lt()}.${e||Bt()}`}function Bt(){return Qn(It)}var Gt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Wt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Xt,_screenSize:Kt,_videoSize:Yt}=Gt;const Jt=Object.keys(Wt);function Vt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=Qn(Xt)),r=(r||ut()).replace(/^#/,""),t=(t||ut()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Zt=["东北","华北","华东","华中","华南","西南","西北"];function Qt(e){let n;switch(pn(e)){case"array":n=e;default:n=[e]}return n}var er=Object.freeze({__proto__:null,integer:Mn,isNumber:kn,random:on,natural:En,int:Mn,float:Cn,boolean:jn,bool:jn,character:Rn,char:Rn,string:Sn,str:Sn,range:hn,color:function(e){return e||Zn[e]?Zn[e].nicer:Qn(rt).hex},hex:ut,rgb:function(){return ot().hsv().string()},rgba:function(){return ot().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ot().hsl().string()},_goldenRatioColor:ot,first:ft,last:mt,name:function(e){return e=e?` ${ft()} `:" ",`${ft()}${e}${mt()}`},cfirst:dt,clast:pt,cname:function(){return dt()+pt()},capitalize:Ye,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:Qn,shuffle:et,order:tt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return At().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:At,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=Qn(Ct).id+Rt("yyyyMMdd")+Sn("number",3);for(var r=0;rPt()))},word:Lt,sentence:Pt,title:function(e,n){var t=Dt(3,7,e,n);return[...Array(t)].map((()=>Ye(Lt()))).join("")},ctitle:function(e,n){var t=Dt(3,7,e,n);return[...Array(t)].map((()=>zt())).join("")},csentence:Ht,cparagraph:function(e,n){var t=Dt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},cword:zt,protocol:$t,domain:Ut,tld:Bt,email:function(e){return`${Rn("lower")}.${Lt()}@${e||Lt()+"."+Bt()}`},ip:function(){return[...Array(4)].map((()=>En(0,255))).join(".")},url:function(e,n){return`${e||$t()}://${n||Ut()}/${Lt()}`},_patternLetters:jt,_rformat:Ot,_formatDate:St,_randomDate:_t,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return St(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?_t(e,n).getTime():_t().getTime()},_adSize:Xt,_screenSize:Kt,_videoSize:Yt,image:Vt,img:Vt,_brandColors:Wt,_brandNames:Jt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=Qn(Xt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Wt[Qn(Jt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return Qn(Zt)},province:function(){return Qn(Ct).name},city:function(e){var n=Qn(Ct),t=Qn(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=Qn(Ct),t=Qn(n.children),r=Qn(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=En(0,9);return n},genFile:function(e){return new File(Qt(e),Lt())},genBlob:function(){return new Blob(Qt(anyData))}}),nr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function tr(e=""){"string"!=typeof e&&(e+="");var n=e.match(nr.RE_KEY),t=n&&n[3]&&n[3].match(nr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(nr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function rr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=Qn(Br(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Br(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Br(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Br(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function ar({rule:{max:e,min:n,parameters:t},template:r=""}){return t?jn(n,e,r):r}function or(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function ur({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Cn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function lr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=et(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(nr.RE_KEY,"$1");l[t]=Br(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(nr.RE_KEY,"$1");l[t]=Br(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(nr.RE_KEY);i&&i[2]&&"number"===pn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function ir(e){this.type=e,this.offset=ir.offset(),this.text=ir.text()}function cr(e,n){ir.call(this,"alternate"),this.left=e,this.right=n}function hr(e){ir.call(this,"match"),this.body=e.filter(Boolean)}function sr(e,n){ir.call(this,e),this.body=n}function fr(e){sr.call(this,"capture-group"),this.index=Er[this.offset]||(Er[this.offset]=Mr++),this.body=e}function mr(e,n){ir.call(this,"quantified"),this.body=e,this.quantifier=n}function dr(e,n){ir.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function pr(e,n){ir.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){ir.call(this,"range"),this.start=e,this.end=n}function br(e){ir.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function gr(e){ir.call(this,"unicode"),this.code=e.toUpperCase()}function vr(e){ir.call(this,"hex"),this.code=e.toUpperCase()}function yr(e){ir.call(this,"octal"),this.code=e.toUpperCase()}function wr(e){ir.call(this,"back-reference"),this.code=e.toUpperCase()}function kr(e){ir.call(this,"control-character"),this.code=e.toUpperCase()}var Ar=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(Ht,Lt)}function r(){return Ht}function a(e){return zt!==e&&(zt>e&&(zt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,zt,e),zt=e),Nt}function o(e){It>Lt||(Lt>It&&(It=Lt,$t=[]),$t.push(e))}function u(e){var n=0;for(e.sort();nLt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=bt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Z(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(yt.test(n.charAt(Lt))?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(wt)),null!==r?(Ht=e,null===(t=kt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t){if(r=[],Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct)),null!==a)for(;null!==a;)r.push(a),Et.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(Ct));else r=ie;null!==r?(Ht=e,null===(t=jt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Ot?(t=Ot,Lt+=2):(t=null,0===Ut&&o(Rt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Ft(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Lt,n.substr(Lt,2)===Tt?(t=Tt,Lt+=2):(t=null,0===Ut&&o(qt)),null!==t){if(r=[],St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t)),null!==a)for(;null!==a;)r.push(a),St.test(n.charAt(Lt))?(a=n.charAt(Lt),Lt++):(a=null,0===Ut&&o(_t));else r=ie;null!==r?(Ht=e,null===(t=Dt(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)}else Lt=e,e=ie;return e}function te(){var e,t;return e=Lt,n.substr(Lt,2)===At?(t=At,Lt+=2):(t=null,0===Ut&&o(Mt)),null!==t&&(Ht=e,t=Pt()),null===t?(Lt=e,e=t):e=t,e}function re(){var e,t,r;return e=Lt,92===n.charCodeAt(Lt)?(t=gt,Lt++):(t=null,0===Ut&&o(vt)),null!==t?(n.length>Lt?(r=n.charAt(Lt),Lt++):(r=null,0===Ut&&o(xt)),null!==r?(Ht=e,null===(t=wn(r))?(Lt=e,e=t):e=t):(Lt=e,e=ie)):(Lt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new cr(e,n[1]):e},me=function(e,n,t){return new hr([e].concat(n).concat([t]))},de="^",pe='"^"',xe=function(){return new ir("start")},be="$",ge='"$"',ve=function(){return new ir("end")},ye=function(e,n){return new mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ee=",",Ce='","',je="}",Oe='"}"',Re=function(e,n){return new dr(e,n)},Se=",}",_e='",}"',Fe=function(e){return new dr(e,1/0)},Te=function(e){return new dr(e,e)},qe="+",De='"+"',Pe=function(){return new dr(1,1/0)},Le="*",He='"*"',ze=function(){return new dr(0,1/0)},Ne="?",Ie='"?"',$e=function(){return new dr(0,1)},Ue=/^[0-9]/,Be="[0-9]",Ge=function(e){return+e.join("")},We="(",Xe='"("',Ke=")",Ye='")"',Je=function(e){return e},Ve=function(e){return new fr(e)},Ze="?:",Qe='"?:"',en=function(e){return new sr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new sr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new sr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new pr(!!e,n)},dn="CharacterRange",pn="-",xn='"-"',bn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new br(e)},kn=".",An='"."',Mn=function(){return new ir("any-character")},En="Literal",Cn=/^[^|\\\/.[()?+*$\^]/,jn="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Rn='"\\\\b"',Sn=function(){return new ir("backspace")},_n=function(){return new ir("word-boundary")},Fn="\\B",Tn='"\\\\B"',qn=function(){return new ir("non-word-boundary")},Dn="\\d",Pn='"\\\\d"',Ln=function(){return new ir("digit")},Hn="\\D",zn='"\\\\D"',Nn=function(){return new ir("non-digit")},In="\\f",$n='"\\\\f"',Un=function(){return new ir("form-feed")},Bn="\\n",Gn='"\\\\n"',Wn=function(){return new ir("line-feed")},Xn="\\r",Kn='"\\\\r"',Yn=function(){return new ir("carriage-return")},Jn="\\s",Vn='"\\\\s"',Zn=function(){return new ir("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new ir("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new ir("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new ir("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new ir("word")},st="\\W",ft='"\\\\W"',mt=function(){return new ir("non-word")},dt="\\c",pt='"\\\\c"',xt="any character",bt=function(e){return new kr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new wr(e)},At="\\0",Mt='"\\\\0"',Et=/^[0-7]/,Ct="[0-7]",jt=function(e){return new yr(e.join(""))},Ot="\\x",Rt='"\\\\x"',St=/^[0-9a-fA-F]/,_t="[0-9a-fA-F]",Ft=function(e){return new vr(e.join(""))},Tt="\\u",qt='"\\\\u"',Dt=function(e){return new gr(e.join(""))},Pt=function(){return new ir("null-character")},Lt=0,Ht=0,zt=0,Nt={line:1,column:1,seenCR:!1},It=0,$t=[],Ut=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(ir.offset=r,ir.text=t,null!==(ae=le())&&Lt===n.length)return ae;throw u($t),Ht=Math.max(Lt,It),new e($t,HtString.fromCharCode(n+e))).join("")}Cr.gen=function(e,n,t){return t=t||{guid:1},Cr[e.type]?Cr[e.type](e,n,t):Cr.token(e,n,t)},Cr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return Qn(Rr.split(""));case"non-digit":return Qn((jr+Or+Sr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return Qn(Fr.split(""));case"non-white-space":return Qn((jr+Or+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return Qn((jr+Or+Rr).split(""));case"non-word":return Qn(Sr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(jn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Hr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Lr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Br(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in er)&&!(u in er))return e;o=o.map((e=>(nr.RE_PLACEHOLDER.exec(""),nr.RE_PLACEHOLDER.test(e)?Nr(e,n,t,r):e)));var i=er[a]||er[u];switch(pn(i)){case"array":return Qn(i);case"function":i.options=r;var c=i.apply(er,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(nr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Nr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Sn(t):o;return u}var $r=Object.freeze({__proto__:null,array:rr,boolean:ar,function:or,number:ur,object:lr,regexp:Pr,string:Ir});let Ur=1;function Br(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=pn(e);let o=$r[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(nr.RE_KEY,"$1"):n,rule:tr(n),context:r}),r.root||(r.root=u),u):e}var Gr={gen:Br,extend:bn};function Wr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(nr.RE_KEY,"$1"):n,template:e,type:pn(e),rule:tr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Wr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Wr(e,n,r.path)))}return r}function Xr(e,n){for(var t=Wr(e),r=Kr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Nr,getValueByKeyPath:Lr,normalizePath:Hr,splitPathToArray:zr});var Kr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Yr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(nr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Yr.equal("type",e.path,pn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Yr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(nr.RE_PLACEHOLDER))return r.length===o}return Yr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Yr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Yr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Yr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Yr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Yr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Yr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Yr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Yr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Yr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Yr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Yr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Yr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=yn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Yr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Yr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Yr.equal("properties length",e.path,u.length,o.min,r)):Yr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Yr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Yr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Yr.message(u),a.push(u),!1}};Xr.Diff=Kr,Xr.Assert=Yr,window._XMLHttpRequest=window.XMLHttpRequest,window._ActiveXObject=window.ActiveXObject;try{new window.Event("custom")}catch(e){window.Event=function(e,n,t,r){var a=document.createEvent("CustomEvent");return a.initCustomEvent(e,n,t,r),a}}var Jr,Vr={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},Zr="readystatechange loadstart progress abort error load timeout loadend".split(" "),Qr="timeout withCredentials".split(" "),ea="readyState responseURL status statusText responseType response responseText responseXML".split(" "),na="OK";function ta(){this.custom={events:{},requestHeaders:{},responseHeaders:{}}}ta._settings={timeout:"10-100"},ta.setup=function(e){return _e(ta._settings,e),ta._settings},_e(ta,Vr),_e(ta.prototype,Vr),ta.prototype.mock=!0,ta.prototype.match=!1,_e(ta.prototype,{open:function(e,n,t=!0,r,a){var o=this;_e(this.custom,{method:e,url:n,async:"boolean"!=typeof t||t,username:r,password:a,options:{url:n,type:e}}),this.custom.timeout=function(e){if("number"==typeof e)return e;if("string"==typeof e&&!~e.indexOf("-"))return parseInt(e,10);if("string"==typeof e&&~e.indexOf("-")){var n=e.split("-"),t=parseInt(n[0],10),r=parseInt(n[1],10);return Math.round(Math.random()*(r-t))+t}}(ta._settings.timeout);var u=function(e){for(var n in ta.Mock._mocked){var t=ta.Mock._mocked[n];if((!t.rurl||r(t.rurl,e.url))&&(!t.rtype||r(t.rtype,e.type.toLowerCase())))return t}function r(e,n){return"string"===pn(e)?e===n:"regexp"===pn(e)?e.test(n):void 0}}(this.custom.options);function l(e){for(var n=0;n= 200 && this[RESPONSE].status < 300; + } + + get redirected() { + return this[RESPONSE].counter > 0; + } + + get statusText() { + return this[RESPONSE].statusText; + } + + get headers() { + return this[RESPONSE].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + // Don't allow cloning a used body + if (bodyUsed) { + throw new Error("cannot clone body after it is used"); + } + return new Response(this.body, { + type: this.type, + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected, + size: this.size, + }); + } + + /** + * @param {string} url The URL that the new response is to originate from. + * @param {number} status An optional status code for the response (e.g., 302.) + * @returns {Response} A Response object. + */ + static redirect(url, status = 302) { + if (!isRedirect(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + + return new Response(null, { + headers: { + location: new URL(url).toString(), + }, + status, + }); + } + + static error() { + const response = new Response(null, { status: 0, statusText: "" }); + response[RESPONSE].type = "error"; + return response; + } + + get [Symbol.toStringTag]() { + return "Response"; + } +} + +Object.defineProperties(Response.prototype, { + type: { enumerable: true }, + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true }, +}); + +var realFetch = window.fetch; +function mockFetch() { + // 代理 fetch 的初始化函数 + if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { + window.fetch = fakeFetch; + window.fetch.$mock = true; + console.warn("fetch 已经被代理"); + } +} + +async function fakeFetch(url, options = {}) { + if (window.fetch.$mock === true) { + // 只有在 $mock 标记为 true 时才进行代理 + let result = find({ + url, + type: (options.method || "get").toLowerCase(), + }); + if (result) { + const data = convert(result, {}); + console.warn("mock代理中"); + return new fakeResponse(data, options); + } + } + + console.warn("未使用 mockjs"); + return realFetch(url, options); +} + +/* global window, document, location, Event, setTimeout */ +// 备份原生 XMLHttpRequest +window._XMLHttpRequest = window.XMLHttpRequest; +window._ActiveXObject = window.ActiveXObject; + +/* + PhantomJS + TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') + + https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 + https://github.com/ariya/phantomjs/issues/11289 +*/ +try { + new window.Event("custom"); +} catch (exception) { + window.Event = function (type, bubbles, cancelable, detail) { + var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' + event.initCustomEvent(type, bubbles, cancelable, detail); + return event; + }; +} + +var XHR_STATES = { + // The object has been constructed. + UNSENT: 0, + // The open() method has been successfully invoked. + OPENED: 1, + // All redirects (if any) have been followed and all HTTP headers of the response have been received. + HEADERS_RECEIVED: 2, + // The response's body is being received. + LOADING: 3, + // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). + DONE: 4, +}; + +var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); +var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); +var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); + +// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 +var HTTP_STATUS_CODES = { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", +}; + +/* + MockXMLHttpRequest +*/ + +function MockXMLHttpRequest() { + // 初始化 custom 对象,用于存储自定义属性 + this.custom = { + events: {}, + requestHeaders: {}, + responseHeaders: {}, + }; +} + +MockXMLHttpRequest._settings = { + timeout: "10-100", + /* + timeout: 50, + timeout: '10-100', + */ +}; + +MockXMLHttpRequest.setup = function (settings) { + assignIn(MockXMLHttpRequest._settings, settings); + return MockXMLHttpRequest._settings; +}; + +assignIn(MockXMLHttpRequest, XHR_STATES); +assignIn(MockXMLHttpRequest.prototype, XHR_STATES); + +// 标记当前对象为 MockXMLHttpRequest +MockXMLHttpRequest.prototype.mock = true; + +// 是否拦截 Ajax 请求 +MockXMLHttpRequest.prototype.match = false; + +// 初始化 Request 相关的属性和方法 +assignIn(MockXMLHttpRequest.prototype, { + // https://xhr.spec.whatwg.org/#the-open()-method + // Sets the request method, request URL, and synchronous flag. + open: function (method, url, async = true, username, password) { + var that = this; + + assignIn(this.custom, { + method: method, + url: url, + async: typeof async === "boolean" ? async : true, + username: username, + password: password, + options: { + url: url, + type: method, + }, + }); + + this.custom.timeout = (function (timeout) { + if (typeof timeout === "number") return timeout; + if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); + if (typeof timeout === "string" && ~timeout.indexOf("-")) { + var tmp = timeout.split("-"); + var min = parseInt(tmp[0], 10); + var max = parseInt(tmp[1], 10); + return Math.round(Math.random() * (max - min)) + min; + } + })(MockXMLHttpRequest._settings.timeout); + + // 查找与请求参数匹配的数据模板 + var item = find(this.custom.options); + + function handle(event) { + // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest + for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { + try { + that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; + } catch (e) {} + } + // 触发 MockXMLHttpRequest 上的同名事件 + that.dispatchEvent(new Event(event.type /*, false, false, that*/)); + } + + // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 + if (!item) { + // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 + var xhr = createNativeXMLHttpRequest(); + this.custom.xhr = xhr; + + // 初始化所有事件,用于监听原生 XHR 对象的事件 + for (var i = 0; i < XHR_EVENTS.length; i++) { + xhr.addEventListener(XHR_EVENTS[i], handle); + } + + // xhr.open() + if (username) xhr.open(method, url, async, username, password); + else xhr.open(method, url, async); + + // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest + for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { + try { + xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; + } catch (e) {} + } + + return; + } + + // 找到了匹配的数据模板,开始拦截 XHR 请求 + this.match = true; + this.custom.template = item; + this.readyState = MockXMLHttpRequest.OPENED; + this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); + }, + // https://xhr.spec.whatwg.org/#the-setrequestheader()-method + // Combines a header in author request headers. + setRequestHeader: function (name, value) { + // 原生 XHR + if (!this.match) { + this.custom.xhr.setRequestHeader(name, value); + return; + } + + // 拦截 XHR + var requestHeaders = this.custom.requestHeaders; + if (requestHeaders[name]) requestHeaders[name] += "," + value; + else requestHeaders[name] = value; + }, + timeout: 0, + withCredentials: false, + upload: {}, + // https://xhr.spec.whatwg.org/#the-send()-method + // Initiates the request. + send: function send(data) { + var that = this; + this.custom.options.body = data; + + // 原生 XHR + if (!this.match) { + this.custom.xhr.send(data); + return; + } + + // 拦截 XHR + + // X-Requested-With header + this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); + + // loadstart The fetch initiates. + this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); + + if (this.custom.async) setTimeout(done, this.custom.timeout); + // 异步 + else done(); // 同步 + + function done() { + that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.readyState = MockXMLHttpRequest.LOADING; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + + that.status = 200; + that.statusText = HTTP_STATUS_CODES[200]; + + // fix #92 #93 by @qddegtya + that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); + + that.readyState = MockXMLHttpRequest.DONE; + that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); + that.dispatchEvent(new Event("load" /*, false, false, that*/)); + that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); + } + }, + // https://xhr.spec.whatwg.org/#the-abort()-method + // Cancels any network activity. + abort: function abort() { + // 原生 XHR + if (!this.match) { + this.custom.xhr.abort(); + return; + } + + // 拦截 XHR + this.readyState = MockXMLHttpRequest.UNSENT; + this.dispatchEvent(new Event("abort", false, false, this)); + this.dispatchEvent(new Event("error", false, false, this)); + }, +}); + +// 初始化 Response 相关的属性和方法 +assignIn(MockXMLHttpRequest.prototype, { + responseURL: "", + status: MockXMLHttpRequest.UNSENT, + statusText: "", + // https://xhr.spec.whatwg.org/#the-getresponseheader()-method + getResponseHeader: function (name) { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getResponseHeader(name); + } + + // 拦截 XHR + return this.custom.responseHeaders[name.toLowerCase()]; + }, + // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method + // http://www.utf8-chartable.de/ + getAllResponseHeaders: function () { + // 原生 XHR + if (!this.match) { + return this.custom.xhr.getAllResponseHeaders(); + } + + // 拦截 XHR + var responseHeaders = this.custom.responseHeaders; + var headers = ""; + for (var h in responseHeaders) { + if (!responseHeaders.hasOwnProperty(h)) continue; + headers += h + ": " + responseHeaders[h] + "\r\n"; + } + return headers; + }, + overrideMimeType: function (/*mime*/) {}, + responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' + response: null, + responseText: "", + responseXML: null, +}); + +// EventTarget +assignIn(MockXMLHttpRequest.prototype, { + addEventListener: function addEventListener(type, handle) { + var events = this.custom.events; + if (!events[type]) events[type] = []; + events[type].push(handle); + }, + removeEventListener: function removeEventListener(type, handle) { + var handles = this.custom.events[type] || []; + for (var i = 0; i < handles.length; i++) { + if (handles[i] === handle) { + handles.splice(i--, 1); + } + } + }, + dispatchEvent: function dispatchEvent(event) { + var handles = this.custom.events[event.type] || []; + for (var i = 0; i < handles.length; i++) { + handles[i].call(this, event); + } + + var ontype = "on" + event.type; + if (this[ontype]) this[ontype](event); + }, +}); + +// Inspired by jQuery +function createNativeXMLHttpRequest() { + var isLocal = (function () { + var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; + var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; + var ajaxLocation = location.href; + var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; + return rlocalProtocol.test(ajaxLocParts[1]); + })(); + + return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); + + function createStandardXHR() { + try { + return new window._XMLHttpRequest(); + } catch (e) {} + } + + function createActiveXHR() { + try { + return new window._ActiveXObject("Microsoft.XMLHTTP"); + } catch (e) {} + } +} + +// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 +typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 + +/* global require, module, window */ + +var XHR; +if (typeof window !== "undefined") XHR = MockXMLHttpRequest; + /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -59,4 +15117,66 @@ return t?on(0,e+n)>e?!t:t:on(10,-10)>0},On={lower:"abcdefghijklmnopqrstuvwxyz",u 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/;var ra={Handler:Gr,Random:er,Util:wn,XHR:Jr,RE:Dr,toJSONSchema:Wr,valid:Xr,heredoc:vn,setup:function(e){return Jr.setup(e)},_mocked:{},version:"1.1.1-es6"};Jr&&(Jr.Mock=ra),ra.mock=function(...e){let n,t;switch(e.length){case 1:return[t]=e,Gr.gen(t);case 2:[n,t]=e;case 3:default:return Jr&&(window.XMLHttpRequest=Jr),ra._mocked[n+""]={rurl:n,rtype:"",template:t},ra}};export default ra; +*/ +var Mock = { + Handler: Handler$1, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked, +}; + +Mock.version = "1.1.1-es6"; + +// 避免循环依赖 +if (XHR) XHR.Mock = Mock; + +/* + * Mock.mock( template ) + * Mock.mock( function() ) + * Mock.mock( rurl, template ) + * Mock.mock( rurl, function(options) ) + * Mock.mock( rurl, rtype, template ) + * Mock.mock( rurl, rtype, function(options) ) + + 根据数据模板生成模拟数据。 +*/ +Mock.mock = function (...args) { + let rurl, + rtype = "get", + template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler$1.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + break; + case 3: + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; + } + + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + _mocked.$set({ + rurl, + rtype, + template, + }); + return Mock; +}; + +export default Mock; diff --git a/src/mock.js b/src/mock.js index 230683cb..8e634164 100644 --- a/src/mock.js +++ b/src/mock.js @@ -5,7 +5,7 @@ import * as Random from "./mock/random/index.js"; import * as RE from "./mock/regexp/index.js"; import { toJSONSchema } from "./mock/schema/index.js"; import { valid } from "./mock/valid/index.js"; - +import { _mocked } from "./mock/_mocked.js"; import { MockXMLHttpRequest } from "./mock/xhr/index.js"; var XHR; @@ -32,7 +32,7 @@ var Mock = { setup: function (settings) { return XHR.setup(settings); }, - _mocked: {}, + _mocked, }; Mock.version = "1.1.1-es6"; @@ -52,7 +52,7 @@ if (XHR) XHR.Mock = Mock; */ Mock.mock = function (...args) { let rurl, - rtype = "", + rtype = "get", template; switch (args.length) { @@ -64,17 +64,21 @@ Mock.mock = function (...args) { case 2: // Mock.mock(rurl, template) [rurl, template] = args; + break; case 3: - default: - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - Mock._mocked[rurl + rtype] = { - rurl, - rtype, - template, - }; - return Mock; + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; } + + // 拦截 XHR + if (XHR) window.XMLHttpRequest = XHR; + _mocked.$set({ + rurl, + rtype, + template, + }); + return Mock; }; export default Mock; diff --git a/src/mock/_mocked.js b/src/mock/_mocked.js new file mode 100644 index 00000000..d4cb6c71 --- /dev/null +++ b/src/mock/_mocked.js @@ -0,0 +1,11 @@ +// 集中管理 mocked 的 url + +const _mocked = { + $set(value) { + this[value.rurl + value.rtype.toLowerCase()] = value; + }, + $delete(key) { + delete this[key]; + }, +}; +export { _mocked }; diff --git a/src/mock/xhr/ajax-tools.js b/src/mock/xhr/ajax-tools.js new file mode 100644 index 00000000..6b0cde31 --- /dev/null +++ b/src/mock/xhr/ajax-tools.js @@ -0,0 +1,34 @@ +import { type as Type, isFunction } from "../util.js"; +import { gen } from "../handle/gen.js"; // 从模板生成数据 +import { _mocked } from "../_mocked.js"; + +// 查找与请求参数匹配的数据模板:URL,Type +function find({ url, type }) { + type = type.toLowerCase(); + for (var sUrlType in _mocked) { + var item = _mocked[sUrlType]; + let { rurl, rtype } = item; + if (match(rurl, url) && match(rtype, type)) { + // console.log('[mock]', url, '>', item.rurl) + return item; + } + } + return false; +} + +function match(expected, actual) { + switch (Type(expected)) { + case "string": + return expected === actual; + case "regexp": + return expected.test(actual); + default: + return false; + } +} + +// 数据模板 => 响应数据 +function convert({ template }, options) { + return isFunction(template) ? template(options) : gen(template); +} +export { find, convert, match }; diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js new file mode 100644 index 00000000..0a9f2217 --- /dev/null +++ b/src/mock/xhr/fetch/fetch.js @@ -0,0 +1,35 @@ +var realFetch = window.fetch; +function mockFetch() { + // 代理 fetch 的初始化函数 + if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { + window.fetch = fakeFetch; + window.fetch.$mock = true; + console.warn("fetch 已经被代理"); + } +} + +// 假的 fetch 函数 +import { _mocked } from "../../_mocked.js"; +import { find, convert } from "../ajax-tools.js"; + +// 假的 Response 对象 +import fakeResponse from "./src/response.js"; + +async function fakeFetch(url, options = {}) { + if (window.fetch.$mock === true) { + // 只有在 $mock 标记为 true 时才进行代理 + let result = find({ + url, + type: (options.method || "get").toLowerCase(), + }); + if (result) { + const data = convert(result, {}); + console.warn("mock代理中"); + return new fakeResponse(data, options); + } + } + + console.warn("未使用 mockjs"); + return realFetch(url, options); +} +export { fakeFetch, mockFetch }; diff --git a/src/mock/xhr/fetch/src/INTERNALS.js b/src/mock/xhr/fetch/src/INTERNALS.js new file mode 100644 index 00000000..339aeef7 --- /dev/null +++ b/src/mock/xhr/fetch/src/INTERNALS.js @@ -0,0 +1,2 @@ +export const BODY = Symbol("Body internals"); +export const RESPONSE = Symbol("Response internals"); diff --git a/src/mock/xhr/fetch/src/body.js b/src/mock/xhr/fetch/src/body.js new file mode 100644 index 00000000..5841500d --- /dev/null +++ b/src/mock/xhr/fetch/src/body.js @@ -0,0 +1,106 @@ +/** + * Body.js + * + * Body interface provides common methods for Request and Response + */ + +import { isURLSearchParameters } from "./utils/is.js"; +import { BODY as INTERNALS } from "./INTERNALS.js"; + +import { consumeBody } from "./body/consumeBody.js"; +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +export default class Body { + constructor(body, { size = 0 } = {}) { + if (body === null) { + // Body is undefined or null + body = new Blob([]); + } else if (isURLSearchParameters(body)) { + // Body is a URLSearchParams + body = new Blob([body]); + } else if (ArrayBuffer.isView(body)) { + // Body is ArrayBufferView + body = new Blob([body]); + } else { + body = new Blob([JSON.stringify(body)]); + } + + this[INTERNALS] = { + body, + boundary: null, + disturbed: false, + error: null, + }; + this.size = size; + } + + get body() { + return this[INTERNALS].body; + } + + get bodyUsed() { + return this[INTERNALS].disturbed; + } + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + async arrayBuffer() { + const blob = await consumeBody(this[INTERNALS]); + return blob.arrayBuffer(); + } + + /** + * Return raw response as Blob + * + * @return Promise + */ + async blob() { + return consumeBody(this[INTERNALS]); + } + + /** + * Decode response as json + * + * @return Promise + */ + async json() { + const text = await this.text(); + return JSON.parse(text || "{}"); + } + + /** + * Decode response as text + * + * @return Promise + */ + async text() { + const blob = await consumeBody(this[INTERNALS]); + return blob.text(); + } + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ +} + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true }, +}); diff --git a/src/mock/xhr/fetch/src/body/consumeBody.js b/src/mock/xhr/fetch/src/body/consumeBody.js new file mode 100644 index 00000000..4b930659 --- /dev/null +++ b/src/mock/xhr/fetch/src/body/consumeBody.js @@ -0,0 +1,24 @@ +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +export async function consumeBody(data) { + // 标记为已经使用 + if (data.disturbed) { + throw new TypeError(`body used already for: ${data.url}`); + } + data.disturbed = true; + + // 报错 + if (data.error) { + throw data.error; + } + + if (data.body instanceof FormData) { + return new Blob([Object.fromEntries(a.entries())]); + } + return data.body; +} diff --git a/src/mock/xhr/fetch/src/body/exactContentType.js b/src/mock/xhr/fetch/src/body/exactContentType.js new file mode 100644 index 00000000..2d38a113 --- /dev/null +++ b/src/mock/xhr/fetch/src/body/exactContentType.js @@ -0,0 +1,39 @@ +import { isURLSearchParameters } from "../utils/is.js"; +/** + * Performs the operation "extract a `Content-Type` value from |object|" as + * specified in the specification: + * https://fetch.spec.whatwg.org/#concept-bodyinit-extract + * + * This function assumes that instance.body is present. + * + * @param {any} body Any options.body input + * @returns {string | null} + */ +export const extractContentType = (body, request) => { + // Body is null or undefined + if (body === null) { + return null; + } + + // Body is string + if (typeof body === "string") { + return "text/plain;charset=UTF-8"; + } + + // Body is a URLSearchParams + if (isURLSearchParameters(body)) { + return "application/x-www-form-urlencoded;charset=UTF-8"; + } + + // Body is blob + if (body instanceof Blob) { + return body.type || null; + } + + if (body instanceof FormData) { + return `multipart/form-data; boundary=${request[INTERNALS].boundary}`; + } + + // Body constructor defaults other things to string + return "text/plain;charset=UTF-8"; +}; diff --git a/src/mock/xhr/fetch/src/response.js b/src/mock/xhr/fetch/src/response.js new file mode 100644 index 00000000..a14fd946 --- /dev/null +++ b/src/mock/xhr/fetch/src/response.js @@ -0,0 +1,130 @@ +/** + * Response.js + * + * Response class provides content decoding + */ + +import Body from "./body.js"; +import { extractContentType } from "./body/exactContentType.js"; +import { isRedirect } from "./utils/is-redirect.js"; +import { RESPONSE as INTERNALS } from "./INTERNALS.js"; +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +export default class fakeResponse extends Body { + constructor(body = null, options = {}) { + super(body, options); + const status = options.status != null ? options.status : 200; + const headers = new Headers(options.headers); + if (body !== null && !headers.has("Content-Type")) { + const contentType = extractContentType(body); + if (contentType) { + headers.append("Content-Type", contentType); + } + } + this[INTERNALS] = { + type: "default", + url: options.url, + status, + statusText: options.statusText || "", + headers, + counter: options.counter, + }; + } + + get type() { + return this[INTERNALS].type; + } + + get url() { + return this[INTERNALS].url || ""; + } + + get status() { + return this[INTERNALS].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[INTERNALS].status >= 200 && this[INTERNALS].status < 300; + } + + get redirected() { + return this[INTERNALS].counter > 0; + } + + get statusText() { + return this[INTERNALS].statusText; + } + + get headers() { + return this[INTERNALS].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + // Don't allow cloning a used body + if (bodyUsed) { + throw new Error("cannot clone body after it is used"); + } + return new Response(this.body, { + type: this.type, + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected, + size: this.size, + }); + } + + /** + * @param {string} url The URL that the new response is to originate from. + * @param {number} status An optional status code for the response (e.g., 302.) + * @returns {Response} A Response object. + */ + static redirect(url, status = 302) { + if (!isRedirect(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + + return new Response(null, { + headers: { + location: new URL(url).toString(), + }, + status, + }); + } + + static error() { + const response = new Response(null, { status: 0, statusText: "" }); + response[INTERNALS].type = "error"; + return response; + } + + get [Symbol.toStringTag]() { + return "Response"; + } +} + +Object.defineProperties(Response.prototype, { + type: { enumerable: true }, + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true }, +}); diff --git a/src/mock/xhr/fetch/src/utils/is-redirect.js b/src/mock/xhr/fetch/src/utils/is-redirect.js new file mode 100644 index 00000000..d1347f00 --- /dev/null +++ b/src/mock/xhr/fetch/src/utils/is-redirect.js @@ -0,0 +1,11 @@ +const redirectStatus = new Set([301, 302, 303, 307, 308]); + +/** + * Redirect code matching + * + * @param {number} code - Status code + * @return {boolean} + */ +export const isRedirect = code => { + return redirectStatus.has(code); +}; diff --git a/src/mock/xhr/fetch/src/utils/is.js b/src/mock/xhr/fetch/src/utils/is.js new file mode 100644 index 00000000..7a035885 --- /dev/null +++ b/src/mock/xhr/fetch/src/utils/is.js @@ -0,0 +1,20 @@ +/** + * Check if `obj` is a URLSearchParams object + * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 + * + * @param {*} obj + * @return {boolean} + */ +export const isURLSearchParameters = (object) => { + return ( + typeof object === "object" && + typeof object.append === "function" && + typeof object.delete === "function" && + typeof object.get === "function" && + typeof object.getAll === "function" && + typeof object.has === "function" && + typeof object.set === "function" && + typeof object.sort === "function" && + object[Symbol.toStringTag] === "URLSearchParams" // 获取类名的方式哦 + ); +}; diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index fa1bf020..433a67a4 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1 +1,6 @@ +// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 +// +import { mockFetch } from "./fetch/fetch.js"; +typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 + export { MockXMLHttpRequest } from "./xhr.js"; diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/xhr.js index aa4c602c..da009ad0 100644 --- a/src/mock/xhr/xhr.js +++ b/src/mock/xhr/xhr.js @@ -43,8 +43,7 @@ onloadend loadend onreadystatechange readystatechange */ - -import { type, isFunction } from "../util.js"; +import { find, convert } from "./ajax-tools.js"; import { assignIn as extend } from "lodash-es"; // 备份原生 XMLHttpRequest window._XMLHttpRequest = window.XMLHttpRequest; @@ -404,28 +403,4 @@ function createNativeXMLHttpRequest() { } } -// 查找与请求参数匹配的数据模板:URL,Type -function find(options) { - for (var sUrlType in MockXMLHttpRequest.Mock._mocked) { - var item = MockXMLHttpRequest.Mock._mocked[sUrlType]; - if ((!item.rurl || match(item.rurl, options.url)) && (!item.rtype || match(item.rtype, options.type.toLowerCase()))) { - // console.log('[mock]', options.url, '>', item.rurl) - return item; - } - } - - function match(expected, actual) { - if (type(expected) === "string") { - return expected === actual; - } - if (type(expected) === "regexp") { - return expected.test(actual); - } - } -} - -// 数据模板 => 响应数据 -function convert(item, options) { - return isFunction(item.template) ? item.template(options) : MockXMLHttpRequest.Mock.mock(item.template); -} export { MockXMLHttpRequest }; diff --git a/test/fakeServer.js b/test/fakeServer.js index e8d6ba2e..2cfb4034 100644 --- a/test/fakeServer.js +++ b/test/fakeServer.js @@ -10,3 +10,4 @@ Mock.mock("fake/file", { }, ], }); +axios.get("fake/file").then((res) => console.log(res)); diff --git a/test/index.html b/test/index.html index 59fd8fe8..c9be0d63 100644 --- a/test/index.html +++ b/test/index.html @@ -15,7 +15,7 @@ - + + \ No newline at end of file From e069eeeb863f1e88480c3139e45b91f9c27317b0 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Mon, 14 Jun 2021 17:11:17 +0800 Subject: [PATCH 19/65] 0.9.3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 922bb058..ea3cdfc6 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.2", + "version": "0.9.3", "homepage": "http://mockjs.com/", "keywords": [ "mock", From c3281303f3505458efc7850079a11dfd16f218d9 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Mon, 14 Jun 2021 20:14:56 +0800 Subject: [PATCH 20/65] =?UTF-8?q?=E4=BD=BF=E7=94=A8=E7=BB=A7=E6=89=BF?= =?UTF-8?q?=E4=BB=A3=E7=90=86=E7=9A=84=E6=96=B9=E5=BC=8F=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=20XHR=20=E7=9A=84=E4=BB=A3=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + dist/Mock.min.js | 391 +++++-------------- dist/mock.js | 391 +++++-------------- src/mock/xhr/XMLHttpRequest/constant.js | 43 +++ src/mock/xhr/xhr.js | 483 +++++------------------- test/fakeServer.js | 1 + 6 files changed, 311 insertions(+), 999 deletions(-) create mode 100644 src/mock/xhr/XMLHttpRequest/constant.js diff --git a/README.md b/README.md index 7b7e16c1..6144100b 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](htt 4. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) 6. 删除 XHR 代理时的同步行为,这个行为已经不被浏览器所使用。 +7. 使用继承代理的方式而不是覆盖 XHR 请求的方式代理 原生 XHR 行为。 ## 教程 diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 9386c230..2f5a15d2 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -14745,46 +14745,6 @@ var Mock = (function () { return realFetch(url, options); } - /* global window, document, location, Event, setTimeout */ - // 备份原生 XMLHttpRequest - window._XMLHttpRequest = window.XMLHttpRequest; - window._ActiveXObject = window.ActiveXObject; - - /* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 - */ - try { - new window.Event("custom"); - } catch (exception) { - window.Event = function (type, bubbles, cancelable, detail) { - var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event; - }; - } - - var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4, - }; - - var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); - var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); - var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); - - // https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 var HTTP_STATUS_CODES = { 100: "Continue", 101: "Switching Protocols", @@ -14829,278 +14789,103 @@ var Mock = (function () { 505: "HTTP Version Not Supported", }; - /* - MockXMLHttpRequest - */ - - function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {}, - }; - } - - MockXMLHttpRequest._settings = { - timeout: "10-100", - /* - timeout: 50, - timeout: '10-100', - */ - }; - - MockXMLHttpRequest.setup = function (settings) { - assignIn(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings; - }; - - assignIn(MockXMLHttpRequest, XHR_STATES); - assignIn(MockXMLHttpRequest.prototype, XHR_STATES); - - // 标记当前对象为 MockXMLHttpRequest - MockXMLHttpRequest.prototype.mock = true; - - // 是否拦截 Ajax 请求 - MockXMLHttpRequest.prototype.match = false; - - // 初始化 Request 相关的属性和方法 - assignIn(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async = true, username, password) { - var that = this; - - assignIn(this.custom, { - method: method, - url: url, - async: typeof async === "boolean" ? async : true, - username: username, - password: password, - options: { - url: url, - type: method, - }, - }); - - this.custom.timeout = (function (timeout) { - if (typeof timeout === "number") return timeout; - if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); - if (typeof timeout === "string" && ~timeout.indexOf("-")) { - var tmp = timeout.split("-"); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min; - } - })(MockXMLHttpRequest._settings.timeout); - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/)); - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } - - return; - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function (name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return; - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += "," + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return; - } + // 使用不完全覆盖的方式,使用继承方式继承所有的属性 - // 拦截 XHR + let SEND = XMLHttpRequest.prototype.send; + const OPEN = XMLHttpRequest.prototype.open; - // X-Requested-With header - this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); + //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - // loadstart The fetch initiates. - this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - - if (this.custom.async) setTimeout(done, this.custom.timeout); - // 异步 - else done(); // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.dispatchEvent(new Event("load" /*, false, false, that*/)); - that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return; - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event("abort", false, false, this)); - this.dispatchEvent(new Event("error", false, false, this)); - }, - }); - - // 初始化 Response 相关的属性和方法 - assignIn(MockXMLHttpRequest.prototype, { - responseURL: "", - status: MockXMLHttpRequest.UNSENT, - statusText: "", - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function (name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name); - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()]; - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function () { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders(); - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ""; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue; - headers += h + ": " + responseHeaders[h] + "\r\n"; - } - return headers; - }, - overrideMimeType: function (/*mime*/) {}, - responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: "", - responseXML: null, - }); - - // EventTarget - assignIn(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); + class MockXMLHttpRequest extends XMLHttpRequest { + constructor() { + super(...arguments); + } + _send = SEND; + _open = OPEN; + open(method, url, async, username, password) { + // 不进行同步操作 + this._open(method, url, true, username, password); + this.$url = url; + this.$type = method.toLowerCase(); + } + send(body) { + if (this.$mock) { + this.$template = find({ url: this.$url, type: this.$type }); + if (this.$template) { + this.dispatchEvent(new Event("loadstart")); + setTimeout(this.$done.bind(this), this.$timeout); + return null; } } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } + this._send(body); + } + get mock() { + return this.$mock; + } + set mock(value) { + if (typeof value === "boolean") this.$mock = value; + } - var ontype = "on" + event.type; - if (this[ontype]) this[ontype](event); - }, - }); + $type = "get"; + $url = ""; + $mock = true; + $timeout = 1000; + $data = null; + $template = null; + + $done() { + this.readyState = this.HEADERS_RECEIVED; + this.dispatchEvent(new Event("readystatechange")); + this.readyState = this.LOADING; + this.dispatchEvent(new Event("readystatechange")); + + this.status = 200; + this.statusText = HTTP_STATUS_CODES[200]; + this.$data = convert(this.$template, {}); + this.response = JSON.stringify(this.$data, null, 4); + this.responseText = this.response; + this.readyState = this.DONE; + this.dispatchEvent(new Event("readystatechange")); + this.dispatchEvent(new Event("load")); + this.dispatchEvent(new Event("loadend")); + } - // Inspired by jQuery - function createNativeXMLHttpRequest() { - var isLocal = (function () { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]); - })(); - - return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} + // 原生属性的 getter 和 setter + $readyState = 0; + $status = 200; + $response = ""; + $responseText = ""; + $statusText = ""; + set readyState(state) { + this.$readyState = state; + } + get readyState() { + return this.$readyState; + } + set status(code) { + this.$status = code; + } + get status() { + return this.$status; + } + set statusText(code) { + this.$statusText = code; + } + get statusText() { + return this.$statusText; } - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} + get response() { + return this.$response; + } + set response(code) { + this.$response = code; + } + set responseText(code) { + this.$responseText = code; + } + get statusText() { + return this.$statusText; } } diff --git a/dist/mock.js b/dist/mock.js index 535e7d10..f5c2a0be 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -14742,46 +14742,6 @@ async function fakeFetch(url, options = {}) { return realFetch(url, options); } -/* global window, document, location, Event, setTimeout */ -// 备份原生 XMLHttpRequest -window._XMLHttpRequest = window.XMLHttpRequest; -window._ActiveXObject = window.ActiveXObject; - -/* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 -*/ -try { - new window.Event("custom"); -} catch (exception) { - window.Event = function (type, bubbles, cancelable, detail) { - var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event; - }; -} - -var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4, -}; - -var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); -var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); -var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); - -// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 var HTTP_STATUS_CODES = { 100: "Continue", 101: "Switching Protocols", @@ -14826,278 +14786,103 @@ var HTTP_STATUS_CODES = { 505: "HTTP Version Not Supported", }; -/* - MockXMLHttpRequest -*/ - -function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {}, - }; -} - -MockXMLHttpRequest._settings = { - timeout: "10-100", - /* - timeout: 50, - timeout: '10-100', - */ -}; - -MockXMLHttpRequest.setup = function (settings) { - assignIn(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings; -}; - -assignIn(MockXMLHttpRequest, XHR_STATES); -assignIn(MockXMLHttpRequest.prototype, XHR_STATES); - -// 标记当前对象为 MockXMLHttpRequest -MockXMLHttpRequest.prototype.mock = true; - -// 是否拦截 Ajax 请求 -MockXMLHttpRequest.prototype.match = false; - -// 初始化 Request 相关的属性和方法 -assignIn(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async = true, username, password) { - var that = this; - - assignIn(this.custom, { - method: method, - url: url, - async: typeof async === "boolean" ? async : true, - username: username, - password: password, - options: { - url: url, - type: method, - }, - }); - - this.custom.timeout = (function (timeout) { - if (typeof timeout === "number") return timeout; - if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); - if (typeof timeout === "string" && ~timeout.indexOf("-")) { - var tmp = timeout.split("-"); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min; - } - })(MockXMLHttpRequest._settings.timeout); - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/)); - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } - - return; - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function (name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return; - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += "," + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return; - } +// 使用不完全覆盖的方式,使用继承方式继承所有的属性 - // 拦截 XHR +let SEND = XMLHttpRequest.prototype.send; +const OPEN = XMLHttpRequest.prototype.open; - // X-Requested-With header - this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); +//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - // loadstart The fetch initiates. - this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - - if (this.custom.async) setTimeout(done, this.custom.timeout); - // 异步 - else done(); // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; - - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); - - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.dispatchEvent(new Event("load" /*, false, false, that*/)); - that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return; - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event("abort", false, false, this)); - this.dispatchEvent(new Event("error", false, false, this)); - }, -}); - -// 初始化 Response 相关的属性和方法 -assignIn(MockXMLHttpRequest.prototype, { - responseURL: "", - status: MockXMLHttpRequest.UNSENT, - statusText: "", - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function (name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name); - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()]; - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function () { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders(); - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ""; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue; - headers += h + ": " + responseHeaders[h] + "\r\n"; - } - return headers; - }, - overrideMimeType: function (/*mime*/) {}, - responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: "", - responseXML: null, -}); - -// EventTarget -assignIn(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); +class MockXMLHttpRequest extends XMLHttpRequest { + constructor() { + super(...arguments); + } + _send = SEND; + _open = OPEN; + open(method, url, async, username, password) { + // 不进行同步操作 + this._open(method, url, true, username, password); + this.$url = url; + this.$type = method.toLowerCase(); + } + send(body) { + if (this.$mock) { + this.$template = find({ url: this.$url, type: this.$type }); + if (this.$template) { + this.dispatchEvent(new Event("loadstart")); + setTimeout(this.$done.bind(this), this.$timeout); + return null; } } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } + this._send(body); + } + get mock() { + return this.$mock; + } + set mock(value) { + if (typeof value === "boolean") this.$mock = value; + } - var ontype = "on" + event.type; - if (this[ontype]) this[ontype](event); - }, -}); + $type = "get"; + $url = ""; + $mock = true; + $timeout = 1000; + $data = null; + $template = null; + + $done() { + this.readyState = this.HEADERS_RECEIVED; + this.dispatchEvent(new Event("readystatechange")); + this.readyState = this.LOADING; + this.dispatchEvent(new Event("readystatechange")); + + this.status = 200; + this.statusText = HTTP_STATUS_CODES[200]; + this.$data = convert(this.$template, {}); + this.response = JSON.stringify(this.$data, null, 4); + this.responseText = this.response; + this.readyState = this.DONE; + this.dispatchEvent(new Event("readystatechange")); + this.dispatchEvent(new Event("load")); + this.dispatchEvent(new Event("loadend")); + } -// Inspired by jQuery -function createNativeXMLHttpRequest() { - var isLocal = (function () { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]); - })(); - - return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); - - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} + // 原生属性的 getter 和 setter + $readyState = 0; + $status = 200; + $response = ""; + $responseText = ""; + $statusText = ""; + set readyState(state) { + this.$readyState = state; + } + get readyState() { + return this.$readyState; + } + set status(code) { + this.$status = code; + } + get status() { + return this.$status; + } + set statusText(code) { + this.$statusText = code; + } + get statusText() { + return this.$statusText; } - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} + get response() { + return this.$response; + } + set response(code) { + this.$response = code; + } + set responseText(code) { + this.$responseText = code; + } + get statusText() { + return this.$statusText; } } diff --git a/src/mock/xhr/XMLHttpRequest/constant.js b/src/mock/xhr/XMLHttpRequest/constant.js new file mode 100644 index 00000000..596683c3 --- /dev/null +++ b/src/mock/xhr/XMLHttpRequest/constant.js @@ -0,0 +1,43 @@ +export default { + 100: "Continue", + 101: "Switching Protocols", + 200: "OK", + 201: "Created", + 202: "Accepted", + 203: "Non-Authoritative Information", + 204: "No Content", + 205: "Reset Content", + 206: "Partial Content", + 300: "Multiple Choice", + 301: "Moved Permanently", + 302: "Found", + 303: "See Other", + 304: "Not Modified", + 305: "Use Proxy", + 307: "Temporary Redirect", + 400: "Bad Request", + 401: "Unauthorized", + 402: "Payment Required", + 403: "Forbidden", + 404: "Not Found", + 405: "Method Not Allowed", + 406: "Not Acceptable", + 407: "Proxy Authentication Required", + 408: "Request Timeout", + 409: "Conflict", + 410: "Gone", + 411: "Length Required", + 412: "Precondition Failed", + 413: "Request Entity Too Large", + 414: "Request-URI Too Long", + 415: "Unsupported Media Type", + 416: "Requested Range Not Satisfiable", + 417: "Expectation Failed", + 422: "Unprocessable Entity", + 500: "Internal Server Error", + 501: "Not Implemented", + 502: "Bad Gateway", + 503: "Service Unavailable", + 504: "Gateway Timeout", + 505: "HTTP Version Not Supported", +}; diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/xhr.js index da009ad0..18be75c6 100644 --- a/src/mock/xhr/xhr.js +++ b/src/mock/xhr/xhr.js @@ -1,406 +1,103 @@ -/* global window, document, location, Event, setTimeout */ -/* - ## MockXMLHttpRequest - - 期望的功能: - 1. 完整地覆盖原生 XHR 的行为 - 2. 完整地模拟原生 XHR 的行为 - 3. 在发起请求时,自动检测是否需要拦截 - 4. 如果不必拦截,则执行原生 XHR 的行为 - 5. 如果需要拦截,则执行虚拟 XHR 的行为 - 6. 兼容 XMLHttpRequest 和 ActiveXObject - new window.XMLHttpRequest() - new window.ActiveXObject("Microsoft.XMLHTTP") - - 关键方法的逻辑: - * new 此时尚无法确定是否需要拦截,所以创建原生 XHR 对象是必须的。 - * open 此时可以取到 URL,可以决定是否进行拦截。 - * send 此时已经确定了请求方式。 - - 规范: - http://xhr.spec.whatwg.org/ - http://www.w3.org/TR/XMLHttpRequest2/ - - 参考实现: - https://github.com/philikon/MockHttpRequest/blob/master/lib/mock.js - https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js - https://github.com/ilinsky/xmlhttprequest/blob/master/XMLHttpRequest.js - https://github.com/firebug/firebug-lite/blob/master/content/lite/xhr.js - https://github.com/thx/RAP/blob/master/lab/rap.plugin.xinglie.js - - **需不需要全面重写 XMLHttpRequest?** - http://xhr.spec.whatwg.org/#interface-xmlhttprequest - 关键属性 readyState、status、statusText、response、responseText、responseXML 是 readonly,所以,试图通过修改这些状态,来模拟响应是不可行的。 - 因此,唯一的办法是模拟整个 XMLHttpRequest,就像 jQuery 对事件模型的封装。 - - // Event handlers - onloadstart loadstart - onprogress progress - onabort abort - onerror error - onload load - ontimeout timeout - onloadend loadend - onreadystatechange readystatechange - */ +// 使用不完全覆盖的方式,使用继承方式继承所有的属性 +// 只在 send 方式调用的时候对其进行数据返回 import { find, convert } from "./ajax-tools.js"; -import { assignIn as extend } from "lodash-es"; -// 备份原生 XMLHttpRequest -window._XMLHttpRequest = window.XMLHttpRequest; -window._ActiveXObject = window.ActiveXObject; - -/* - PhantomJS - TypeError: '[object EventConstructor]' is not a constructor (evaluating 'new Event("readystatechange")') - - https://github.com/bluerail/twitter-bootstrap-rails-confirm/issues/18 - https://github.com/ariya/phantomjs/issues/11289 -*/ -try { - new window.Event("custom"); -} catch (exception) { - window.Event = function (type, bubbles, cancelable, detail) { - var event = document.createEvent("CustomEvent"); // MUST be 'CustomEvent' - event.initCustomEvent(type, bubbles, cancelable, detail); - return event; - }; -} - -var XHR_STATES = { - // The object has been constructed. - UNSENT: 0, - // The open() method has been successfully invoked. - OPENED: 1, - // All redirects (if any) have been followed and all HTTP headers of the response have been received. - HEADERS_RECEIVED: 2, - // The response's body is being received. - LOADING: 3, - // The data transfer has been completed or something went wrong during the transfer (e.g. infinite redirects). - DONE: 4, -}; - -var XHR_EVENTS = "readystatechange loadstart progress abort error load timeout loadend".split(" "); -var XHR_REQUEST_PROPERTIES = "timeout withCredentials".split(" "); -var XHR_RESPONSE_PROPERTIES = "readyState responseURL status statusText responseType response responseText responseXML".split(" "); - -// https://github.com/trek/FakeXMLHttpRequest/blob/master/fake_xml_http_request.js#L32 -var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", -}; - -/* - MockXMLHttpRequest -*/ - -function MockXMLHttpRequest() { - // 初始化 custom 对象,用于存储自定义属性 - this.custom = { - events: {}, - requestHeaders: {}, - responseHeaders: {}, - }; -} - -MockXMLHttpRequest._settings = { - timeout: "10-100", - /* - timeout: 50, - timeout: '10-100', - */ -}; - -MockXMLHttpRequest.setup = function (settings) { - extend(MockXMLHttpRequest._settings, settings); - return MockXMLHttpRequest._settings; -}; - -extend(MockXMLHttpRequest, XHR_STATES); -extend(MockXMLHttpRequest.prototype, XHR_STATES); - -// 标记当前对象为 MockXMLHttpRequest -MockXMLHttpRequest.prototype.mock = true; - -// 是否拦截 Ajax 请求 -MockXMLHttpRequest.prototype.match = false; - -// 初始化 Request 相关的属性和方法 -extend(MockXMLHttpRequest.prototype, { - // https://xhr.spec.whatwg.org/#the-open()-method - // Sets the request method, request URL, and synchronous flag. - open: function (method, url, async = true, username, password) { - var that = this; - - extend(this.custom, { - method: method, - url: url, - async: typeof async === "boolean" ? async : true, - username: username, - password: password, - options: { - url: url, - type: method, - }, - }); - - this.custom.timeout = (function (timeout) { - if (typeof timeout === "number") return timeout; - if (typeof timeout === "string" && !~timeout.indexOf("-")) return parseInt(timeout, 10); - if (typeof timeout === "string" && ~timeout.indexOf("-")) { - var tmp = timeout.split("-"); - var min = parseInt(tmp[0], 10); - var max = parseInt(tmp[1], 10); - return Math.round(Math.random() * (max - min)) + min; - } - })(MockXMLHttpRequest._settings.timeout); - - // 查找与请求参数匹配的数据模板 - var item = find(this.custom.options); - - function handle(event) { - // 同步属性 NativeXMLHttpRequest => MockXMLHttpRequest - for (var i = 0; i < XHR_RESPONSE_PROPERTIES.length; i++) { - try { - that[XHR_RESPONSE_PROPERTIES[i]] = xhr[XHR_RESPONSE_PROPERTIES[i]]; - } catch (e) {} - } - // 触发 MockXMLHttpRequest 上的同名事件 - that.dispatchEvent(new Event(event.type /*, false, false, that*/)); - } - - // 如果未找到匹配的数据模板,则采用原生 XHR 发送请求。 - if (!item) { - // 创建原生 XHR 对象,调用原生 open(),监听所有原生事件 - var xhr = createNativeXMLHttpRequest(); - this.custom.xhr = xhr; - - // 初始化所有事件,用于监听原生 XHR 对象的事件 - for (var i = 0; i < XHR_EVENTS.length; i++) { - xhr.addEventListener(XHR_EVENTS[i], handle); - } - - // xhr.open() - if (username) xhr.open(method, url, async, username, password); - else xhr.open(method, url, async); - - // 同步属性 MockXMLHttpRequest => NativeXMLHttpRequest - for (var j = 0; j < XHR_REQUEST_PROPERTIES.length; j++) { - try { - xhr[XHR_REQUEST_PROPERTIES[j]] = that[XHR_REQUEST_PROPERTIES[j]]; - } catch (e) {} - } - - return; - } - - // 找到了匹配的数据模板,开始拦截 XHR 请求 - this.match = true; - this.custom.template = item; - this.readyState = MockXMLHttpRequest.OPENED; - this.dispatchEvent(new Event("readystatechange" /*, false, false, this*/)); - }, - // https://xhr.spec.whatwg.org/#the-setrequestheader()-method - // Combines a header in author request headers. - setRequestHeader: function (name, value) { - // 原生 XHR - if (!this.match) { - this.custom.xhr.setRequestHeader(name, value); - return; - } - - // 拦截 XHR - var requestHeaders = this.custom.requestHeaders; - if (requestHeaders[name]) requestHeaders[name] += "," + value; - else requestHeaders[name] = value; - }, - timeout: 0, - withCredentials: false, - upload: {}, - // https://xhr.spec.whatwg.org/#the-send()-method - // Initiates the request. - send: function send(data) { - var that = this; - this.custom.options.body = data; - - // 原生 XHR - if (!this.match) { - this.custom.xhr.send(data); - return; - } - - // 拦截 XHR - - // X-Requested-With header - this.setRequestHeader("X-Requested-With", "MockXMLHttpRequest"); - - // loadstart The fetch initiates. - this.dispatchEvent(new Event("loadstart" /*, false, false, this*/)); - - if (this.custom.async) setTimeout(done, this.custom.timeout); - // 异步 - else done(); // 同步 - - function done() { - that.readyState = MockXMLHttpRequest.HEADERS_RECEIVED; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.readyState = MockXMLHttpRequest.LOADING; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - - that.status = 200; - that.statusText = HTTP_STATUS_CODES[200]; +import HTTP_STATUS_CODES from "./XMLHttpRequest/constant.js"; - // fix #92 #93 by @qddegtya - that.response = that.responseText = JSON.stringify(convert(that.custom.template, that.custom.options), null, 4); +let SEND = XMLHttpRequest.prototype.send; +const OPEN = XMLHttpRequest.prototype.open; - that.readyState = MockXMLHttpRequest.DONE; - that.dispatchEvent(new Event("readystatechange" /*, false, false, that*/)); - that.dispatchEvent(new Event("load" /*, false, false, that*/)); - that.dispatchEvent(new Event("loadend" /*, false, false, that*/)); - } - }, - // https://xhr.spec.whatwg.org/#the-abort()-method - // Cancels any network activity. - abort: function abort() { - // 原生 XHR - if (!this.match) { - this.custom.xhr.abort(); - return; - } - - // 拦截 XHR - this.readyState = MockXMLHttpRequest.UNSENT; - this.dispatchEvent(new Event("abort", false, false, this)); - this.dispatchEvent(new Event("error", false, false, this)); - }, -}); - -// 初始化 Response 相关的属性和方法 -extend(MockXMLHttpRequest.prototype, { - responseURL: "", - status: MockXMLHttpRequest.UNSENT, - statusText: "", - // https://xhr.spec.whatwg.org/#the-getresponseheader()-method - getResponseHeader: function (name) { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getResponseHeader(name); - } - - // 拦截 XHR - return this.custom.responseHeaders[name.toLowerCase()]; - }, - // https://xhr.spec.whatwg.org/#the-getallresponseheaders()-method - // http://www.utf8-chartable.de/ - getAllResponseHeaders: function () { - // 原生 XHR - if (!this.match) { - return this.custom.xhr.getAllResponseHeaders(); - } - - // 拦截 XHR - var responseHeaders = this.custom.responseHeaders; - var headers = ""; - for (var h in responseHeaders) { - if (!responseHeaders.hasOwnProperty(h)) continue; - headers += h + ": " + responseHeaders[h] + "\r\n"; - } - return headers; - }, - overrideMimeType: function (/*mime*/) {}, - responseType: "", // '', 'text', 'arraybuffer', 'blob', 'document', 'json' - response: null, - responseText: "", - responseXML: null, -}); +//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -// EventTarget -extend(MockXMLHttpRequest.prototype, { - addEventListener: function addEventListener(type, handle) { - var events = this.custom.events; - if (!events[type]) events[type] = []; - events[type].push(handle); - }, - removeEventListener: function removeEventListener(type, handle) { - var handles = this.custom.events[type] || []; - for (var i = 0; i < handles.length; i++) { - if (handles[i] === handle) { - handles.splice(i--, 1); +class MockXMLHttpRequest extends XMLHttpRequest { + constructor() { + super(...arguments); + } + _send = SEND; + _open = OPEN; + open(method, url, async, username, password) { + // 不进行同步操作 + this._open(method, url, true, username, password); + this.$url = url; + this.$type = method.toLowerCase(); + } + send(body) { + if (this.$mock) { + this.$template = find({ url: this.$url, type: this.$type }); + if (this.$template) { + this.dispatchEvent(new Event("loadstart")); + setTimeout(this.$done.bind(this), this.$timeout); + return null; } } - }, - dispatchEvent: function dispatchEvent(event) { - var handles = this.custom.events[event.type] || []; - for (var i = 0; i < handles.length; i++) { - handles[i].call(this, event); - } - - var ontype = "on" + event.type; - if (this[ontype]) this[ontype](event); - }, -}); - -// Inspired by jQuery -function createNativeXMLHttpRequest() { - var isLocal = (function () { - var rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/; - var rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/; - var ajaxLocation = location.href; - var ajaxLocParts = rurl.exec(ajaxLocation.toLowerCase()) || []; - return rlocalProtocol.test(ajaxLocParts[1]); - })(); + this._send(body); + } + get mock() { + return this.$mock; + } + set mock(value) { + if (typeof value === "boolean") this.$mock = value; + } - return window.ActiveXObject ? (!isLocal && createStandardXHR()) || createActiveXHR() : createStandardXHR(); + $type = "get"; + $url = ""; + $mock = true; + $timeout = 1000; + $data = null; + $template = null; + + $done() { + this.readyState = this.HEADERS_RECEIVED; + this.dispatchEvent(new Event("readystatechange")); + this.readyState = this.LOADING; + this.dispatchEvent(new Event("readystatechange")); + + this.status = 200; + this.statusText = HTTP_STATUS_CODES[200]; + this.$data = convert(this.$template, {}); + this.response = JSON.stringify(this.$data, null, 4); + this.responseText = this.response; + this.readyState = this.DONE; + this.dispatchEvent(new Event("readystatechange")); + this.dispatchEvent(new Event("load")); + this.dispatchEvent(new Event("loadend")); + } - function createStandardXHR() { - try { - return new window._XMLHttpRequest(); - } catch (e) {} + // 原生属性的 getter 和 setter + $readyState = 0; + $status = 200; + $response = ""; + $responseText = ""; + $statusText = ""; + set readyState(state) { + this.$readyState = state; + } + get readyState() { + return this.$readyState; + } + set status(code) { + this.$status = code; + } + get status() { + return this.$status; + } + set statusText(code) { + this.$statusText = code; + } + get statusText() { + return this.$statusText; } - function createActiveXHR() { - try { - return new window._ActiveXObject("Microsoft.XMLHTTP"); - } catch (e) {} + get response() { + return this.$response; + } + set response(code) { + this.$response = code; + } + set responseText(code) { + this.$responseText = code; + } + get statusText() { + return this.$statusText; } } - export { MockXMLHttpRequest }; diff --git a/test/fakeServer.js b/test/fakeServer.js index 2cfb4034..e75e363e 100644 --- a/test/fakeServer.js +++ b/test/fakeServer.js @@ -10,4 +10,5 @@ Mock.mock("fake/file", { }, ], }); + axios.get("fake/file").then((res) => console.log(res)); From 74b07413e0632b823a5715e70d77cc614fbbf344 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Mon, 14 Jun 2021 20:15:39 +0800 Subject: [PATCH 21/65] =?UTF-8?q?=E6=9B=B4=E6=96=B0npm=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 15022 +-------------------------------------------- dist/mock.js | 15011 +------------------------------------------- 2 files changed, 111 insertions(+), 29922 deletions(-) diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 2f5a15d2..662a1216 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,14903 +1,59 @@ - -(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); -var Mock = (function () { - 'use strict'; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Built-in value references. */ - var Symbol$1 = root.Symbol; - - /** Used for built-in method references. */ - var objectProto$8 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString$1 = objectProto$8.toString; - - /** Built-in value references. */ - var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; - } - - /** Used for built-in method references. */ - var objectProto$7 = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto$7.toString; - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** `Object#toString` result references. */ - var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - - /** Built-in value references. */ - var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** Used as references for various `Number` constants. */ - var INFINITY$1 = 1 / 0; - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; - } - - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/; - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; - } - - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; - - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** Used as references for various `Number` constants. */ - var NAN = 0 / 0; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Built-in method references without a dependency on `root`. */ - var freeParseInt = parseInt; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** `Object#toString` result references. */ - var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** Used to detect overreaching core-js shims. */ - var coreJsData = root['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** Used for built-in method references. */ - var funcProto$1 = Function.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString$1 = funcProto$1.toString; - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used for built-in method references. */ - var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeNow = Date.now; - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER$1 = 9007199254740991; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** Used for built-in method references. */ - var objectProto$5 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax$1 = Math.max; - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER = 9007199254740991; - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** Used for built-in method references. */ - var objectProto$4 = Object.prototype; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** `Object#toString` result references. */ - var argsTag$1 = '[object Arguments]'; - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; - } - - /** Used for built-in method references. */ - var objectProto$3 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - - /** Built-in value references. */ - var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ - function stubFalse() { - return false; - } - - /** Detect free variable `exports`. */ - var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - - /** Built-in value references. */ - var Buffer = moduleExports$1 ? root.Buffer : undefined; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = - typedArrayTags[setTag] = typedArrayTags[stringTag$1] = - typedArrayTags[weakMapTag] = false; - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** Used for built-in method references. */ - var objectProto$2 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeKeys = overArg(Object.keys, Object); - - /** Used for built-in method references. */ - var objectProto$1 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsZWJ$1 = '\\u200d'; - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ - var upperFirst = createCaseFirst('toUpperCase'); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** `Object#toString` result references. */ - var stringTag = '[object String]'; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); - } - - /** `Object#toString` result references. */ - var regexpTag = '[object RegExp]'; - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /* Node.js helper references. */ - var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); - } - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMin = Math.min, - nativeRandom = Math.random; - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeMax = Math.max; - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - var range$1 = createRange(); - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - // 使用 lodash 提供的方式 - function type$1(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); - } - - function isObjectOrArray(value) { - return isObject(value) || isArray(value); - } - - function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); - } - - // import { isObject, isArray } from "./type.js"; - function extend(...args) { - return assignIn(this, ...args); - } - - function each(obj, iterator, context) { - // each - var i, key; - if (type(obj) === "number") { - //表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } - } - - /* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 - */ - function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, "") - .replace(/\*\/[^\/]+$/, "") - .replace(/^[\s\xA0]+/, "") - .replace(/[\s\xA0]+$/, ""); // .trim() - } - - /* - ## Utilities - */ - function keys(obj) { - return Object.keys(obj); - } - function values(obj) { - return Object.values(obj); - } - function noop() {} - - var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc - }); - - const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); - }; - const numberGate = function (input) { - if (isNumber(input)) return input; - let res = parseInt(input); - return isNumber(res) ? res : undefined; - }; - // 返回一个随机的整数。 - const integer = function (min, max) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - return random(min, max, false); - }; - const natural = function (min, max) { - return Math.abs(integer(min, max)); - }; - - const float = function (min, max, dmin, dmax) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - dmin = numberGate(dmin) || 1; - dmax = numberGate(dmax) || 17; - if (dmin < 1) dmin = 1; - if (dmax > 17) dmax = 17; - let dcount = random(dmin, dmax, false); - return parseFloat(random(min, max, true).toFixed(dcount)); - }; - - const boolean$1 = function (min, max, cur) { - //! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; - }; - - const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", - }; - pools.alpha = pools.lower + pools.upper; - pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - - const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); - }; - - const string$1 = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map(() => character(pool)).join(""); - }; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - - var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); - }; - - var simpleSwizzle = createCommonjsModule(function (module) { - - - - var concat = Array.prototype.concat; - var slice = Array.prototype.slice; - - var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; - }; - - swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; - }; - }); - - var colorString = createCommonjsModule(function (module) { - /* MIT license */ - - - - var reverseNames = {}; - - // create a list of reverse color names - for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } - } - - var cs = module.exports = { - to: {}, - get: {} - }; - - cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; - }; - - cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; - }; - - cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; - }; - - cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; - }; - - cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); - }; - - cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; - }; - - cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; - }; - - cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; - }; - - // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax - // (hwb have alpha optional & 1 is default value) - cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; - }; - - cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; - }; - - // helpers - function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); - } - - function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; - } - }); - colorString.to; - colorString.get; - - var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - - var conversions = createCommonjsModule(function (module) { - /* MIT license */ - - - // NOTE: conversions should only return primitive values (i.e. arrays, or - // values that give correct `typeof` results). - // do not use box values types (i.e. Number(), String(), etc.) - - var reverseKeywords = {}; - for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } - } - - var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} - }; - - // hide .channels and .labels properties - for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } - } - - convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; - }; - - convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; - }; - - convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; - }; - - convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; - }; - - /** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ - function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); - } - - convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; - }; - - convert.keyword.rgb = function (keyword) { - return colorName[keyword]; - }; - - convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; - }; - - convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; - }; - - convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; - }; - - convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } - }; - - convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; - }; - - // http://dev.w3.org/csswg/css-color/#hwb-to-rgb - convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; - }; - - convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; - }; - - convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; - }; - - convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; - }; - - convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; - }; - - convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); - }; - - convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; - }; - - convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; - }; - - convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; - }; - - convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; - }; - - convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; - }; - - convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; - }; - - convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; - }; - - convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; - }; - - convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; - }; - - convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; - }; - - convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; - }; - - convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; - }; - - convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; - }; - - convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; - }; - - convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; - }; - - convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; - }; - - convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; - }; - - convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; - }; - - convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; - }; - - convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; - }; - }); - conversions.rgb; - conversions.hsl; - conversions.hsv; - conversions.hwb; - conversions.cmyk; - conversions.xyz; - conversions.lab; - conversions.lch; - conversions.hex; - conversions.keyword; - conversions.ansi16; - conversions.ansi256; - conversions.hcg; - conversions.apple; - conversions.gray; - - /* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. - */ - - function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; - } - - // https://en.wikipedia.org/wiki/Breadth-first_search - function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; - } - - function link(from, to) { - return function (args) { - return to(from(args)); - }; - } - - function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; - } - - var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; - }; - - var convert$1 = {}; - - var models = Object.keys(conversions); - - function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); - }); - - var colorConvert = convert$1; - - var _slice = [].slice; - - var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' - ]; - - var hashedModelKeys = {}; - Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; - }); - - var limiters = {}; - - function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } - } - - Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } - }; - - // model conversion methods and static constructors - Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; - }); - - function roundTo(num, places) { - return Number(num.toFixed(places)); - } - - function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; - } - - function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; - } - - function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; - } - - function assertArray(val) { - return Array.isArray(val) ? val : [val]; - } - - function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; - } - - var color$1 = Color; - - /* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) - */ - var DICT$1 = { - // name value nicer - navy: { - value: "#000080", - nicer: "#001F3F", - }, - blue: { - value: "#0000ff", - nicer: "#0074D9", - }, - aqua: { - value: "#00ffff", - nicer: "#7FDBFF", - }, - teal: { - value: "#008080", - nicer: "#39CCCC", - }, - olive: { - value: "#008000", - nicer: "#3D9970", - }, - green: { - value: "#008000", - nicer: "#2ECC40", - }, - lime: { - value: "#00ff00", - nicer: "#01FF70", - }, - yellow: { - value: "#ffff00", - nicer: "#FFDC00", - }, - orange: { - value: "#ffa500", - nicer: "#FF851B", - }, - red: { - value: "#ff0000", - nicer: "#FF4136", - }, - maroon: { - value: "#800000", - nicer: "#85144B", - }, - fuchsia: { - value: "#ff00ff", - nicer: "#F012BE", - }, - purple: { - value: "#800080", - nicer: "#B10DC9", - }, - silver: { - value: "#c0c0c0", - nicer: "#DDDDDD", - }, - gray: { - value: "#808080", - nicer: "#AAAAAA", - }, - black: { - value: "#000000", - nicer: "#111111", - }, - white: { - value: "#FFFFFF", - nicer: "#FFFFFF", - }, - }; - - /* - ## Helpers - */ - - const upper = function (str) { - return (str + "").toUpperCase(); - }; - - const lower = function (str) { - return (str + "").toLowerCase(); - }; - - // 从数组中随机选取一个元素,并返回。 - // 更改 pick 函数 , 函数不进行重载 - const pick = function (arr, min, max) { - // pick( [ item1, item2 ... ] ) - if (min === undefined && max === undefined) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - if (min !== undefined && max !== undefined) return shuffle(arr, min, max); - // pick( [ item1, item2 ... ], count ) - return shuffle(arr, 0, min); - }; - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - */ - const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(min, max); - } - }; - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - const Cache = {}; - const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; - }; - - var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } - ]; - - /* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() - */ - - let _hue; - function _goldenRatioColor(saturation, value) { - let _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); - } - - // 中国色 数据来自于 http://zhongguose.com - - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 - function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; - } - - // #DAC0DE - function hex() { - var hsv = _goldenRatioColor(); - return hsv.hex(); - } - - // rgb(128,255,255) - function rgb() { - var hsv = _goldenRatioColor(); - return hsv.hsv().string(); - } - // rgba(128,255,255,0.3) - function rgba() { - var hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); - } - - // hsl(300,80%,90%) - function hsl() { - var hsv = _goldenRatioColor(); - return hsv.hsl().string(); - } - - var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] - }; - var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" - ]; - var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" - ]; - var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" - ]; - var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 - }; - - /* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) - */ - let { firstName, lastName, cfirstName, clastName } = Name; - - // 随机生成一个常见的英文名。 - function first() { - var names = firstName.male.concat(); - return pick(names); - } - - // 随机生成一个常见的英文姓。 - function last() { - return pick(lastName); - } - - // 随机生成一个常见的英文姓名。 - function name(middle) { - middle = middle ? ` ${first()} ` : " "; - return `${first()}${middle}${last()}`; - } - - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - function cfirst() { - return pick(cfirstName); - } /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - function clast() { - return pick(clastName); - } - // 随机生成一个常见的中文姓名。 - function cname() { - return cfirst() + clast(); - } - - // Unique ID creation requires a high quality random # generator. In the browser we therefore - // require the crypto API and do not support built-in fallback to lower quality random number - // generators (like Math.random()). - var getRandomValues; - var rnds8 = new Uint8Array(16); - function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); - } - - var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - - function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); - } - - /** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - - var byteToHex = []; - - for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); - } - - function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; - } - - function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); - } - - var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" - }; - - /* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - */ - - // id pid/parentId name children - - // 将扁平数组转化为树状 - function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - //父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - } - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; - } - const ids = Object.keys(DICT); - - // 转化数组内对象的表现形式 - const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + "0000"; - } - return { - id, - pid, - name: value, - }; - }); - - const DICT_FIXED = createTree(fixed); - - var _patternLetters = { - yyyy: "getFullYear", - yy: function (date) { - return ("" + date.getFullYear()).slice(2); - }, - y: "yy", - - MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; - }, - d: "getDate", - - HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; - }, - H: "getHours", - hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; - }, - m: "getMinutes", - - ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; - }, - s: "getSeconds", - - SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; - }, - S: "getMilliseconds", - - A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; - }, - a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; - }, - T: "getTime", - }; - - /* - ## Date - */ - - const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - - // 返回一个随机的日期字符串。 - function date(format = "yyyy-MM-dd") { - return _formatDate(_randomDate(), format); - } - function datetime(format = "yyyy-MM-dd HH:mm:ss") { - return date(format); - } - function time(format = "HH:mm:ss") { - return date(format); - } - function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); - } - - function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); - } - - function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - } - - function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); - } - - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - function id() { - var id, - sum = 0, - rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], - last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; - - id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; - } - - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ - function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); - } - - /* - ## Miscellaneous - */ - - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - let key = 0; - const increment = function (step) { - return (key += +step || 1); - }; - const inc = increment; - - // Dice - function d4() { - return this.natural(1, 4); - } - function d6() { - return this.natural(1, 6); - } - function d8() { - return this.natural(1, 8); - } - function d12() { - return this.natural(1, 12); - } - function d20() { - return this.natural(1, 20); - } - function d100() { - return this.natural(1, 100); - } - - function range(defaultMin, defaultMax, min, max) { - return min === undefined - ? natural(defaultMin, defaultMax) // () - : max === undefined - ? min // ( len ) - : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) - } - - // 随机生成一个句子,第一个单词的首字母大写。 - function sentence(min, max) { - var len = range(12, 18, min, max); - let string = [...Array(len)].map(() => word()).join(""); - return capitalize(string) + "."; - } - - // 随机生成一个单词。 - function word(min, max) { - var len = range(3, 10, min, max); - return [...Array(len)].map(() => character("lower")).join(""); - } - - // 随机生成一段文本。 - function paragraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map((i) => sentence()); - } - - // 随机生成一句标题,其中每个单词的首字母大写。 - function title(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => capitalize(word())).join(""); - } - - function cparagraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => csentence()).join(""); - } - - // 随机生成一个中文句子。 - function csentence(min, max) { - var len = range(12, 18, min, max); - return [...Array(len)].map(() => cword()).join("") + "。"; - } - // 随机生成一句中文标题。 - function ctitle(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => cword()).join(""); - } - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - const DICT_HANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; - // 随机生成一个或多个汉字。 - function cword(...args) { - var len = 1, - pool = DICT_HANZI, - min, - max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === "string") { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - const poolLength = pool.length; - if (len === 1) return pool.charAt(natural(0, poolLength)); - - return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); - } - - // 协议簇 - const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); - const tlds = // 域名后缀 - ( - "com net org edu gov int mil cn " + - // 国内域名 - "com.cn net.cn gov.cn org.cn " + - // 中文国内域名 - "中国 中国互联.公司 中国互联.网络 " + - // 新国际域名 - "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + - // 世界各国域名后缀 - "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" - ).split(" "); - - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; - } - - // 随机生成一个 URL 协议。 - function protocol() { - return pick(protocols); - } - // 随机生成一个域名。 - function domain(Tld) { - return `${word()}.${Tld || tld()}`; - } - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - function tld() { - // Top Level Domain - return pick(tlds); - } - - // 随机生成一个邮件地址。 - function email(domain) { - return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; - } - // 随机生成一个 IP 地址。 - function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join("."); - } - - var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" - ]; - var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" - ]; - var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" - ]; - var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 - }; - - var Addvocate = "#ff6138"; - var Adobe = "#ff0000"; - var Aim = "#fcd20b"; - var Amazon = "#e47911"; - var Android = "#a4c639"; - var AOL = "#0060a3"; - var Atlassian = "#003366"; - var Behance = "#053eff"; - var bitly = "#ee6123"; - var Blogger = "#fc4f08"; - var Boeing = "#0039a6"; - var Carbonmade = "#613854"; - var Cheddar = "#ff7243"; - var Delicious = "#205cc0"; - var Dell = "#3287c1"; - var Designmoo = "#e54a4f"; - var Deviantart = "#4e6252"; - var Devour = "#fd0001"; - var DEWALT = "#febd17"; - var Dribbble = "#ea4c89"; - var Dropbox = "#3d9ae8"; - var Drupal = "#0c76ab"; - var Dunked = "#2a323a"; - var eBay = "#89c507"; - var Ember = "#f05e1b"; - var Engadget = "#00bdf6"; - var Envato = "#528036"; - var Etsy = "#eb6d20"; - var Evernote = "#5ba525"; - var Facebook = "#3b5998"; - var Firefox = "#e66000"; - var Forrst = "#5b9a68"; - var Foursquare = "#25a0ca"; - var Garmin = "#007cc3"; - var GetGlue = "#2d75a2"; - var Gimmebar = "#f70078"; - var GitHub = "#171515"; - var Grooveshark = "#f77f00"; - var Groupon = "#82b548"; - var HelloWallet = "#0085ca"; - var HootSuite = "#003366"; - var Houzz = "#73ba37"; - var HTML5 = "#ec6231"; - var IKEA = "#ffcc33"; - var IMDb = "#f3ce13"; - var Instagram = "#3f729b"; - var Intel = "#0071c5"; - var Intuit = "#365ebf"; - var Kickstarter = "#76cc1e"; - var kippt = "#e03500"; - var Kodery = "#00af81"; - var LastFM = "#c3000d"; - var LinkedIn = "#0e76a8"; - var Livestream = "#cf0005"; - var Lumo = "#576396"; - var Mixpanel = "#a086d3"; - var Meetup = "#e51937"; - var Nokia = "#183693"; - var NVIDIA = "#76b900"; - var Opera = "#cc0f16"; - var Path = "#e41f11"; - var Pinboard = "#0000e6"; - var Pinterest = "#c8232c"; - var PlayStation = "#665cbe"; - var Pocket = "#ee4056"; - var Prezi = "#318bff"; - var Pusha = "#0f71b4"; - var Quora = "#a82400"; - var Rdio = "#008fd5"; - var Readability = "#9c0000"; - var Resource = "#7eb400"; - var Rockpack = "#0ba6ab"; - var Roon = "#62b0d9"; - var RSS = "#ee802f"; - var Salesforce = "#1798c1"; - var Samsung = "#0c4da2"; - var Shopify = "#96bf48"; - var Skype = "#00aff0"; - var Snagajob = "#f47a20"; - var Softonic = "#008ace"; - var SoundCloud = "#ff7700"; - var Spotify = "#81b71a"; - var Sprint = "#fee100"; - var Squarespace = "#121212"; - var StackOverflow = "#ef8236"; - var Staples = "#cc0000"; - var Stripe = "#008cdd"; - var StudyBlue = "#00afe1"; - var StumbleUpon = "#f74425"; - var Technorati = "#40a800"; - var Treehouse = "#5cb868"; - var Trulia = "#5eab1f"; - var Tumblr = "#34526f"; - var Twitter = "#00acee"; - var TYPO3 = "#ff8700"; - var Ubuntu = "#dd4814"; - var Ustream = "#3388ff"; - var Verizon = "#ef1d1d"; - var Vimeo = "#86c9ef"; - var Vine = "#00a478"; - var Virb = "#06afd8"; - var Wooga = "#5b009c"; - var Wunderlist = "#2b88d9"; - var XBOX = "#9bc848"; - var XING = "#126567"; - var Yandex = "#ffcc00"; - var Yelp = "#c41200"; - var YouTube = "#c4302b"; - var Zalongo = "#5498dc"; - var Zendesk = "#78a300"; - var Zerply = "#9dcc7a"; - var Zootool = "#5e8b1d"; - var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool - }; - - /* global document */ - let { _adSize, _screenSize, _videoSize } = size; - const _brandNames = Object.keys(_brandColors); - - /* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - function image(...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ""); - background = (background || hex()).replace(/^#/, ""); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; - } - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - function dataImage(size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); - } - - /* - ## Address - */ - var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - - // 随机生成一个大区。 - function region() { - return pick(REGION); - } - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - function province() { - return pick(DICT_FIXED).name; - } - // 随机生成一个(中国)市。 - function city(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; - } - // 随机生成一个(中国)县。 - function county(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - var county = pick(city) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; - } - // 随机生成一个邮政编码(六位数字)。 - function zip(len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; - } - - // 用于生成 Blob 和 File 型数据的工具 - function prepare(anyData) { - let prepared; - switch (type$1(anyData)) { - case "array": - prepared = anyData; - default: - prepared = [anyData]; - } - return prepared; - } - function genFile(anyData) { - return new File(prepare(anyData), word()); - } - function genBlob() { - return new Blob(prepare(anyData)); - } - - /* - ## Mock.Random - - 工具类,用于生成各种随机数据。 - */ - - var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - float: float, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range$1, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip, - genFile: genFile, - genBlob: genBlob - }); - - /* - ## Constant - - 常量集合。 - */ - /* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 - */ - var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ - }; - - /* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - /* jshint -W041 */ - function parser$1(name = "") { - if (typeof name !== "string") name = name + ""; - var parameters = name.match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - } - - function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { - var result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - }); - } - } - } - return result; - } - - function boolean({ rule: { max, min, parameters }, template = "" }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; - } - - function _function(options) { - let { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); - } - - function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { - var result; - if (decimal) { - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { - result = float(min, max, dmin, dmax); // 内置字符串转数字 - }); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; - } - - function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - var result = {}, - keys = [], - fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (let key in template) { - (typeof template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - let inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type$1(template[key]) === "number") { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; - } - - // https://github.com/nuysoft/regexp - - function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); - } - - function Alternate(n, l) { - Token.call(this, "alternate"), (this.left = n), (this.right = l); - } - - function Match(n) { - Token.call(this, "match"), (this.body = n.filter(Boolean)); - } - - function Group(n, l) { - Token.call(this, n), (this.body = l); - } - - function CaptureGroup(n) { - Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); - } - - function Quantified(n, l) { - Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); - } - - function Quantifier(n, l) { - Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); - } - - function CharSet(n, l) { - Token.call(this, "charset"), (this.invert = n), (this.body = l); - } - - function CharacterRange(n, l) { - Token.call(this, "range"), (this.start = n), (this.end = l); - } - - function Literal(n) { - Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); - } - - function Unicode(n) { - Token.call(this, "unicode"), (this.code = n.toUpperCase()); - } - - function Hex(n) { - Token.call(this, "hex"), (this.code = n.toUpperCase()); - } - - function Octal(n) { - Token.call(this, "octal"), (this.code = n.toUpperCase()); - } - - function BackReference(n) { - Token.call(this, "back-reference"), (this.code = n.toUpperCase()); - } - - function ControlCharacter(n) { - Token.call(this, "control-character"), (this.code = n.toUpperCase()); - } - - var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, "\\\\") - .replace(/"/g, '\\"') - .replace(/\x08/g, "\\b") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\f/g, "\\f") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return "\\x0" + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return "\\x" + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return "\\u0" + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; - } - (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - "\n" === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : "\r" === e || "\u2028" === e || "\u2029" === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), - null === t && (t = al), - null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function s() { - var l, u; - return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function h() { - var n, l, u; - return ( - (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), - null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function g() { - var l, u; - return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function b() { - var l, u; - return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) - for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) - if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function M() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function D() { - var l, u; - return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function H() { - var l, u; - return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function O() { - var l, u; - return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function W() { - var l, u; - return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function z() { - var l, u; - return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function I() { - var l, u; - return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function J() { - var l, u; - return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function K() { - var l, u; - return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function N() { - var l, u; - return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function P() { - var l, u; - return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function V() { - var l, u; - return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function X() { - var l, u; - return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { - if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) - for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = "", - fl = "|", - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = "^", - vl = '"^"', - wl = function () { - return new Token("start"); - }, - Al = "$", - Cl = '"$"', - gl = function () { - return new Token("end"); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = "Quantifier", - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = "{", - yl = '"{"', - ml = ",", - Rl = '","', - Fl = "}", - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ",}", - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = "+", - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = "*", - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = "?", - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = "[0-9]", - Jl = function (n) { - return +n.join(""); - }, - Kl = "(", - Nl = '"("', - Pl = ")", - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = "?:", - _l = '"?:"', - nu = function (n) { - return new Group("non-capture-group", n); - }, - lu = "?=", - uu = '"?="', - tu = function (n) { - return new Group("positive-lookahead", n); - }, - ru = "?!", - eu = '"?!"', - ou = function (n) { - return new Group("negative-lookahead", n); - }, - cu = "CharacterSet", - iu = "[", - au = '"["', - fu = "]", - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = "CharacterRange", - pu = "-", - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = "Character", - Cu = /^[^\\\]]/, - gu = "[^\\\\\\]]", - bu = function (n) { - return new Literal(n); - }, - ku = ".", - Tu = '"."', - xu = function () { - return new Token("any-character"); - }, - yu = "Literal", - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = "[^|\\\\\\/.[()?+*$\\^]", - Fu = "\\b", - Qu = '"\\\\b"', - Su = function () { - return new Token("backspace"); - }, - Uu = function () { - return new Token("word-boundary"); - }, - Eu = "\\B", - Gu = '"\\\\B"', - Bu = function () { - return new Token("non-word-boundary"); - }, - ju = "\\d", - $u = '"\\\\d"', - qu = function () { - return new Token("digit"); - }, - Lu = "\\D", - Mu = '"\\\\D"', - Du = function () { - return new Token("non-digit"); - }, - Hu = "\\f", - Ou = '"\\\\f"', - Wu = function () { - return new Token("form-feed"); - }, - zu = "\\n", - Iu = '"\\\\n"', - Ju = function () { - return new Token("line-feed"); - }, - Ku = "\\r", - Nu = '"\\\\r"', - Pu = function () { - return new Token("carriage-return"); - }, - Vu = "\\s", - Xu = '"\\\\s"', - Yu = function () { - return new Token("white-space"); - }, - Zu = "\\S", - _u = '"\\\\S"', - nt = function () { - return new Token("non-white-space"); - }, - lt = "\\t", - ut = '"\\\\t"', - tt = function () { - return new Token("tab"); - }, - rt = "\\v", - et = '"\\\\v"', - ot = function () { - return new Token("vertical-tab"); - }, - ct = "\\w", - it = '"\\\\w"', - at = function () { - return new Token("word"); - }, - ft = "\\W", - st = '"\\\\W"', - ht = function () { - return new Token("non-word"); - }, - dt = "\\c", - pt = '"\\\\c"', - vt = "any character", - wt = function (n) { - return new ControlCharacter(n); - }, - At = "\\", - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = "[1-9]", - kt = function (n) { - return new BackReference(n); - }, - Tt = "\\0", - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = "[0-7]", - Rt = function (n) { - return new Octal(n.join("")); - }, - Ft = "\\x", - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = "[0-9a-fA-F]", - Et = function (n) { - return new Hex(n.join("")); - }, - Gt = "\\u", - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join("")); - }, - $t = function () { - return new Token("null-character"); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - - /* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ - /* - - */ - var Handler$2 = { - extend: extend, - }; - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart - /*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] - }*/ - - // ASCII printable code chart - // var LOWER = 'abcdefghijklmnopqrstuvwxyz' - // var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - // var NUMBER = '0123456789' - // var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' - var LOWER = ascii(97, 122); - var UPPER = ascii(65, 90); - var NUMBER = ascii(48, 57); - var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) - var PRINTABLE = ascii(32, 126); - var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; - var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); - } - return result; - })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, - }; - - // 从 from 到 to 包含两个端点的字符串 - function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); - } - - // var ast = RegExpParser.parse(regexp.source) - Handler$2.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); - }; - - Handler$2.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": - return character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO - break; - case "digit": - return pick(NUMBER.split("")); - case "non-digit": - return pick((LOWER + UPPER + OTHER).split("")); - case "form-feed": - break; - case "line-feed": - return node.body || node.text; - case "carriage-return": - break; - case "white-space": - return pick(SPACE.split("")); - case "non-white-space": - return pick((LOWER + UPPER + NUMBER).split("")); - case "tab": - break; - case "vertical-tab": - break; - case "word": // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return pick(OTHER.replace("_", "").split("")); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ""; - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - "capture-group": function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - "non-capture-group": function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - "positive-lookahead": function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - "negative-lookahead": function (node, result, cache) { - // node.body - return ""; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ""; - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); - - // node.body [] - var literal = pick(node.body); - return this.gen(literal, result, cache); - }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); - break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); - } - } - } - } - return pick(pool.split("")); - }, - range: function (node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " - ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - "control-character": function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, - }); - - var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$2 - }); - - function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - let Source = count === undefined ? source : Array(count).fill(source).join(""); - return Handler$2.gen(parser.parse(Source)); - } - - function getValueByKeyPath(key, options) { - var originalKey = key; - var keyPathParts = splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); - } - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - function normalizePath(pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - } - function splitPathToArray(path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; - } - - // 占位符即是字符串函数的意思 - function placeholder(Placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(Placeholder); - - var lkey = key && key.toLowerCase(), - pathParts = splitPathToArray(key); - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - params = params.split(/\s*,\s*/); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return Placeholder; - - // 递归解析参数中的占位符 - params = params.map((param) => { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(param)) { - return placeholder(param, obj, templateContext, options); - } - return param; - }); - - var handle = Random[key] || Random[lkey]; - switch (type$1(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - } - - function string(options) { - let { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = "", - } = options; - var result = ""; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(""); - - // 'email|1-10': '@EMAIL, ', - let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - let phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - if (isNumeric(phed)) { - result = parseFloat(phed, 10); - return true; - } - if (/^(true|false)$/.test(phed)) { - result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 - return true; - } // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; - } - - var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string - }); - - let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 - function gen(template, name = "", context = {}) { - var newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var type = type$1(template); - let func = typeset[type]; - var data; - - if (func) { - data = func({ - // 属性值类型 - type, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; - } - - /* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - - */ - /* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot - */ - var Handler$1 = { - gen, - extend, - }; - Handler$1.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, - }); - Handler$1.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, - }); - - /* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - - function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - var result = { - name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, - template, - type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? "ROOT" : result.name); - - switch (result.type) { - case "array": - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case "object": - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; - } - - /* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) - */ - - function valid(template, data) { - var schema = toJSONSchema(template); - var result = Diff.diff(schema, data); - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; - } - - /* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 - */ - var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - var result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - var length = result.length; - - Assert.equal("name", schema.path, name + "", schema.name + "", result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - var length = result.length; - - switch (schema.type) { - case "string": - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case "array": - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case "function": - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal("type", schema.path, type$1(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var templateType = schema.type; - if (templateType === "object" || templateType === "array" || templateType === "function") return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case "regexp": - Assert.match("value", schema.path, data, schema.template, result); - return result.length === length; - case "string": - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal("value", schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - var actualRepeatCount; - switch (templateType) { - case "number": - var parts = (data + "").split("."); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case "boolean": - break; - - case "string": - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case "regexp": - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (var i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - var property; - each(schema.properties, function (item /*, index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i] - ) - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - var length = result.length; - - if (!schema.items) return; - - var rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("items length", schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - "items", - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" - ); - Assert.lessThanOrEqualTo( - "items", - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (var i = 0; i < data.length; i++) { - result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); - } - - return result.length === length; - }, - }; - - /* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - - */ - var Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace("{utype}", item.type.toUpperCase()) - .replace("{ltype}", item.type.toLowerCase()) - .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) - .replace("{action}", item.action) - .replace("{expected}", item.expected) - .replace("{actual}", item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case "type": - // 正则模板 === 字符串最终值 - if (expected === "regexp" && actual === "string") return true; - break; - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "matches", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is not equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - }; - - valid.Diff = Diff; - valid.Assert = Assert; - - // 集中管理 mocked 的 url - - const _mocked = { - $set(value) { - this[value.rurl + value.rtype.toLowerCase()] = value; - }, - $delete(key) { - delete this[key]; - }, - }; - - // 查找与请求参数匹配的数据模板:URL,Type - function find({ url, type }) { - type = type.toLowerCase(); - for (var sUrlType in _mocked) { - var item = _mocked[sUrlType]; - let { rurl, rtype } = item; - if (match(rurl, url) && match(rtype, type)) { - // console.log('[mock]', url, '>', item.rurl) - return item; - } - } - return false; - } - - function match(expected, actual) { - switch (type$1(expected)) { - case "string": - return expected === actual; - case "regexp": - return expected.test(actual); - default: - return false; - } - } - - // 数据模板 => 响应数据 - function convert({ template }, options) { - return isFunction(template) ? template(options) : gen(template); - } - - /** - * Check if `obj` is a URLSearchParams object - * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 - * - * @param {*} obj - * @return {boolean} - */ - const isURLSearchParameters = (object) => { - return ( - typeof object === "object" && - typeof object.append === "function" && - typeof object.delete === "function" && - typeof object.get === "function" && - typeof object.getAll === "function" && - typeof object.has === "function" && - typeof object.set === "function" && - typeof object.sort === "function" && - object[Symbol.toStringTag] === "URLSearchParams" // 获取类名的方式哦 - ); - }; - - const BODY = Symbol("Body internals"); - const RESPONSE = Symbol("Response internals"); - - /** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ - async function consumeBody(data) { - // 标记为已经使用 - if (data.disturbed) { - throw new TypeError(`body used already for: ${data.url}`); - } - data.disturbed = true; - - // 报错 - if (data.error) { - throw data.error; - } - - if (data.body instanceof FormData) { - return new Blob([Object.fromEntries(a.entries())]); - } - return data.body; - } - - /** - * Body.js - * - * Body interface provides common methods for Request and Response - */ - /** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ - class Body { - constructor(body, { size = 0 } = {}) { - if (body === null) { - // Body is undefined or null - body = new Blob([]); - } else if (isURLSearchParameters(body)) { - // Body is a URLSearchParams - body = new Blob([body]); - } else if (ArrayBuffer.isView(body)) { - // Body is ArrayBufferView - body = new Blob([body]); - } else { - body = new Blob([JSON.stringify(body)]); - } - - this[BODY] = { - body, - boundary: null, - disturbed: false, - error: null, - }; - this.size = size; - } - - get body() { - return this[BODY].body; - } - - get bodyUsed() { - return this[BODY].disturbed; - } - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - async arrayBuffer() { - const blob = await consumeBody(this[BODY]); - return blob.arrayBuffer(); - } - - /** - * Return raw response as Blob - * - * @return Promise - */ - async blob() { - return consumeBody(this[BODY]); - } - - /** - * Decode response as json - * - * @return Promise - */ - async json() { - const text = await this.text(); - return JSON.parse(text || "{}"); - } - - /** - * Decode response as text - * - * @return Promise - */ - async text() { - const blob = await consumeBody(this[BODY]); - return blob.text(); - } - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - } - - // In browsers, all properties are enumerable. - Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true }, - }); - - /** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present. - * - * @param {any} body Any options.body input - * @returns {string | null} - */ - const extractContentType = (body, request) => { - // Body is null or undefined - if (body === null) { - return null; - } - - // Body is string - if (typeof body === "string") { - return "text/plain;charset=UTF-8"; - } - - // Body is a URLSearchParams - if (isURLSearchParameters(body)) { - return "application/x-www-form-urlencoded;charset=UTF-8"; - } - - // Body is blob - if (body instanceof Blob) { - return body.type || null; - } - - if (body instanceof FormData) { - return `multipart/form-data; boundary=${request[INTERNALS].boundary}`; - } - - // Body constructor defaults other things to string - return "text/plain;charset=UTF-8"; - }; - - const redirectStatus = new Set([301, 302, 303, 307, 308]); - - /** - * Redirect code matching - * - * @param {number} code - Status code - * @return {boolean} - */ - const isRedirect = code => { - return redirectStatus.has(code); - }; - - /** - * Response.js - * - * Response class provides content decoding - */ - /** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ - class fakeResponse extends Body { - constructor(body = null, options = {}) { - super(body, options); - const status = options.status != null ? options.status : 200; - const headers = new Headers(options.headers); - if (body !== null && !headers.has("Content-Type")) { - const contentType = extractContentType(body); - if (contentType) { - headers.append("Content-Type", contentType); - } - } - this[RESPONSE] = { - type: "default", - url: options.url, - status, - statusText: options.statusText || "", - headers, - counter: options.counter, - }; - } - - get type() { - return this[RESPONSE].type; - } - - get url() { - return this[RESPONSE].url || ""; - } - - get status() { - return this[RESPONSE].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; - } - - get redirected() { - return this[RESPONSE].counter > 0; - } - - get statusText() { - return this[RESPONSE].statusText; - } - - get headers() { - return this[RESPONSE].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - // Don't allow cloning a used body - if (bodyUsed) { - throw new Error("cannot clone body after it is used"); - } - return new Response(this.body, { - type: this.type, - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected, - size: this.size, - }); - } - - /** - * @param {string} url The URL that the new response is to originate from. - * @param {number} status An optional status code for the response (e.g., 302.) - * @returns {Response} A Response object. - */ - static redirect(url, status = 302) { - if (!isRedirect(status)) { - throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); - } - - return new Response(null, { - headers: { - location: new URL(url).toString(), - }, - status, - }); - } - - static error() { - const response = new Response(null, { status: 0, statusText: "" }); - response[RESPONSE].type = "error"; - return response; - } - - get [Symbol.toStringTag]() { - return "Response"; - } - } - - Object.defineProperties(Response.prototype, { - type: { enumerable: true }, - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true }, - }); - - var realFetch = window.fetch; - function mockFetch() { - // 代理 fetch 的初始化函数 - if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { - window.fetch = fakeFetch; - window.fetch.$mock = true; - console.warn("fetch 已经被代理"); - } - } - - async function fakeFetch(url, options = {}) { - if (window.fetch.$mock === true) { - // 只有在 $mock 标记为 true 时才进行代理 - let result = find({ - url, - type: (options.method || "get").toLowerCase(), - }); - if (result) { - const data = convert(result, {}); - console.warn("mock代理中"); - return new fakeResponse(data, options); - } - } - - console.warn("未使用 mockjs"); - return realFetch(url, options); - } - - var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", - }; - - // 使用不完全覆盖的方式,使用继承方式继承所有的属性 - - let SEND = XMLHttpRequest.prototype.send; - const OPEN = XMLHttpRequest.prototype.open; - - //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - - class MockXMLHttpRequest extends XMLHttpRequest { - constructor() { - super(...arguments); - } - _send = SEND; - _open = OPEN; - open(method, url, async, username, password) { - // 不进行同步操作 - this._open(method, url, true, username, password); - this.$url = url; - this.$type = method.toLowerCase(); - } - send(body) { - if (this.$mock) { - this.$template = find({ url: this.$url, type: this.$type }); - if (this.$template) { - this.dispatchEvent(new Event("loadstart")); - setTimeout(this.$done.bind(this), this.$timeout); - return null; - } - } - this._send(body); - } - get mock() { - return this.$mock; - } - set mock(value) { - if (typeof value === "boolean") this.$mock = value; - } - - $type = "get"; - $url = ""; - $mock = true; - $timeout = 1000; - $data = null; - $template = null; - - $done() { - this.readyState = this.HEADERS_RECEIVED; - this.dispatchEvent(new Event("readystatechange")); - this.readyState = this.LOADING; - this.dispatchEvent(new Event("readystatechange")); - - this.status = 200; - this.statusText = HTTP_STATUS_CODES[200]; - this.$data = convert(this.$template, {}); - this.response = JSON.stringify(this.$data, null, 4); - this.responseText = this.response; - this.readyState = this.DONE; - this.dispatchEvent(new Event("readystatechange")); - this.dispatchEvent(new Event("load")); - this.dispatchEvent(new Event("loadend")); - } - - // 原生属性的 getter 和 setter - $readyState = 0; - $status = 200; - $response = ""; - $responseText = ""; - $statusText = ""; - set readyState(state) { - this.$readyState = state; - } - get readyState() { - return this.$readyState; - } - set status(code) { - this.$status = code; - } - get status() { - return this.$status; - } - set statusText(code) { - this.$statusText = code; - } - get statusText() { - return this.$statusText; - } - - get response() { - return this.$response; - } - set response(code) { - this.$response = code; - } - set responseText(code) { - this.$responseText = code; - } - get statusText() { - return this.$statusText; - } - } - - // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 - typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 - - /* global require, module, window */ - - var XHR; - if (typeof window !== "undefined") XHR = MockXMLHttpRequest; - - /*! +/** + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!R(e)}function oe(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ie(e){return f(e)&&"[object Arguments]"==s(e)}var ce=Object.prototype,he=ce.hasOwnProperty,se=ce.propertyIsEnumerable,fe=ie(function(){return arguments}())?ie:function(e){return f(e)&&he.call(e,"callee")&&!se.call(e,"callee")};var me="object"==typeof exports&&exports&&!exports.nodeType&&exports,de=me&&"object"==typeof module&&module&&!module.nodeType&&module,pe=de&&de.exports===me?t.Buffer:void 0,be=(pe?pe.isBuffer:void 0)||function(){return!1},xe={};function ge(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ve="object"==typeof exports&&exports&&!exports.nodeType&&exports,ye=ve&&"object"==typeof module&&module&&!module.nodeType&&module,we=ye&&ye.exports===ve&&e.process,ke=function(){try{var e=ye&&ye.require&&ye.require("util").types;return e||we&&we.binding&&we.binding("util")}catch(e){}}(),Ae=ke&&ke.isTypedArray,Ce=Ae?ge(Ae):function(e){return f(e)&&re(e.length)&&!!xe[s(e)]},Me=Object.prototype.hasOwnProperty;function je(e,n){var t=p(e),r=!t&&fe(e),a=!t&&!r&&be(e),o=!t&&!r&&!a&&Ce(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Fe.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=ln();return un(e+a*(n-e+on("1e-"+((a+"").length-1))),n)}return an(e,n)}var hn=Math.ceil,sn=Math.max;var fn,mn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=sn(hn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=cn(t,r,!1);return parseFloat(cn(e,n,!0).toFixed(a))},Rn=function(e,n,t){ +//! cur:boolean 是划分概率的一个启动符号 +return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},$n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function _n(e,n){return e(n={exports:{}},n.exports),n.exports}var Dn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=_n((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=_n((function(e){var n={};for(var t in Dn)Dn.hasOwnProperty(t)&&(n[Dn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Dn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=qn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=qn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=qn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=qn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=qn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=_n((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Nn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Jn=["keyword","gray","hex"],Wn={};Object.keys(Un).forEach((function(e){Wn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Jn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Wn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Wn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Jn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return $t(_t(),e)}function $t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function _t(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let Dt=0;const qt=function(e){return Dt+=+e||1},Pt=qt;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Nt())).join(""))+"."}function Nt(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Ht(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Jt(e){return`${Nt()}.${e||Wt()}`}function Wt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:$n,str:$n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+$n("number",3);for(var r=0;rLt()))},word:Nt,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Nt()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Ht,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},cword:It,protocol:Gt,domain:Jt,tld:Wt,email:function(e){return`${Fn("lower")}.${Nt()}@${e||Nt()+"."+Wt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Jt()}/${Nt()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:$t,_randomDate:_t,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return $t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?_t(e,n).getTime():_t().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Nt())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Wr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Wr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},$e=function(e){return new xr(e,e)},_e="+",De='"+"',qe=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new sr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new sr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new sr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new wr(e.join(""))},qt=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+$r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt(Dr.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt($r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Hr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Nr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Wr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?$n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Jr=1;function Wr(e,n="",t={}){var r={path:t.path||[Jr],templatePath:t.templatePath||[Jr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Wr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Nr,normalizePath:Hr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Wr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; +//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 +class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa,this.$data=ta(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get statusText(){return this.$statusText}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) +/*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com @@ -14905,68 +61,4 @@ var Mock = (function () { 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ - */ - var Mock = { - Handler: Handler$1, - Random, - Util, - XHR, - RE, - toJSONSchema, - valid, - heredoc: heredoc, - setup: function (settings) { - return XHR.setup(settings); - }, - _mocked, - }; - - Mock.version = "1.1.1-es6"; - - // 避免循环依赖 - if (XHR) XHR.Mock = Mock; - - /* - * Mock.mock( template ) - * Mock.mock( function() ) - * Mock.mock( rurl, template ) - * Mock.mock( rurl, function(options) ) - * Mock.mock( rurl, rtype, template ) - * Mock.mock( rurl, rtype, function(options) ) - - 根据数据模板生成模拟数据。 - */ - Mock.mock = function (...args) { - let rurl, - rtype = "get", - template; - - switch (args.length) { - case 1: - // Mock.mock(template) - [template] = args; - return Handler$1.gen(template); - // 2 和 3 switch 穿透 - case 2: - // Mock.mock(rurl, template) - [rurl, template] = args; - break; - case 3: - // Mock.mock(rurl,rtype, template) - [rurl, rtype, template] = args; - break; - } - - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - _mocked.$set({ - rurl, - rtype, - template, - }); - return Mock; - }; - - return Mock; - -}()); + */;var xa={Handler:Kr,Random:rr,Util:Cn,XHR:ba,RE:zr,toJSONSchema:Yr,valid:Vr,heredoc:kn,setup:function(e){return ba.setup(e)},_mocked:Qr,version:"1.1.1-es6"};return ba&&(ba.Mock=xa),xa.mock=function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Kr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return ba&&(window.XMLHttpRequest=ba),Qr.$set({rurl:n,rtype:r,template:t}),xa},xa}(); diff --git a/dist/mock.js b/dist/mock.js index f5c2a0be..87ee7062 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -1,14899 +1,58 @@ - -(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** Built-in value references. */ -var Symbol$1 = root.Symbol; - -/** Used for built-in method references. */ -var objectProto$8 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString$1 = objectProto$8.toString; - -/** Built-in value references. */ -var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$7 = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto$7.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** Used as references for various `Number` constants. */ -var INFINITY$1 = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; -} - -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** Used for built-in method references. */ -var funcProto$1 = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$1 = funcProto$1.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$1 = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** Used for built-in method references. */ -var objectProto$5 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$1 = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** Used for built-in method references. */ -var objectProto$4 = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** `Object#toString` result references. */ -var argsTag$1 = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; -} - -/** Used for built-in method references. */ -var objectProto$3 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/** Detect free variable `exports`. */ -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - -/** Built-in value references. */ -var Buffer = moduleExports$1 ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = -typedArrayTags[setTag] = typedArrayTags[stringTag$1] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** Used for built-in method references. */ -var objectProto$2 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -/** Used for built-in method references. */ -var objectProto$1 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ$1 = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -/** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ -var upperFirst = createCaseFirst('toUpperCase'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); -} - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); -} - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; -} - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); -} - -/** Built-in method references without a dependency on `root`. */ -var freeParseFloat = parseFloat; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min, - nativeRandom = Math.random; - -/** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ -function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range$1 = createRange(); - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); -} - -/** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ -function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); -} - -// 使用 lodash 提供的方式 -function type$1(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); -} - -function isObjectOrArray(value) { - return isObject(value) || isArray(value); -} - -function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); -} - -// import { isObject, isArray } from "./type.js"; -function extend(...args) { - return assignIn(this, ...args); -} - -function each(obj, iterator, context) { - // each - var i, key; - if (type(obj) === "number") { - //表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } -} - -/* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 -*/ -function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, "") - .replace(/\*\/[^\/]+$/, "") - .replace(/^[\s\xA0]+/, "") - .replace(/[\s\xA0]+$/, ""); // .trim() -} - -/* - ## Utilities -*/ -function keys(obj) { - return Object.keys(obj); -} -function values(obj) { - return Object.values(obj); -} -function noop() {} - -var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type$1, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc -}); - -const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); -}; -const numberGate = function (input) { - if (isNumber(input)) return input; - let res = parseInt(input); - return isNumber(res) ? res : undefined; -}; -// 返回一个随机的整数。 -const integer = function (min, max) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - return random(min, max, false); -}; -const natural = function (min, max) { - return Math.abs(integer(min, max)); -}; - -const float = function (min, max, dmin, dmax) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - dmin = numberGate(dmin) || 1; - dmax = numberGate(dmax) || 17; - if (dmin < 1) dmin = 1; - if (dmax > 17) dmax = 17; - let dcount = random(dmin, dmax, false); - return parseFloat(random(min, max, true).toFixed(dcount)); -}; - -const boolean$1 = function (min, max, cur) { - //! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; -}; - -const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", -}; -pools.alpha = pools.lower + pools.upper; -pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - -const character = function (pool = "default") { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return pool.charAt(natural(0, pool.length - 1)); -}; - -const string$1 = function (...args) { - var len, pool, min, max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof arguments[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return [...Array(len).keys()].map(() => character(pool)).join(""); -}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); -}; - -var simpleSwizzle = createCommonjsModule(function (module) { - - - -var concat = Array.prototype.concat; -var slice = Array.prototype.slice; - -var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; -}; - -swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; -}; -}); - -var colorString = createCommonjsModule(function (module) { -/* MIT license */ - - - -var reverseNames = {}; - -// create a list of reverse color names -for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } -} - -var cs = module.exports = { - to: {}, - get: {} -}; - -cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; -}; - -cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; -}; - -cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; -}; - -cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; -}; - -cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); -}; - -cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; -}; - -cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; -}; - -cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; -}; - -// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax -// (hwb have alpha optional & 1 is default value) -cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; -}; - -cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; -}; - -// helpers -function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); -} - -function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; -} -}); -colorString.to; -colorString.get; - -var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var conversions = createCommonjsModule(function (module) { -/* MIT license */ - - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -var reverseKeywords = {}; -for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } -} - -var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -// hide .channels and .labels properties -for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } -} - -convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -/** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ -function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); -} - -convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return colorName[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; -}); -conversions.rgb; -conversions.hsl; -conversions.hsv; -conversions.hwb; -conversions.cmyk; -conversions.xyz; -conversions.lab; -conversions.lch; -conversions.hex; -conversions.keyword; -conversions.ansi16; -conversions.ansi256; -conversions.hcg; -conversions.apple; -conversions.gray; - -/* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - -var convert$1 = {}; - -var models = Object.keys(conversions); - -function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -var colorConvert = convert$1; - -var _slice = [].slice; - -var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' -]; - -var hashedModelKeys = {}; -Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; -}); - -var limiters = {}; - -function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } -} - -Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } -}; - -// model conversion methods and static constructors -Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; -}); - -function roundTo(num, places) { - return Number(num.toFixed(places)); -} - -function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; -} - -function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; -} - -function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; -} - -function assertArray(val) { - return Array.isArray(val) ? val : [val]; -} - -function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; -} - -var color$1 = Color; - -/* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) -*/ -var DICT$1 = { - // name value nicer - navy: { - value: "#000080", - nicer: "#001F3F", - }, - blue: { - value: "#0000ff", - nicer: "#0074D9", - }, - aqua: { - value: "#00ffff", - nicer: "#7FDBFF", - }, - teal: { - value: "#008080", - nicer: "#39CCCC", - }, - olive: { - value: "#008000", - nicer: "#3D9970", - }, - green: { - value: "#008000", - nicer: "#2ECC40", - }, - lime: { - value: "#00ff00", - nicer: "#01FF70", - }, - yellow: { - value: "#ffff00", - nicer: "#FFDC00", - }, - orange: { - value: "#ffa500", - nicer: "#FF851B", - }, - red: { - value: "#ff0000", - nicer: "#FF4136", - }, - maroon: { - value: "#800000", - nicer: "#85144B", - }, - fuchsia: { - value: "#ff00ff", - nicer: "#F012BE", - }, - purple: { - value: "#800080", - nicer: "#B10DC9", - }, - silver: { - value: "#c0c0c0", - nicer: "#DDDDDD", - }, - gray: { - value: "#808080", - nicer: "#AAAAAA", - }, - black: { - value: "#000000", - nicer: "#111111", - }, - white: { - value: "#FFFFFF", - nicer: "#FFFFFF", - }, -}; - -/* - ## Helpers -*/ - -const upper = function (str) { - return (str + "").toUpperCase(); -}; - -const lower = function (str) { - return (str + "").toLowerCase(); -}; - -// 从数组中随机选取一个元素,并返回。 -// 更改 pick 函数 , 函数不进行重载 -const pick = function (arr, min, max) { - // pick( [ item1, item2 ... ] ) - if (min === undefined && max === undefined) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - if (min !== undefined && max !== undefined) return shuffle(arr, min, max); - // pick( [ item1, item2 ... ], count ) - return shuffle(arr, 0, min); -}; -/* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. -*/ -const shuffle = function (arr, min, max) { - let result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(min, max); - } -}; -/* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ -const Cache = {}; -const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); - - var cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; -}; - -var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } -]; - -/* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() -*/ - -let _hue; -function _goldenRatioColor(saturation, value) { - let _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); -} - -// 中国色 数据来自于 http://zhongguose.com - -// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 -function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; -} - -// #DAC0DE -function hex() { - var hsv = _goldenRatioColor(); - return hsv.hex(); -} - -// rgb(128,255,255) -function rgb() { - var hsv = _goldenRatioColor(); - return hsv.hsv().string(); -} -// rgba(128,255,255,0.3) -function rgba() { - var hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); -} - -// hsl(300,80%,90%) -function hsl() { - var hsv = _goldenRatioColor(); - return hsv.hsl().string(); -} - -var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] -}; -var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" -]; -var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" -]; -var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" -]; -var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 -}; - -/* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) -*/ -let { firstName, lastName, cfirstName, clastName } = Name; - -// 随机生成一个常见的英文名。 -function first() { - var names = firstName.male.concat(); - return pick(names); -} - -// 随机生成一个常见的英文姓。 -function last() { - return pick(lastName); -} - -// 随机生成一个常见的英文姓名。 -function name(middle) { - middle = middle ? ` ${first()} ` : " "; - return `${first()}${middle}${last()}`; -} - -/* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) -*/ -function cfirst() { - return pick(cfirstName); -} /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) -*/ -function clast() { - return pick(clastName); -} -// 随机生成一个常见的中文姓名。 -function cname() { - return cfirst() + clast(); -} - -// Unique ID creation requires a high quality random # generator. In the browser we therefore -// require the crypto API and do not support built-in fallback to lower quality random number -// generators (like Math.random()). -var getRandomValues; -var rnds8 = new Uint8Array(16); -function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); -} - -var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - -function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); -} - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -var byteToHex = []; - -for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); -} - -var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" -}; - -/* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 -*/ - -// id pid/parentId name children - -// 将扁平数组转化为树状 -function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - //父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - } - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; -} -const ids = Object.keys(DICT); - -// 转化数组内对象的表现形式 -const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + "0000"; - } - return { - id, - pid, - name: value, - }; -}); - -const DICT_FIXED = createTree(fixed); - -var _patternLetters = { - yyyy: "getFullYear", - yy: function (date) { - return ("" + date.getFullYear()).slice(2); - }, - y: "yy", - - MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; - }, - d: "getDate", - - HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; - }, - H: "getHours", - hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; - }, - m: "getMinutes", - - ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; - }, - s: "getSeconds", - - SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; - }, - S: "getMilliseconds", - - A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; - }, - a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; - }, - T: "getTime", -}; - -/* - ## Date -*/ - -const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); - -// 返回一个随机的日期字符串。 -function date(format = "yyyy-MM-dd") { - return _formatDate(_randomDate(), format); -} -function datetime(format = "yyyy-MM-dd HH:mm:ss") { - return date(format); -} -function time(format = "HH:mm:ss") { - return date(format); -} -function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ""; - } - } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; - - var date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case "year": - date.setMonth(0); - case "month": - date.setDate(1); - case "week": - case "day": - date.setHours(0); - case "hour": - date.setMinutes(0); - case "minute": - date.setSeconds(0); - case "second": - date.setMilliseconds(0); - } - switch (unit) { - case "week": - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); -} - -function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); - }); -} - -function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); -} - -function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); -} - -/* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) -*/ -function id() { - var id, - sum = 0, - rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], - last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; - - id = pick(DICT_FIXED).id + date("yyyyMMdd") + string$1("number", 3); - - for (var i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; -} - -/* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ -function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); -} - -/* - ## Miscellaneous -*/ - -/* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 -*/ -let key = 0; -const increment = function (step) { - return (key += +step || 1); -}; -const inc = increment; - -// Dice -function d4() { - return this.natural(1, 4); -} -function d6() { - return this.natural(1, 6); -} -function d8() { - return this.natural(1, 8); -} -function d12() { - return this.natural(1, 12); -} -function d20() { - return this.natural(1, 20); -} -function d100() { - return this.natural(1, 100); -} - -function range(defaultMin, defaultMax, min, max) { - return min === undefined - ? natural(defaultMin, defaultMax) // () - : max === undefined - ? min // ( len ) - : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) -} - -// 随机生成一个句子,第一个单词的首字母大写。 -function sentence(min, max) { - var len = range(12, 18, min, max); - let string = [...Array(len)].map(() => word()).join(""); - return capitalize(string) + "."; -} - -// 随机生成一个单词。 -function word(min, max) { - var len = range(3, 10, min, max); - return [...Array(len)].map(() => character("lower")).join(""); -} - -// 随机生成一段文本。 -function paragraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map((i) => sentence()); -} - -// 随机生成一句标题,其中每个单词的首字母大写。 -function title(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => capitalize(word())).join(""); -} - -function cparagraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => csentence()).join(""); -} - -// 随机生成一个中文句子。 -function csentence(min, max) { - var len = range(12, 18, min, max); - return [...Array(len)].map(() => cword()).join("") + "。"; -} -// 随机生成一句中文标题。 -function ctitle(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => cword()).join(""); -} -// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm -const DICT_HANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; -// 随机生成一个或多个汉字。 -function cword(...args) { - var len = 1, - pool = DICT_HANZI, - min, - max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === "string") { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === "string") { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - const poolLength = pool.length; - if (len === 1) return pool.charAt(natural(0, poolLength)); - - return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); -} - -// 协议簇 -const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); -const tlds = // 域名后缀 -( - "com net org edu gov int mil cn " + - // 国内域名 - "com.cn net.cn gov.cn org.cn " + - // 中文国内域名 - "中国 中国互联.公司 中国互联.网络 " + - // 新国际域名 - "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + - // 世界各国域名后缀 - "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" -).split(" "); - -/* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers -*/ -function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; -} - -// 随机生成一个 URL 协议。 -function protocol() { - return pick(protocols); -} -// 随机生成一个域名。 -function domain(Tld) { - return `${word()}.${Tld || tld()}`; -} -/* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) -*/ -function tld() { - // Top Level Domain - return pick(tlds); -} - -// 随机生成一个邮件地址。 -function email(domain) { - return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; -} -// 随机生成一个 IP 地址。 -function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join("."); -} - -var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" -]; -var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" -]; -var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" -]; -var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 -}; - -var Addvocate = "#ff6138"; -var Adobe = "#ff0000"; -var Aim = "#fcd20b"; -var Amazon = "#e47911"; -var Android = "#a4c639"; -var AOL = "#0060a3"; -var Atlassian = "#003366"; -var Behance = "#053eff"; -var bitly = "#ee6123"; -var Blogger = "#fc4f08"; -var Boeing = "#0039a6"; -var Carbonmade = "#613854"; -var Cheddar = "#ff7243"; -var Delicious = "#205cc0"; -var Dell = "#3287c1"; -var Designmoo = "#e54a4f"; -var Deviantart = "#4e6252"; -var Devour = "#fd0001"; -var DEWALT = "#febd17"; -var Dribbble = "#ea4c89"; -var Dropbox = "#3d9ae8"; -var Drupal = "#0c76ab"; -var Dunked = "#2a323a"; -var eBay = "#89c507"; -var Ember = "#f05e1b"; -var Engadget = "#00bdf6"; -var Envato = "#528036"; -var Etsy = "#eb6d20"; -var Evernote = "#5ba525"; -var Facebook = "#3b5998"; -var Firefox = "#e66000"; -var Forrst = "#5b9a68"; -var Foursquare = "#25a0ca"; -var Garmin = "#007cc3"; -var GetGlue = "#2d75a2"; -var Gimmebar = "#f70078"; -var GitHub = "#171515"; -var Grooveshark = "#f77f00"; -var Groupon = "#82b548"; -var HelloWallet = "#0085ca"; -var HootSuite = "#003366"; -var Houzz = "#73ba37"; -var HTML5 = "#ec6231"; -var IKEA = "#ffcc33"; -var IMDb = "#f3ce13"; -var Instagram = "#3f729b"; -var Intel = "#0071c5"; -var Intuit = "#365ebf"; -var Kickstarter = "#76cc1e"; -var kippt = "#e03500"; -var Kodery = "#00af81"; -var LastFM = "#c3000d"; -var LinkedIn = "#0e76a8"; -var Livestream = "#cf0005"; -var Lumo = "#576396"; -var Mixpanel = "#a086d3"; -var Meetup = "#e51937"; -var Nokia = "#183693"; -var NVIDIA = "#76b900"; -var Opera = "#cc0f16"; -var Path = "#e41f11"; -var Pinboard = "#0000e6"; -var Pinterest = "#c8232c"; -var PlayStation = "#665cbe"; -var Pocket = "#ee4056"; -var Prezi = "#318bff"; -var Pusha = "#0f71b4"; -var Quora = "#a82400"; -var Rdio = "#008fd5"; -var Readability = "#9c0000"; -var Resource = "#7eb400"; -var Rockpack = "#0ba6ab"; -var Roon = "#62b0d9"; -var RSS = "#ee802f"; -var Salesforce = "#1798c1"; -var Samsung = "#0c4da2"; -var Shopify = "#96bf48"; -var Skype = "#00aff0"; -var Snagajob = "#f47a20"; -var Softonic = "#008ace"; -var SoundCloud = "#ff7700"; -var Spotify = "#81b71a"; -var Sprint = "#fee100"; -var Squarespace = "#121212"; -var StackOverflow = "#ef8236"; -var Staples = "#cc0000"; -var Stripe = "#008cdd"; -var StudyBlue = "#00afe1"; -var StumbleUpon = "#f74425"; -var Technorati = "#40a800"; -var Treehouse = "#5cb868"; -var Trulia = "#5eab1f"; -var Tumblr = "#34526f"; -var Twitter = "#00acee"; -var TYPO3 = "#ff8700"; -var Ubuntu = "#dd4814"; -var Ustream = "#3388ff"; -var Verizon = "#ef1d1d"; -var Vimeo = "#86c9ef"; -var Vine = "#00a478"; -var Virb = "#06afd8"; -var Wooga = "#5b009c"; -var Wunderlist = "#2b88d9"; -var XBOX = "#9bc848"; -var XING = "#126567"; -var Yandex = "#ffcc00"; -var Yelp = "#c41200"; -var YouTube = "#c4302b"; -var Zalongo = "#5498dc"; -var Zendesk = "#78a300"; -var Zerply = "#9dcc7a"; -var Zootool = "#5e8b1d"; -var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool -}; - -/* global document */ -let { _adSize, _screenSize, _videoSize } = size; -const _brandNames = Object.keys(_brandColors); - -/* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 -*/ -function image(...args) { - let size, background, foreground, format, text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ""); - background = (background || hex()).replace(/^#/, ""); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; -} -/* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, -*/ -function dataImage(size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - var Canvas = module.require("canvas"); - canvas = new Canvas(); - } - - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split("x"); - - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); -} - -/* - ## Address -*/ -var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; - -// 随机生成一个大区。 -function region() { - return pick(REGION); -} -// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 -function province() { - return pick(DICT_FIXED).name; -} -// 随机生成一个(中国)市。 -function city(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; -} -// 随机生成一个(中国)县。 -function county(prefix) { - var province = pick(DICT_FIXED); - var city = pick(province.children); - var county = pick(city) || { - name: "-", - }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; -} -// 随机生成一个邮政编码(六位数字)。 -function zip(len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; -} - -// 用于生成 Blob 和 File 型数据的工具 -function prepare(anyData) { - let prepared; - switch (type$1(anyData)) { - case "array": - prepared = anyData; - default: - prepared = [anyData]; - } - return prepared; -} -function genFile(anyData) { - return new File(prepare(anyData), word()); -} -function genBlob() { - return new Blob(prepare(anyData)); -} - -/* - ## Mock.Random - - 工具类,用于生成各种随机数据。 -*/ - -var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - float: float, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range$1, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip, - genFile: genFile, - genBlob: genBlob -}); - -/* - ## Constant - - 常量集合。 - */ -/* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 -*/ -var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ -}; - -/* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ -/* jshint -W041 */ -function parser$1(name = "") { - if (typeof name !== "string") name = name + ""; - var parameters = name.match(Constant.RE_KEY); - - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - var result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - let isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; -} - -function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { - var result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }) - ); - }); - }); - } - } - } - return result; -} - -function boolean({ rule: { max, min, parameters }, template = "" }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; -} - -function _function(options) { - let { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); -} - -function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { - var result; - if (decimal) { - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { - result = float(min, max, dmin, dmax); // 内置字符串转数字 - }); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; -} - -function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - var result = {}, - keys = [], - fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (let key in template) { - (typeof template[key] === "function" ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - let inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type$1(template[key]) === "number") { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; -} - -// https://github.com/nuysoft/regexp - -function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); -} - -function Alternate(n, l) { - Token.call(this, "alternate"), (this.left = n), (this.right = l); -} - -function Match(n) { - Token.call(this, "match"), (this.body = n.filter(Boolean)); -} - -function Group(n, l) { - Token.call(this, n), (this.body = l); -} - -function CaptureGroup(n) { - Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); -} - -function Quantified(n, l) { - Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); -} - -function Quantifier(n, l) { - Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); -} - -function CharSet(n, l) { - Token.call(this, "charset"), (this.invert = n), (this.body = l); -} - -function CharacterRange(n, l) { - Token.call(this, "range"), (this.start = n), (this.end = l); -} - -function Literal(n) { - Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); -} - -function Unicode(n) { - Token.call(this, "unicode"), (this.code = n.toUpperCase()); -} - -function Hex(n) { - Token.call(this, "hex"), (this.code = n.toUpperCase()); -} - -function Octal(n) { - Token.call(this, "octal"), (this.code = n.toUpperCase()); -} - -function BackReference(n) { - Token.call(this, "back-reference"), (this.code = n.toUpperCase()); -} - -function ControlCharacter(n) { - Token.call(this, "control-character"), (this.code = n.toUpperCase()); -} - -var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, "\\\\") - .replace(/"/g, '\\"') - .replace(/\x08/g, "\\b") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\f/g, "\\f") - .replace(/\r/g, "\\r") - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return "\\x0" + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return "\\x" + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return "\\u0" + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return "\\u" + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = "end of input"; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; - } - (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - "\n" === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : "\r" === e || "\u2028" === e || "\u2029" === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), - null === t && (t = al), - null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function s() { - var l, u; - return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function h() { - var n, l, u; - return ( - (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), - null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function g() { - var l, u; - return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function b() { - var l, u; - return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) - for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) - if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function M() { - var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function D() { - var l, u; - return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function H() { - var l, u; - return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function O() { - var l, u; - return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function W() { - var l, u; - return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function z() { - var l, u; - return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function I() { - var l, u; - return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function J() { - var l, u; - return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function K() { - var l, u; - return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function N() { - var l, u; - return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function P() { - var l, u; - return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function V() { - var l, u; - return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function X() { - var l, u; - return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { - if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) - for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = "", - fl = "|", - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = "^", - vl = '"^"', - wl = function () { - return new Token("start"); - }, - Al = "$", - Cl = '"$"', - gl = function () { - return new Token("end"); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = "Quantifier", - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = "{", - yl = '"{"', - ml = ",", - Rl = '","', - Fl = "}", - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ",}", - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = "+", - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = "*", - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = "?", - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = "[0-9]", - Jl = function (n) { - return +n.join(""); - }, - Kl = "(", - Nl = '"("', - Pl = ")", - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = "?:", - _l = '"?:"', - nu = function (n) { - return new Group("non-capture-group", n); - }, - lu = "?=", - uu = '"?="', - tu = function (n) { - return new Group("positive-lookahead", n); - }, - ru = "?!", - eu = '"?!"', - ou = function (n) { - return new Group("negative-lookahead", n); - }, - cu = "CharacterSet", - iu = "[", - au = '"["', - fu = "]", - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = "CharacterRange", - pu = "-", - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = "Character", - Cu = /^[^\\\]]/, - gu = "[^\\\\\\]]", - bu = function (n) { - return new Literal(n); - }, - ku = ".", - Tu = '"."', - xu = function () { - return new Token("any-character"); - }, - yu = "Literal", - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = "[^|\\\\\\/.[()?+*$\\^]", - Fu = "\\b", - Qu = '"\\\\b"', - Su = function () { - return new Token("backspace"); - }, - Uu = function () { - return new Token("word-boundary"); - }, - Eu = "\\B", - Gu = '"\\\\B"', - Bu = function () { - return new Token("non-word-boundary"); - }, - ju = "\\d", - $u = '"\\\\d"', - qu = function () { - return new Token("digit"); - }, - Lu = "\\D", - Mu = '"\\\\D"', - Du = function () { - return new Token("non-digit"); - }, - Hu = "\\f", - Ou = '"\\\\f"', - Wu = function () { - return new Token("form-feed"); - }, - zu = "\\n", - Iu = '"\\\\n"', - Ju = function () { - return new Token("line-feed"); - }, - Ku = "\\r", - Nu = '"\\\\r"', - Pu = function () { - return new Token("carriage-return"); - }, - Vu = "\\s", - Xu = '"\\\\s"', - Yu = function () { - return new Token("white-space"); - }, - Zu = "\\S", - _u = '"\\\\S"', - nt = function () { - return new Token("non-white-space"); - }, - lt = "\\t", - ut = '"\\\\t"', - tt = function () { - return new Token("tab"); - }, - rt = "\\v", - et = '"\\\\v"', - ot = function () { - return new Token("vertical-tab"); - }, - ct = "\\w", - it = '"\\\\w"', - at = function () { - return new Token("word"); - }, - ft = "\\W", - st = '"\\\\W"', - ht = function () { - return new Token("non-word"); - }, - dt = "\\c", - pt = '"\\\\c"', - vt = "any character", - wt = function (n) { - return new ControlCharacter(n); - }, - At = "\\", - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = "[1-9]", - kt = function (n) { - return new BackReference(n); - }, - Tt = "\\0", - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = "[0-7]", - Rt = function (n) { - return new Octal(n.join("")); - }, - Ft = "\\x", - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = "[0-9a-fA-F]", - Et = function (n) { - return new Hex(n.join("")); - }, - Gt = "\\u", - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join("")); - }, - $t = function () { - return new Token("null-character"); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - -/* - ## RegExp Handler - - https://github.com/ForbesLindesay/regexp - https://github.com/dmajda/pegjs - http://www.regexper.com/ - - 每个节点的结构 - { - type: '', - offset: number, - text: '', - body: {}, - escaped: true/false - } - - type 可选值 - alternate | 选择 - match 匹配 - capture-group () 捕获组 - non-capture-group (?:...) 非捕获组 - positive-lookahead (?=p) 零宽正向先行断言 - negative-lookahead (?!p) 零宽负向先行断言 - quantified a* 重复节点 - quantifier * 量词 - charset [] 字符集 - range {m, n} 范围 - literal a 直接量字符 - unicode \uxxxx Unicode - hex \x 十六进制 - octal 八进制 - back-reference \n 反向引用 - control-character \cX 控制字符 - - // Token - start ^ 开头 - end $ 结尾 - any-character . 任意字符 - backspace [\b] 退格直接量 - word-boundary \b 单词边界 - non-word-boundary \B 非单词边界 - digit \d ASCII 数字,[0-9] - non-digit \D 非 ASCII 数字,[^0-9] - form-feed \f 换页符 - line-feed \n 换行符 - carriage-return \r 回车符 - white-space \s 空白符 - non-white-space \S 非空白符 - tab \t 制表符 - vertical-tab \v 垂直制表符 - word \w ASCII 字符,[a-zA-Z0-9] - non-word \W 非 ASCII 字符,[^a-zA-Z0-9] - null-character \o NUL 字符 - */ -/* - - */ -var Handler$2 = { - extend: extend, -}; - -// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart -/*var ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] -}*/ - -// ASCII printable code chart -// var LOWER = 'abcdefghijklmnopqrstuvwxyz' -// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -// var NUMBER = '0123456789' -// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' -var LOWER = ascii(97, 122); -var UPPER = ascii(65, 90); -var NUMBER = ascii(48, 57); -var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) -var PRINTABLE = ascii(32, 126); -var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; -var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); - } - return result; - })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, -}; - -// 从 from 到 to 包含两个端点的字符串 -function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); -} - -// var ast = RegExpParser.parse(regexp.source) -Handler$2.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$2[node.type] ? Handler$2[node.type](node, result, cache) : Handler$2.token(node, result, cache); -}; - -Handler$2.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": - return character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO - break; - case "digit": - return pick(NUMBER.split("")); - case "non-digit": - return pick((LOWER + UPPER + OTHER).split("")); - case "form-feed": - break; - case "line-feed": - return node.body || node.text; - case "carriage-return": - break; - case "white-space": - return pick(SPACE.split("")); - case "non-white-space": - return pick((LOWER + UPPER + NUMBER).split("")); - case "tab": - break; - case "vertical-tab": - break; - case "word": // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return pick(OTHER.replace("_", "").split("")); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ""; - // node.body [] - for (var i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - "capture-group": function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - "non-capture-group": function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - "positive-lookahead": function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - "negative-lookahead": function (node, result, cache) { - // node.body - return ""; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ""; - // node.quantifier {} - var count = this.quantifier(node.quantifier); - // node.body {} - for (var i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); - - // node.body [] - var literal = pick(node.body); - return this.gen(literal, result, cache); - }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); - break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); - } - /* falls through */ - default: - var characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); - } - } - } - } - return pick(pool.split("")); - }, - range: function (node, result, cache) { - // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " - ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - "control-character": function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, -}); - -var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$2 -}); - -function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - let Source = count === undefined ? source : Array(count).fill(source).join(""); - return Handler$2.gen(parser.parse(Source)); -} - -function getValueByKeyPath(key, options) { - var originalKey = key; - var keyPathParts = splitPathToArray(key); - var absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === "/") { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === "object" && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) {} - - return "@" + keyPathParts.join("/"); -} -// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js -function normalizePath(pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case "..": - newPathParts.pop(); - break; - case ".": - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; -} -function splitPathToArray(path) { - var parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; -} - -// 占位符即是字符串函数的意思 -function placeholder(Placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(Placeholder); - - var lkey = key && key.toLowerCase(), - pathParts = splitPathToArray(key); - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - params = params.split(/\s*,\s*/); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === "object" && - key in templateContext && - Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return Placeholder; - - // 递归解析参数中的占位符 - params = params.map((param) => { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(param)) { - return placeholder(param, obj, templateContext, options); - } - return param; - }); - - var handle = Random[key] || Random[lkey]; - switch (type$1(handle)) { - case "array": - // 自动从数组中取一个,例如 @areas - return pick(handle); - case "function": - // 执行占位符方法(大多数情况) - handle.options = options; - var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } -} - -function string(options) { - let { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = "", - } = options; - var result = ""; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(""); - - // 'email|1-10': '@EMAIL, ', - let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - let phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - if (isNumeric(phed)) { - result = parseFloat(phed, 10); - return true; - } - if (/^(true|false)$/.test(phed)) { - result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 - return true; - } // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; -} - -var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string -}); - -let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 -function gen(template, name = "", context = {}) { - var newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - var type = type$1(template); - let func = typeset[type]; - var data; - - if (func) { - data = func({ - // 属性值类型 - type, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; -} - -/* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - -*/ -/* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot -*/ -var Handler$1 = { - gen, - extend, -}; -Handler$1.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, -}); -Handler$1.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, -}); - -/* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - -function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - var result = { - name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, - template, - type: type$1(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? "ROOT" : result.name); - - switch (result.type) { - case "array": - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case "object": - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; -} - -/* - ## valid(template, data) - - 校验真实数据 data 是否与数据模板 template 匹配。 - - 实现思路: - 1. 解析规则。 - 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 - type 属性值类型 - template 属性值模板 - properties 对象属性数组 - items 数组元素数组 - rule 属性值生成规则 - 2. 递归验证规则。 - 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties - [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) - [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) -*/ - -function valid(template, data) { - var schema = toJSONSchema(template); - var result = Diff.diff(schema, data); - for (var i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; -} - -/* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 -*/ -var Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - var result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - var length = result.length; - - Assert.equal("name", schema.path, name + "", schema.name + "", result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - var length = result.length; - - switch (schema.type) { - case "string": - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case "array": - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case "function": - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal("type", schema.path, type$1(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var templateType = schema.type; - if (templateType === "object" || templateType === "array" || templateType === "function") return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case "regexp": - Assert.match("value", schema.path, data, schema.template, result); - return result.length === length; - case "string": - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal("value", schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - var actualRepeatCount; - switch (templateType) { - case "number": - var parts = (data + "").split("."); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case "boolean": - break; - - case "string": - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case "regexp": - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - var length = result.length; - - var rule = schema.rule; - var keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("properties length", schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("properties length", schema.path, keys$1.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo("properties length", schema.path, keys$1.length, Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal("properties length", schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (var i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - var property; - each(schema.properties, function (item /*, index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i] - ) - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - var length = result.length; - - if (!schema.items) return; - - var rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal("items length", schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - "items", - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" - ); - Assert.lessThanOrEqualTo( - "items", - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (var i = 0; i < data.length; i++) { - result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); - } - - return result.length === length; - }, -}; - -/* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - -*/ -var Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace("{utype}", item.type.toUpperCase()) - .replace("{ltype}", item.type.toLowerCase()) - .replace("{path}", (isArray(item.path) && item.path.join(".")) || item.path) - .replace("{action}", item.action) - .replace("{expected}", item.expected) - .replace("{actual}", item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case "type": - // 正则模板 === 字符串最终值 - if (expected === "regexp" && actual === "string") return true; - break; - } - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "matches", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is not equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is greater than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - var item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: "is less than or equal to", - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, -}; - -valid.Diff = Diff; -valid.Assert = Assert; - -// 集中管理 mocked 的 url - -const _mocked = { - $set(value) { - this[value.rurl + value.rtype.toLowerCase()] = value; - }, - $delete(key) { - delete this[key]; - }, -}; - -// 查找与请求参数匹配的数据模板:URL,Type -function find({ url, type }) { - type = type.toLowerCase(); - for (var sUrlType in _mocked) { - var item = _mocked[sUrlType]; - let { rurl, rtype } = item; - if (match(rurl, url) && match(rtype, type)) { - // console.log('[mock]', url, '>', item.rurl) - return item; - } - } - return false; -} - -function match(expected, actual) { - switch (type$1(expected)) { - case "string": - return expected === actual; - case "regexp": - return expected.test(actual); - default: - return false; - } -} - -// 数据模板 => 响应数据 -function convert({ template }, options) { - return isFunction(template) ? template(options) : gen(template); -} - -/** - * Check if `obj` is a URLSearchParams object - * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 - * - * @param {*} obj - * @return {boolean} - */ -const isURLSearchParameters = (object) => { - return ( - typeof object === "object" && - typeof object.append === "function" && - typeof object.delete === "function" && - typeof object.get === "function" && - typeof object.getAll === "function" && - typeof object.has === "function" && - typeof object.set === "function" && - typeof object.sort === "function" && - object[Symbol.toStringTag] === "URLSearchParams" // 获取类名的方式哦 - ); -}; - -const BODY = Symbol("Body internals"); -const RESPONSE = Symbol("Response internals"); - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -async function consumeBody(data) { - // 标记为已经使用 - if (data.disturbed) { - throw new TypeError(`body used already for: ${data.url}`); - } - data.disturbed = true; - - // 报错 - if (data.error) { - throw data.error; - } - - if (data.body instanceof FormData) { - return new Blob([Object.fromEntries(a.entries())]); - } - return data.body; -} - -/** - * Body.js - * - * Body interface provides common methods for Request and Response - */ /** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Body { - constructor(body, { size = 0 } = {}) { - if (body === null) { - // Body is undefined or null - body = new Blob([]); - } else if (isURLSearchParameters(body)) { - // Body is a URLSearchParams - body = new Blob([body]); - } else if (ArrayBuffer.isView(body)) { - // Body is ArrayBufferView - body = new Blob([body]); - } else { - body = new Blob([JSON.stringify(body)]); - } - - this[BODY] = { - body, - boundary: null, - disturbed: false, - error: null, - }; - this.size = size; - } - - get body() { - return this[BODY].body; - } - - get bodyUsed() { - return this[BODY].disturbed; - } - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - async arrayBuffer() { - const blob = await consumeBody(this[BODY]); - return blob.arrayBuffer(); - } - - /** - * Return raw response as Blob - * - * @return Promise - */ - async blob() { - return consumeBody(this[BODY]); - } - - /** - * Decode response as json - * - * @return Promise - */ - async json() { - const text = await this.text(); - return JSON.parse(text || "{}"); - } - - /** - * Decode response as text - * - * @return Promise - */ - async text() { - const blob = await consumeBody(this[BODY]); - return blob.text(); - } - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ -} - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true }, -}); - -/** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present. - * - * @param {any} body Any options.body input - * @returns {string | null} - */ -const extractContentType = (body, request) => { - // Body is null or undefined - if (body === null) { - return null; - } - - // Body is string - if (typeof body === "string") { - return "text/plain;charset=UTF-8"; - } - - // Body is a URLSearchParams - if (isURLSearchParameters(body)) { - return "application/x-www-form-urlencoded;charset=UTF-8"; - } - - // Body is blob - if (body instanceof Blob) { - return body.type || null; - } - - if (body instanceof FormData) { - return `multipart/form-data; boundary=${request[INTERNALS].boundary}`; - } - - // Body constructor defaults other things to string - return "text/plain;charset=UTF-8"; -}; - -const redirectStatus = new Set([301, 302, 303, 307, 308]); - -/** - * Redirect code matching - * - * @param {number} code - Status code - * @return {boolean} - */ -const isRedirect = code => { - return redirectStatus.has(code); -}; - -/** - * Response.js - * - * Response class provides content decoding - */ -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class fakeResponse extends Body { - constructor(body = null, options = {}) { - super(body, options); - const status = options.status != null ? options.status : 200; - const headers = new Headers(options.headers); - if (body !== null && !headers.has("Content-Type")) { - const contentType = extractContentType(body); - if (contentType) { - headers.append("Content-Type", contentType); - } - } - this[RESPONSE] = { - type: "default", - url: options.url, - status, - statusText: options.statusText || "", - headers, - counter: options.counter, - }; - } - - get type() { - return this[RESPONSE].type; - } - - get url() { - return this[RESPONSE].url || ""; - } - - get status() { - return this[RESPONSE].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; - } - - get redirected() { - return this[RESPONSE].counter > 0; - } - - get statusText() { - return this[RESPONSE].statusText; - } - - get headers() { - return this[RESPONSE].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - // Don't allow cloning a used body - if (bodyUsed) { - throw new Error("cannot clone body after it is used"); - } - return new Response(this.body, { - type: this.type, - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected, - size: this.size, - }); - } - - /** - * @param {string} url The URL that the new response is to originate from. - * @param {number} status An optional status code for the response (e.g., 302.) - * @returns {Response} A Response object. - */ - static redirect(url, status = 302) { - if (!isRedirect(status)) { - throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); - } - - return new Response(null, { - headers: { - location: new URL(url).toString(), - }, - status, - }); - } - - static error() { - const response = new Response(null, { status: 0, statusText: "" }); - response[RESPONSE].type = "error"; - return response; - } - - get [Symbol.toStringTag]() { - return "Response"; - } -} - -Object.defineProperties(Response.prototype, { - type: { enumerable: true }, - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true }, -}); - -var realFetch = window.fetch; -function mockFetch() { - // 代理 fetch 的初始化函数 - if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { - window.fetch = fakeFetch; - window.fetch.$mock = true; - console.warn("fetch 已经被代理"); - } -} - -async function fakeFetch(url, options = {}) { - if (window.fetch.$mock === true) { - // 只有在 $mock 标记为 true 时才进行代理 - let result = find({ - url, - type: (options.method || "get").toLowerCase(), - }); - if (result) { - const data = convert(result, {}); - console.warn("mock代理中"); - return new fakeResponse(data, options); - } - } - - console.warn("未使用 mockjs"); - return realFetch(url, options); -} - -var HTTP_STATUS_CODES = { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", -}; - -// 使用不完全覆盖的方式,使用继承方式继承所有的属性 - -let SEND = XMLHttpRequest.prototype.send; -const OPEN = XMLHttpRequest.prototype.open; - + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return B.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!S(e)}function ae(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&X(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return f(e)&&"[object Arguments]"==s(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return f(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},be={};function xe(e){return function(n){return e(n)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?xe(ke):function(e){return f(e)&&te(e.length)&&!!be[s(e)]},Ce=Object.prototype.hasOwnProperty;function Me(e,n){var t=p(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=on();return an(e+a*(n-e+rn("1e-"+((a+"").length-1))),n)}return tn(e,n)}var ln=Math.ceil,cn=Math.max;var hn,sn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=cn(ln((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=un(t,r,!1);return parseFloat(un(e,n,!0).toFixed(a))},On=function(e,n,t){ +//! cur:boolean 是划分概率的一个启动符号 +return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Dn=Fn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=$n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Dn.to,Dn.get;var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in qn)if(qn.hasOwnProperty(l)){var i=qn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Hn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Jn={};function Wn(e,n){if(!(this instanceof Wn))return new Wn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Wn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Dn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Wn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Wn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Wn.prototype[e]=function(){if(this.model===e)return new Wn(this);if(arguments.length)return new Wn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Wn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Wn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Wn(t,e)}}}));var Zn=Wn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let $t=0;const _t=function(e){return $t+=+e||1},Dt=_t;function qt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=qt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=qt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=qt(12,18,e,n);return[...Array(t)].map((()=>Nt())).join("")+"。"}function Nt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Ht)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Jt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Wt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Jt;const Xt=Object.keys(Wt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},csentence:Lt,cparagraph:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Nt,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Wt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Wt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},$e=function(e){return new pr(e,e)},_e="+",De='"+"',qe=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new cr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new cr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new cr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new vr(e.join(""))},qt=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et($r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Hr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Hr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Jr={gen:Gr,extend:gn};function Wr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Wr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Wr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Wr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Hr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Nr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - -class MockXMLHttpRequest extends XMLHttpRequest { - constructor() { - super(...arguments); - } - _send = SEND; - _open = OPEN; - open(method, url, async, username, password) { - // 不进行同步操作 - this._open(method, url, true, username, password); - this.$url = url; - this.$type = method.toLowerCase(); - } - send(body) { - if (this.$mock) { - this.$template = find({ url: this.$url, type: this.$type }); - if (this.$template) { - this.dispatchEvent(new Event("loadstart")); - setTimeout(this.$done.bind(this), this.$timeout); - return null; - } - } - this._send(body); - } - get mock() { - return this.$mock; - } - set mock(value) { - if (typeof value === "boolean") this.$mock = value; - } - - $type = "get"; - $url = ""; - $mock = true; - $timeout = 1000; - $data = null; - $template = null; - - $done() { - this.readyState = this.HEADERS_RECEIVED; - this.dispatchEvent(new Event("readystatechange")); - this.readyState = this.LOADING; - this.dispatchEvent(new Event("readystatechange")); - - this.status = 200; - this.statusText = HTTP_STATUS_CODES[200]; - this.$data = convert(this.$template, {}); - this.response = JSON.stringify(this.$data, null, 4); - this.responseText = this.response; - this.readyState = this.DONE; - this.dispatchEvent(new Event("readystatechange")); - this.dispatchEvent(new Event("load")); - this.dispatchEvent(new Event("loadend")); - } - - // 原生属性的 getter 和 setter - $readyState = 0; - $status = 200; - $response = ""; - $responseText = ""; - $statusText = ""; - set readyState(state) { - this.$readyState = state; - } - get readyState() { - return this.$readyState; - } - set status(code) { - this.$status = code; - } - get status() { - return this.$status; - } - set statusText(code) { - this.$statusText = code; - } - get statusText() { - return this.$statusText; - } - - get response() { - return this.$response; - } - set response(code) { - this.$response = code; - } - set responseText(code) { - this.$responseText = code; - } - get statusText() { - return this.$statusText; - } -} - -// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 -typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 - -/* global require, module, window */ - -var XHR; -if (typeof window !== "undefined") XHR = MockXMLHttpRequest; - +class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha,this.$data=ea(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get statusText(){return this.$statusText}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -14902,66 +61,4 @@ if (typeof window !== "undefined") XHR = MockXMLHttpRequest; 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/ -var Mock = { - Handler: Handler$1, - Random, - Util, - XHR, - RE, - toJSONSchema, - valid, - heredoc: heredoc, - setup: function (settings) { - return XHR.setup(settings); - }, - _mocked, -}; - -Mock.version = "1.1.1-es6"; - -// 避免循环依赖 -if (XHR) XHR.Mock = Mock; - -/* - * Mock.mock( template ) - * Mock.mock( function() ) - * Mock.mock( rurl, template ) - * Mock.mock( rurl, function(options) ) - * Mock.mock( rurl, rtype, template ) - * Mock.mock( rurl, rtype, function(options) ) - - 根据数据模板生成模拟数据。 -*/ -Mock.mock = function (...args) { - let rurl, - rtype = "get", - template; - - switch (args.length) { - case 1: - // Mock.mock(template) - [template] = args; - return Handler$1.gen(template); - // 2 和 3 switch 穿透 - case 2: - // Mock.mock(rurl, template) - [rurl, template] = args; - break; - case 3: - // Mock.mock(rurl,rtype, template) - [rurl, rtype, template] = args; - break; - } - - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - _mocked.$set({ - rurl, - rtype, - template, - }); - return Mock; -}; - -export default Mock; +*/;var pa={Handler:Jr,Random:nr,Util:kn,XHR:da,RE:qr,toJSONSchema:Wr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6"};da&&(da.Mock=pa),pa.mock=function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Jr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa};export default pa; From 7e9af905274a6695c36dd1dc83328c7921b1b62c Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Mon, 14 Jun 2021 20:15:50 +0800 Subject: [PATCH 22/65] 0.9.4 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ea3cdfc6..016ab274 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.3", + "version": "0.9.4", "homepage": "http://mockjs.com/", "keywords": [ "mock", From 69ed904cfe6302b42e87fef32c63e5c33ac01aa6 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Tue, 15 Jun 2021 15:46:45 +0800 Subject: [PATCH 23/65] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20xhr=20=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 11 ++++++++++- dist/Mock.min.js | 2 +- dist/mock.js | 2 +- src/mock/xhr/{ => XMLHttpRequest}/xhr.js | 8 ++++---- src/mock/xhr/fetch/fetch.js | 1 + src/mock/xhr/index.js | 2 +- test/fakeServer.js | 3 +++ 7 files changed, 21 insertions(+), 8 deletions(-) rename src/mock/xhr/{ => XMLHttpRequest}/xhr.js (94%) diff --git a/README.md b/README.md index 6144100b..b77d303e 100644 --- a/README.md +++ b/README.md @@ -33,12 +33,21 @@ Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](htt Mock.mock('@timestamp') // 生成数字型的 timestamp ``` +2. 支持 fetch 代理 + +```js +Mock.mock('fake/1','get',{ + 'timestamp|10':['@timestamp'] +}) +fetch('fake/1').then(res=>res.json()).then(console.log) +``` + ## 从 Mockjs 迁移到 Mockjs-esm 不用修改任何的 API ,只需要改变 Mockjs 的引用方式即可。 ```html - + ``` ## 作者的闲聊 diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 662a1216..2d5ad984 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -52,7 +52,7 @@ var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.O //! cur:boolean 是划分概率的一个启动符号 return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},$n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function _n(e,n){return e(n={exports:{}},n.exports),n.exports}var Dn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=_n((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=_n((function(e){var n={};for(var t in Dn)Dn.hasOwnProperty(t)&&(n[Dn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Dn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=qn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=qn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=qn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=qn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=qn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=_n((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Nn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Jn=["keyword","gray","hex"],Wn={};Object.keys(Un).forEach((function(e){Wn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Jn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Wn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Wn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Jn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return $t(_t(),e)}function $t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function _t(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let Dt=0;const qt=function(e){return Dt+=+e||1},Pt=qt;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Nt())).join(""))+"."}function Nt(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Ht(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Jt(e){return`${Nt()}.${e||Wt()}`}function Wt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:$n,str:$n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+$n("number",3);for(var r=0;rLt()))},word:Nt,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Nt()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Ht,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},cword:It,protocol:Gt,domain:Jt,tld:Wt,email:function(e){return`${Fn("lower")}.${Nt()}@${e||Nt()+"."+Wt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Jt()}/${Nt()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:$t,_randomDate:_t,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return $t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?_t(e,n).getTime():_t().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Nt())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Wr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Wr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},$e=function(e){return new xr(e,e)},_e="+",De='"+"',qe=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new sr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new sr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new sr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new wr(e.join(""))},qt=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+$r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt(Dr.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt($r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Hr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Nr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Wr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?$n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Jr=1;function Wr(e,n="",t={}){var r={path:t.path||[Jr],templatePath:t.templatePath||[Jr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Wr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Nr,normalizePath:Hr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Wr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa,this.$data=ta(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get statusText(){return this.$statusText}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) +class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa,this.$data=ta(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock diff --git a/dist/mock.js b/dist/mock.js index 87ee7062..b2aeca01 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -52,7 +52,7 @@ var e="object"==typeof global&&global&&global.Object===Object&&global,n="object" //! cur:boolean 是划分概率的一个启动符号 return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Dn=Fn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=$n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Dn.to,Dn.get;var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in qn)if(qn.hasOwnProperty(l)){var i=qn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Hn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Jn={};function Wn(e,n){if(!(this instanceof Wn))return new Wn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Wn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Dn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Wn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Wn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Wn.prototype[e]=function(){if(this.model===e)return new Wn(this);if(arguments.length)return new Wn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Wn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Wn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Wn(t,e)}}}));var Zn=Wn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let $t=0;const _t=function(e){return $t+=+e||1},Dt=_t;function qt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=qt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=qt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=qt(12,18,e,n);return[...Array(t)].map((()=>Nt())).join("")+"。"}function Nt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Ht)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Jt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Wt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Jt;const Xt=Object.keys(Wt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},csentence:Lt,cparagraph:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Nt,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Wt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Wt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},$e=function(e){return new pr(e,e)},_e="+",De='"+"',qe=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new cr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new cr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new cr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new vr(e.join(""))},qt=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et($r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Hr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Hr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Jr={gen:Gr,extend:gn};function Wr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Wr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Wr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Wr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Hr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Nr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha,this.$data=ea(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get statusText(){return this.$statusText}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) +class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha,this.$data=ea(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock diff --git a/src/mock/xhr/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js similarity index 94% rename from src/mock/xhr/xhr.js rename to src/mock/xhr/XMLHttpRequest/xhr.js index 18be75c6..12add989 100644 --- a/src/mock/xhr/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -1,7 +1,7 @@ // 使用不完全覆盖的方式,使用继承方式继承所有的属性 // 只在 send 方式调用的时候对其进行数据返回 -import { find, convert } from "./ajax-tools.js"; -import HTTP_STATUS_CODES from "./XMLHttpRequest/constant.js"; +import { find, convert } from "../ajax-tools.js"; +import HTTP_STATUS_CODES from "./constant.js"; let SEND = XMLHttpRequest.prototype.send; const OPEN = XMLHttpRequest.prototype.open; @@ -96,8 +96,8 @@ class MockXMLHttpRequest extends XMLHttpRequest { set responseText(code) { this.$responseText = code; } - get statusText() { - return this.$statusText; + get responseText() { + return this.$responseText; } } export { MockXMLHttpRequest }; diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index 0a9f2217..8d8ec33f 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -13,6 +13,7 @@ import { _mocked } from "../../_mocked.js"; import { find, convert } from "../ajax-tools.js"; // 假的 Response 对象 +// import fakeResponse from "./src/response.js"; import fakeResponse from "./src/response.js"; async function fakeFetch(url, options = {}) { diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index 433a67a4..9c96008b 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -3,4 +3,4 @@ import { mockFetch } from "./fetch/fetch.js"; typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 -export { MockXMLHttpRequest } from "./xhr.js"; +export { MockXMLHttpRequest } from "./XMLHttpRequest/xhr.js"; diff --git a/test/fakeServer.js b/test/fakeServer.js index e75e363e..2ccdea5e 100644 --- a/test/fakeServer.js +++ b/test/fakeServer.js @@ -12,3 +12,6 @@ Mock.mock("fake/file", { }); axios.get("fake/file").then((res) => console.log(res)); +fetch("fake/file") + .then((res) => res.json()) + .then(console.log); From b3c6f52cf03f2d968dd3fe0daf3fd8fa91dcfe65 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Tue, 15 Jun 2021 15:46:56 +0800 Subject: [PATCH 24/65] 0.9.5 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 016ab274..532d3387 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.4", + "version": "0.9.5", "homepage": "http://mockjs.com/", "keywords": [ "mock", From 05ab2ceaf7234a0749d4add493ddf0580bd495d3 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 16 Jun 2021 16:09:35 +0800 Subject: [PATCH 25/65] 2021/6/16 --- dist/Mock.min.js | 4 ++-- dist/mock.js | 4 ++-- package.json | 4 ++-- src/mock.js | 3 --- src/mock/xhr/XMLHttpRequest/xhr.js | 2 +- 5 files changed, 7 insertions(+), 10 deletions(-) diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 2d5ad984..60f3b19f 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -52,7 +52,7 @@ var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.O //! cur:boolean 是划分概率的一个启动符号 return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},$n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function _n(e,n){return e(n={exports:{}},n.exports),n.exports}var Dn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=_n((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=_n((function(e){var n={};for(var t in Dn)Dn.hasOwnProperty(t)&&(n[Dn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Dn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=qn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=qn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=qn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=qn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=qn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=_n((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Nn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Jn=["keyword","gray","hex"],Wn={};Object.keys(Un).forEach((function(e){Wn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Jn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Wn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Wn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Jn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return $t(_t(),e)}function $t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function _t(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let Dt=0;const qt=function(e){return Dt+=+e||1},Pt=qt;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Nt())).join(""))+"."}function Nt(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Ht(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Jt(e){return`${Nt()}.${e||Wt()}`}function Wt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:$n,str:$n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+$n("number",3);for(var r=0;rLt()))},word:Nt,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Nt()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Ht,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},cword:It,protocol:Gt,domain:Jt,tld:Wt,email:function(e){return`${Fn("lower")}.${Nt()}@${e||Nt()+"."+Wt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Jt()}/${Nt()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:$t,_randomDate:_t,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return $t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?_t(e,n).getTime():_t().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Nt())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Wr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Wr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},$e=function(e){return new xr(e,e)},_e="+",De='"+"',qe=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new sr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new sr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new sr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new wr(e.join(""))},qt=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+$r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt(Dr.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt($r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Hr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Nr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Wr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?$n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Jr=1;function Wr(e,n="",t={}){var r={path:t.path||[Jr],templatePath:t.templatePath||[Jr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Wr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Nr,normalizePath:Hr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Wr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa,this.$data=ta(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) +class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){return this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template)?(this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null):this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa,this.$data=ta(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -61,4 +61,4 @@ class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ - */;var xa={Handler:Kr,Random:rr,Util:Cn,XHR:ba,RE:zr,toJSONSchema:Yr,valid:Vr,heredoc:kn,setup:function(e){return ba.setup(e)},_mocked:Qr,version:"1.1.1-es6"};return ba&&(ba.Mock=xa),xa.mock=function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Kr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return ba&&(window.XMLHttpRequest=ba),Qr.$set({rurl:n,rtype:r,template:t}),xa},xa}(); + */;var xa={Handler:Kr,Random:rr,Util:Cn,XHR:ba,RE:zr,toJSONSchema:Yr,valid:Vr,heredoc:kn,setup:function(e){return ba.setup(e)},_mocked:Qr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Kr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return ba&&(window.XMLHttpRequest=ba),Qr.$set({rurl:n,rtype:r,template:t}),xa}};return xa}(); diff --git a/dist/mock.js b/dist/mock.js index b2aeca01..6125f9e7 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -52,7 +52,7 @@ var e="object"==typeof global&&global&&global.Object===Object&&global,n="object" //! cur:boolean 是划分概率的一个启动符号 return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Dn=Fn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=$n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Dn.to,Dn.get;var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in qn)if(qn.hasOwnProperty(l)){var i=qn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Hn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Jn={};function Wn(e,n){if(!(this instanceof Wn))return new Wn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Wn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Dn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Wn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Wn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Wn.prototype[e]=function(){if(this.model===e)return new Wn(this);if(arguments.length)return new Wn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Wn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Wn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Wn(t,e)}}}));var Zn=Wn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let $t=0;const _t=function(e){return $t+=+e||1},Dt=_t;function qt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=qt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=qt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=qt(12,18,e,n);return[...Array(t)].map((()=>Nt())).join("")+"。"}function Nt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Ht)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Jt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Wt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Jt;const Xt=Object.keys(Wt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},csentence:Lt,cparagraph:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Nt,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Wt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Wt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},$e=function(e){return new pr(e,e)},_e="+",De='"+"',qe=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new cr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new cr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new cr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new vr(e.join(""))},qt=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et($r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Hr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Hr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Jr={gen:Gr,extend:gn};function Wr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Wr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Wr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Wr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Hr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Nr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha,this.$data=ea(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) +class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){return this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template)?(this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null):this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha,this.$data=ea(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -61,4 +61,4 @@ class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/;var pa={Handler:Jr,Random:nr,Util:kn,XHR:da,RE:qr,toJSONSchema:Wr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6"};da&&(da.Mock=pa),pa.mock=function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Jr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa};export default pa; +*/;var pa={Handler:Jr,Random:nr,Util:kn,XHR:da,RE:qr,toJSONSchema:Wr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Jr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa}};export default pa; diff --git a/package.json b/package.json index 532d3387..a738e46b 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,8 @@ }, "scripts": { "dev": "rollup --config rollup.config.dev.js -w", - "build": "rollup --config rollup.config.build.js" - }, + "build": "rollup --config rollup.config.build.js", + "patch":"npm version patch && npm publish" }, "dependencies": { "color": "^3.1.3", "lodash-es": "^4.17.21", diff --git a/src/mock.js b/src/mock.js index 8e634164..ca0395c1 100644 --- a/src/mock.js +++ b/src/mock.js @@ -37,9 +37,6 @@ var Mock = { Mock.version = "1.1.1-es6"; -// 避免循环依赖 -if (XHR) XHR.Mock = Mock; - /* * Mock.mock( template ) * Mock.mock( function() ) diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 12add989..f59193e5 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -29,7 +29,7 @@ class MockXMLHttpRequest extends XMLHttpRequest { return null; } } - this._send(body); + return this._send(body); } get mock() { return this.$mock; From 7564b86486765a9103b9d59337077c3b580d0ea2 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 16 Jun 2021 16:09:43 +0800 Subject: [PATCH 26/65] 0.9.6 --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a738e46b..364ed4b8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.5", + "version": "0.9.6", "homepage": "http://mockjs.com/", "keywords": [ "mock", @@ -31,7 +31,8 @@ "scripts": { "dev": "rollup --config rollup.config.dev.js -w", "build": "rollup --config rollup.config.build.js", - "patch":"npm version patch && npm publish" }, + "patch": "npm version patch && npm publish" + }, "dependencies": { "color": "^3.1.3", "lodash-es": "^4.17.21", From ae9df78c99f64d807bf0140a5074306c38db6b43 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 16 Jun 2021 18:25:46 +0800 Subject: [PATCH 27/65] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20XHR=20=E5=AF=B9?= =?UTF-8?q?=E5=A4=96=E9=83=A8=20URL=20=E8=AF=B7=E6=B1=82=E4=B8=8D=E8=BF=94?= =?UTF-8?q?=E5=9B=9E=E6=95=B0=E6=8D=AE=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 6 +-- dist/mock.js | 8 +-- package.json | 3 +- src/mock/xhr/XMLHttpRequest/xhr.js | 80 ++++++++++++++---------------- test/fakeServer.js | 10 ++-- 5 files changed, 50 insertions(+), 57 deletions(-) diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 60f3b19f..c59c1688 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -48,11 +48,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!R(e)}function oe(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ie(e){return f(e)&&"[object Arguments]"==s(e)}var ce=Object.prototype,he=ce.hasOwnProperty,se=ce.propertyIsEnumerable,fe=ie(function(){return arguments}())?ie:function(e){return f(e)&&he.call(e,"callee")&&!se.call(e,"callee")};var me="object"==typeof exports&&exports&&!exports.nodeType&&exports,de=me&&"object"==typeof module&&module&&!module.nodeType&&module,pe=de&&de.exports===me?t.Buffer:void 0,be=(pe?pe.isBuffer:void 0)||function(){return!1},xe={};function ge(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ve="object"==typeof exports&&exports&&!exports.nodeType&&exports,ye=ve&&"object"==typeof module&&module&&!module.nodeType&&module,we=ye&&ye.exports===ve&&e.process,ke=function(){try{var e=ye&&ye.require&&ye.require("util").types;return e||we&&we.binding&&we.binding("util")}catch(e){}}(),Ae=ke&&ke.isTypedArray,Ce=Ae?ge(Ae):function(e){return f(e)&&re(e.length)&&!!xe[s(e)]},Me=Object.prototype.hasOwnProperty;function je(e,n){var t=p(e),r=!t&&fe(e),a=!t&&!r&&be(e),o=!t&&!r&&!a&&Ce(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Fe.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=ln();return un(e+a*(n-e+on("1e-"+((a+"").length-1))),n)}return an(e,n)}var hn=Math.ceil,sn=Math.max;var fn,mn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=sn(hn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=cn(t,r,!1);return parseFloat(cn(e,n,!0).toFixed(a))},Rn=function(e,n,t){ +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!R(e)}function oe(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ie(e){return f(e)&&"[object Arguments]"==s(e)}var ce=Object.prototype,he=ce.hasOwnProperty,se=ce.propertyIsEnumerable,fe=ie(function(){return arguments}())?ie:function(e){return f(e)&&he.call(e,"callee")&&!se.call(e,"callee")};var me="object"==typeof exports&&exports&&!exports.nodeType&&exports,de=me&&"object"==typeof module&&module&&!module.nodeType&&module,pe=de&&de.exports===me?t.Buffer:void 0,be=(pe?pe.isBuffer:void 0)||function(){return!1},xe={};function ge(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ve="object"==typeof exports&&exports&&!exports.nodeType&&exports,ye=ve&&"object"==typeof module&&module&&!module.nodeType&&module,we=ye&&ye.exports===ve&&e.process,ke=function(){try{var e=ye&&ye.require&&ye.require("util").types;return e||we&&we.binding&&we.binding("util")}catch(e){}}(),Ae=ke&&ke.isTypedArray,Ce=Ae?ge(Ae):function(e){return f(e)&&re(e.length)&&!!xe[s(e)]},Me=Object.prototype.hasOwnProperty;function je(e,n){var t=p(e),r=!t&&fe(e),a=!t&&!r&&be(e),o=!t&&!r&&!a&&Ce(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Fe.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=ln();return un(e+a*(n-e+on("1e-"+((a+"").length-1))),n)}return an(e,n)}var hn=Math.ceil,sn=Math.max;var fn,mn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=sn(hn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=cn(t,r,!1);return parseFloat(cn(e,n,!0).toFixed(a))},Rn=function(e,n,t){ //! cur:boolean 是划分概率的一个启动符号 -return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},$n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function _n(e,n){return e(n={exports:{}},n.exports),n.exports}var Dn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=_n((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=_n((function(e){var n={};for(var t in Dn)Dn.hasOwnProperty(t)&&(n[Dn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Dn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=qn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=qn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=qn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=qn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=qn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=_n((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Nn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Jn=["keyword","gray","hex"],Wn={};Object.keys(Un).forEach((function(e){Wn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Jn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Wn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Wn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Jn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return $t(_t(),e)}function $t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function _t(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let Dt=0;const qt=function(e){return Dt+=+e||1},Pt=qt;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Nt())).join(""))+"."}function Nt(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Ht(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Jt(e){return`${Nt()}.${e||Wt()}`}function Wt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:$n,str:$n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+$n("number",3);for(var r=0;rLt()))},word:Nt,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Nt()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Ht,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},cword:It,protocol:Gt,domain:Jt,tld:Wt,email:function(e){return`${Fn("lower")}.${Nt()}@${e||Nt()+"."+Wt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Jt()}/${Nt()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:$t,_randomDate:_t,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return $t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?_t(e,n).getTime():_t().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Nt())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Wr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Wr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Wr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Wr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},$e=function(e){return new xr(e,e)},_e="+",De='"+"',qe=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new sr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new sr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new sr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new wr(e.join(""))},qt=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+$r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt(Dr.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt($r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Hr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Nr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Wr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?$n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Jr=1;function Wr(e,n="",t={}){var r={path:t.path||[Jr],templatePath:t.templatePath||[Jr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Wr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Nr,normalizePath:Hr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Wr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; +return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},_n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function Dn(e,n){return e(n={exports:{}},n.exports),n.exports}var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=Dn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=Dn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=$n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=qn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=qn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=qn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=qn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=qn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=Dn((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Hn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Wn=["keyword","gray","hex"],Jn={};Object.keys(Un).forEach((function(e){Jn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Wn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Jn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Jn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Wn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return _t(Dt(),e)}function _t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function Dt(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let $t=0;const qt=function(e){return $t+=+e||1},Pt=qt;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Ht())).join(""))+"."}function Ht(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Nt(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Wt(e){return`${Ht()}.${e||Jt()}`}function Jt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:_n,str:_n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+_n("number",3);for(var r=0;rLt()))},word:Ht,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Ht()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Nt,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},cword:It,protocol:Gt,domain:Wt,tld:Jt,email:function(e){return`${Fn("lower")}.${Ht()}@${e||Ht()+"."+Jt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Wt()}/${Ht()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:_t,_randomDate:Dt,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return _t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Dt(e,n).getTime():Dt().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Ht())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Jr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Jr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},_e=function(e){return new xr(e,e)},De="+",$e='"+"',qe=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new sr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new sr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new sr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new wr(e.join(""))},qt=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+_r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt($r.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt(_r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Nr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Hr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Jr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?_n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Wr=1;function Jr(e,n="",t={}){var r={path:t.path||[Wr],templatePath:t.templatePath||[Wr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Jr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Hr,normalizePath:Nr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Jr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){return this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template)?(this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null):this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa,this.$data=ta(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) +class pa extends XMLHttpRequest{constructor(){super(...arguments),console.log(this)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa;const e=ta(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock diff --git a/dist/mock.js b/dist/mock.js index 6125f9e7..0f9298ab 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -48,11 +48,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return B.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!S(e)}function ae(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&X(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return f(e)&&"[object Arguments]"==s(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return f(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},be={};function xe(e){return function(n){return e(n)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?xe(ke):function(e){return f(e)&&te(e.length)&&!!be[s(e)]},Ce=Object.prototype.hasOwnProperty;function Me(e,n){var t=p(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=on();return an(e+a*(n-e+rn("1e-"+((a+"").length-1))),n)}return tn(e,n)}var ln=Math.ceil,cn=Math.max;var hn,sn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=cn(ln((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=un(t,r,!1);return parseFloat(un(e,n,!0).toFixed(a))},On=function(e,n,t){ +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return B.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!S(e)}function ae(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&X(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return f(e)&&"[object Arguments]"==s(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return f(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},be={};function xe(e){return function(n){return e(n)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?xe(ke):function(e){return f(e)&&te(e.length)&&!!be[s(e)]},Ce=Object.prototype.hasOwnProperty;function Me(e,n){var t=p(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=on();return an(e+a*(n-e+rn("1e-"+((a+"").length-1))),n)}return tn(e,n)}var ln=Math.ceil,cn=Math.max;var hn,sn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=cn(ln((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=un(t,r,!1);return parseFloat(un(e,n,!0).toFixed(a))},On=function(e,n,t){ //! cur:boolean 是划分概率的一个启动符号 -return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},_n=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Dn=Fn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=$n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=_n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=_n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=_n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=_n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=_n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Dn.to,Dn.get;var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in qn)if(qn.hasOwnProperty(l)){var i=qn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Hn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Jn={};function Wn(e,n){if(!(this instanceof Wn))return new Wn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Wn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Dn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Wn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Wn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Wn.prototype[e]=function(){if(this.model===e)return new Wn(this);if(arguments.length)return new Wn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Wn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Wn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Wn(t,e)}}}));var Zn=Wn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let $t=0;const _t=function(e){return $t+=+e||1},Dt=_t;function qt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=qt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=qt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=qt(12,18,e,n);return[...Array(t)].map((()=>Nt())).join("")+"。"}function Nt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Ht="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Ht)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Jt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Wt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Jt;const Xt=Object.keys(Wt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},csentence:Lt,cparagraph:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Nt,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Wt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Wt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>Pt||(Pt>Ht&&(Ht=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===$t?(t=$t,Pt+=2):(t=null,0===Bt&&o(_t)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Dt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},$e=function(e){return new pr(e,e)},_e="+",De='"+"',qe=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},Je="(",We='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",$n='"\\\\B"',_n=function(){return new cr("non-word-boundary")},Dn="\\d",qn='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new cr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Jn=function(){return new cr("line-feed")},Wn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},$t="\\u",_t='"\\\\u"',Dt=function(e){return new vr(e.join(""))},qt=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et($r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Hr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Hr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Jr={gen:Gr,extend:gn};function Wr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Wr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Wr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Wr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Hr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Nr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; +return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dn=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),$n=Fn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=_n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Dn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Dn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Dn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));$n.to,$n.get;var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in qn)if(qn.hasOwnProperty(l)){var i=qn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Nn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Wn={};function Jn(e,n){if(!(this instanceof Jn))return new Jn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Jn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=$n.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Jn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Jn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Jn.prototype[e]=function(){if(this.model===e)return new Jn(this);if(arguments.length)return new Jn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Jn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Jn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Jn(t,e)}}}));var Zn=Jn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let _t=0;const Dt=function(e){return _t+=+e||1},$t=Dt;function qt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=qt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=qt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=qt(12,18,e,n);return[...Array(t)].map((()=>Ht())).join("")+"。"}function Ht(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Nt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Nt)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Wt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Jt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Wt;const Xt=Object.keys(Jt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},csentence:Lt,cparagraph:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Ht,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Jt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Jt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},_e=function(e){return new pr(e,e)},De="+",$e='"+"',qe=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new cr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new cr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new cr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new vr(e.join(""))},qt=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et(_r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Nr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Nr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Wr={gen:Gr,extend:gn};function Jr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Jr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Jr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Jr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Nr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Hr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){return this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template)?(this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null):this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$type="get";$url="";$mock=!0;$timeout=1e3;$data=null;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha,this.$data=ea(this.$template,{}),this.response=JSON.stringify(this.$data,null,4),this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}$readyState=0;$status=200;$response="";$responseText="";$statusText="";set readyState(e){this.$readyState=e}get readyState(){return this.$readyState}set status(e){this.$status=e}get status(){return this.$status}set statusText(e){this.$statusText=e}get statusText(){return this.$statusText}get response(){return this.$response}set response(e){this.$response=e}set responseText(e){this.$responseText=e}get responseText(){return this.$responseText}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) +class ma extends XMLHttpRequest{constructor(){super(...arguments),console.log(this)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha;const e=ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -61,4 +61,4 @@ class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/;var pa={Handler:Jr,Random:nr,Util:kn,XHR:da,RE:qr,toJSONSchema:Wr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Jr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa}};export default pa; +*/;var pa={Handler:Wr,Random:nr,Util:kn,XHR:da,RE:qr,toJSONSchema:Jr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Wr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa}};export default pa; diff --git a/package.json b/package.json index 364ed4b8..4be479cb 100644 --- a/package.json +++ b/package.json @@ -30,8 +30,7 @@ }, "scripts": { "dev": "rollup --config rollup.config.dev.js -w", - "build": "rollup --config rollup.config.build.js", - "patch": "npm version patch && npm publish" + "build": "rollup --config rollup.config.build.js" }, "dependencies": { "color": "^3.1.3", diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index f59193e5..36e923a2 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -1,5 +1,6 @@ // 使用不完全覆盖的方式,使用继承方式继承所有的属性 // 只在 send 方式调用的时候对其进行数据返回 +import { array } from "../../handle/array.js"; import { find, convert } from "../ajax-tools.js"; import HTTP_STATUS_CODES from "./constant.js"; @@ -8,9 +9,31 @@ const OPEN = XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 +// 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, +// 也不可以在 XHR 实例上定义 +// 这样的话会导致无法接收到数据 +// 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 +const defineGetAndSet = function (what) { + const array = ["readyState", "status", "response", "responseText", "statusText"]; + Object.defineProperties( + what, + array.reduce((col, cur) => { + col[cur] = { + get() { + return this.$Mock[cur]; + }, + set: function (state) { + this.$Mock[cur] = state; + }, + }; + return col; + }, {}) + ); +}; class MockXMLHttpRequest extends XMLHttpRequest { constructor() { super(...arguments); + console.log(this); } _send = SEND; _open = OPEN; @@ -24,12 +47,14 @@ class MockXMLHttpRequest extends XMLHttpRequest { if (this.$mock) { this.$template = find({ url: this.$url, type: this.$type }); if (this.$template) { + defineGetAndSet(this); this.dispatchEvent(new Event("loadstart")); + setTimeout(this.$done.bind(this), this.$timeout); return null; } } - return this._send(body); + this._send(body); } get mock() { return this.$mock; @@ -37,12 +62,17 @@ class MockXMLHttpRequest extends XMLHttpRequest { set mock(value) { if (typeof value === "boolean") this.$mock = value; } - + $Mock = { + // 原生属性的 getter 和 setter + readyState: 0, + status: 200, + response: "", + responseText: "", + statusText: "", + }; $type = "get"; $url = ""; $mock = true; - $timeout = 1000; - $data = null; $template = null; $done() { @@ -53,51 +83,13 @@ class MockXMLHttpRequest extends XMLHttpRequest { this.status = 200; this.statusText = HTTP_STATUS_CODES[200]; - this.$data = convert(this.$template, {}); - this.response = JSON.stringify(this.$data, null, 4); + const data = convert(this.$template, {}); + this.response = data; this.responseText = this.response; this.readyState = this.DONE; this.dispatchEvent(new Event("readystatechange")); this.dispatchEvent(new Event("load")); this.dispatchEvent(new Event("loadend")); } - - // 原生属性的 getter 和 setter - $readyState = 0; - $status = 200; - $response = ""; - $responseText = ""; - $statusText = ""; - set readyState(state) { - this.$readyState = state; - } - get readyState() { - return this.$readyState; - } - set status(code) { - this.$status = code; - } - get status() { - return this.$status; - } - set statusText(code) { - this.$statusText = code; - } - get statusText() { - return this.$statusText; - } - - get response() { - return this.$response; - } - set response(code) { - this.$response = code; - } - set responseText(code) { - this.$responseText = code; - } - get responseText() { - return this.$responseText; - } } export { MockXMLHttpRequest }; diff --git a/test/fakeServer.js b/test/fakeServer.js index 2ccdea5e..940c1f14 100644 --- a/test/fakeServer.js +++ b/test/fakeServer.js @@ -10,8 +10,10 @@ Mock.mock("fake/file", { }, ], }); +axios.get("fake/file").then((res) => console.warn(res)); +axios.get("https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json").then((res) => console.warn({ res })); -axios.get("fake/file").then((res) => console.log(res)); -fetch("fake/file") - .then((res) => res.json()) - .then(console.log); +// fetch("fake/file") +// .then((res) => res.json()) +// .then(console.log); +// fetch("https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json").then((res) => console.log("fetch", res)); From 7d19bf89707acc66a3f399244a3c613b8c61de12 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Sat, 19 Jun 2021 20:20:48 +0800 Subject: [PATCH 28/65] 2021/6/19 --- dist/Mock.min.js | 6 +++--- dist/mock.js | 8 ++++---- package.json | 2 +- src/mock/xhr/XMLHttpRequest/xhr.js | 3 +-- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/dist/Mock.min.js b/dist/Mock.min.js index c59c1688..42bca5f9 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -48,11 +48,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!R(e)}function oe(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ie(e){return f(e)&&"[object Arguments]"==s(e)}var ce=Object.prototype,he=ce.hasOwnProperty,se=ce.propertyIsEnumerable,fe=ie(function(){return arguments}())?ie:function(e){return f(e)&&he.call(e,"callee")&&!se.call(e,"callee")};var me="object"==typeof exports&&exports&&!exports.nodeType&&exports,de=me&&"object"==typeof module&&module&&!module.nodeType&&module,pe=de&&de.exports===me?t.Buffer:void 0,be=(pe?pe.isBuffer:void 0)||function(){return!1},xe={};function ge(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ve="object"==typeof exports&&exports&&!exports.nodeType&&exports,ye=ve&&"object"==typeof module&&module&&!module.nodeType&&module,we=ye&&ye.exports===ve&&e.process,ke=function(){try{var e=ye&&ye.require&&ye.require("util").types;return e||we&&we.binding&&we.binding("util")}catch(e){}}(),Ae=ke&&ke.isTypedArray,Ce=Ae?ge(Ae):function(e){return f(e)&&re(e.length)&&!!xe[s(e)]},Me=Object.prototype.hasOwnProperty;function je(e,n){var t=p(e),r=!t&&fe(e),a=!t&&!r&&be(e),o=!t&&!r&&!a&&Ce(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Fe.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=ln();return un(e+a*(n-e+on("1e-"+((a+"").length-1))),n)}return an(e,n)}var hn=Math.ceil,sn=Math.max;var fn,mn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=sn(hn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=cn(t,r,!1);return parseFloat(cn(e,n,!0).toFixed(a))},Rn=function(e,n,t){ +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!R(e)}function oe(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ie(e){return f(e)&&"[object Arguments]"==s(e)}var ce=Object.prototype,he=ce.hasOwnProperty,se=ce.propertyIsEnumerable,fe=ie(function(){return arguments}())?ie:function(e){return f(e)&&he.call(e,"callee")&&!se.call(e,"callee")};var me="object"==typeof exports&&exports&&!exports.nodeType&&exports,de=me&&"object"==typeof module&&module&&!module.nodeType&&module,pe=de&&de.exports===me?t.Buffer:void 0,be=(pe?pe.isBuffer:void 0)||function(){return!1},xe={};function ge(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ve="object"==typeof exports&&exports&&!exports.nodeType&&exports,ye=ve&&"object"==typeof module&&module&&!module.nodeType&&module,we=ye&&ye.exports===ve&&e.process,ke=function(){try{var e=ye&&ye.require&&ye.require("util").types;return e||we&&we.binding&&we.binding("util")}catch(e){}}(),Ae=ke&&ke.isTypedArray,Ce=Ae?ge(Ae):function(e){return f(e)&&re(e.length)&&!!xe[s(e)]},Me=Object.prototype.hasOwnProperty;function je(e,n){var t=p(e),r=!t&&fe(e),a=!t&&!r&&be(e),o=!t&&!r&&!a&&Ce(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Fe.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=ln();return un(e+a*(n-e+on("1e-"+((a+"").length-1))),n)}return an(e,n)}var hn=Math.ceil,sn=Math.max;var fn,mn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=sn(hn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=cn(t,r,!1);return parseFloat(cn(e,n,!0).toFixed(a))},Rn=function(e,n,t){ //! cur:boolean 是划分概率的一个启动符号 -return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},_n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function Dn(e,n){return e(n={exports:{}},n.exports),n.exports}var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},qn=Dn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=Dn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=$n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=qn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=qn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=qn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=qn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=qn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=Dn((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Hn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Wn=["keyword","gray","hex"],Jn={};Object.keys(Un).forEach((function(e){Jn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Wn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Jn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Jn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Wn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return _t(Dt(),e)}function _t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function Dt(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let $t=0;const qt=function(e){return $t+=+e||1},Pt=qt;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Ht())).join(""))+"."}function Ht(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Nt(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Wt(e){return`${Ht()}.${e||Jt()}`}function Jt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:_n,str:_n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+_n("number",3);for(var r=0;rLt()))},word:Ht,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Ht()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Nt,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},cword:It,protocol:Gt,domain:Wt,tld:Jt,email:function(e){return`${Fn("lower")}.${Ht()}@${e||Ht()+"."+Jt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Wt()}/${Ht()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:_t,_randomDate:Dt,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return _t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Dt(e,n).getTime():Dt().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Ht())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Jr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Jr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},_e=function(e){return new xr(e,e)},De="+",$e='"+"',qe=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new sr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new sr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new sr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new wr(e.join(""))},qt=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+_r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt($r.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt(_r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Nr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Hr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Jr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?_n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Wr=1;function Jr(e,n="",t={}){var r={path:t.path||[Wr],templatePath:t.templatePath||[Wr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Jr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Hr,normalizePath:Nr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Jr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; +return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},_n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function Dn(e,n){return e(n={exports:{}},n.exports),n.exports}var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},$n=Dn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=Dn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=qn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=$n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=$n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=$n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=$n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=$n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=Dn((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Hn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Wn=["keyword","gray","hex"],Jn={};Object.keys(Un).forEach((function(e){Jn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Wn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Jn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Jn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Wn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return _t(Dt(),e)}function _t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function Dt(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let qt=0;const $t=function(e){return qt+=+e||1},Pt=$t;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Ht())).join(""))+"."}function Ht(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Nt(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Wt(e){return`${Ht()}.${e||Jt()}`}function Jt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:_n,str:_n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+_n("number",3);for(var r=0;rLt()))},word:Ht,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Ht()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Nt,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},cword:It,protocol:Gt,domain:Wt,tld:Jt,email:function(e){return`${Fn("lower")}.${Ht()}@${e||Ht()+"."+Jt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Wt()}/${Ht()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:_t,_randomDate:Dt,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return _t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Dt(e,n).getTime():Dt().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Ht())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Jr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Jr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},_e=function(e){return new xr(e,e)},De="+",qe='"+"',$e=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new sr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new sr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new sr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new wr(e.join(""))},$t=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+_r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt(qr.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt(_r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Nr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Hr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Jr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?_n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Wr=1;function Jr(e,n="",t={}){var r={path:t.path||[Wr],templatePath:t.templatePath||[Wr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Jr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Hr,normalizePath:Nr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Jr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class pa extends XMLHttpRequest{constructor(){super(...arguments),console.log(this)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa;const e=ta(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) +class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa;const e=ta(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock diff --git a/dist/mock.js b/dist/mock.js index 0f9298ab..2cfc3c0e 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -48,11 +48,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return B.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!S(e)}function ae(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&X(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return f(e)&&"[object Arguments]"==s(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return f(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},be={};function xe(e){return function(n){return e(n)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?xe(ke):function(e){return f(e)&&te(e.length)&&!!be[s(e)]},Ce=Object.prototype.hasOwnProperty;function Me(e,n){var t=p(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=on();return an(e+a*(n-e+rn("1e-"+((a+"").length-1))),n)}return tn(e,n)}var ln=Math.ceil,cn=Math.max;var hn,sn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=cn(ln((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=un(t,r,!1);return parseFloat(un(e,n,!0).toFixed(a))},On=function(e,n,t){ +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return B.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!S(e)}function ae(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&X(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return f(e)&&"[object Arguments]"==s(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return f(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},be={};function xe(e){return function(n){return e(n)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?xe(ke):function(e){return f(e)&&te(e.length)&&!!be[s(e)]},Ce=Object.prototype.hasOwnProperty;function Me(e,n){var t=p(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=on();return an(e+a*(n-e+rn("1e-"+((a+"").length-1))),n)}return tn(e,n)}var ln=Math.ceil,cn=Math.max;var hn,sn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=cn(ln((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=un(t,r,!1);return parseFloat(un(e,n,!0).toFixed(a))},On=function(e,n,t){ //! cur:boolean 是划分概率的一个启动符号 -return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dn=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),$n=Fn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=_n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Dn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Dn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Dn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));$n.to,$n.get;var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in qn)if(qn.hasOwnProperty(l)){var i=qn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Nn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Wn={};function Jn(e,n){if(!(this instanceof Jn))return new Jn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Jn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=$n.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Jn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Jn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Jn.prototype[e]=function(){if(this.model===e)return new Jn(this);if(arguments.length)return new Jn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Jn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Jn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Jn(t,e)}}}));var Zn=Jn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let _t=0;const Dt=function(e){return _t+=+e||1},$t=Dt;function qt(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=qt(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=qt(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=qt(12,18,e,n);return[...Array(t)].map((()=>Ht())).join("")+"。"}function Ht(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Nt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Nt)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Wt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Jt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Wt;const Xt=Object.keys(Jt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},csentence:Lt,cparagraph:function(e,n){var t=qt(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Ht,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Jt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Jt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},_e=function(e){return new pr(e,e)},De="+",$e='"+"',qe=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new cr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new cr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new cr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new vr(e.join(""))},qt=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et(_r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Nr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Nr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Wr={gen:Gr,extend:gn};function Jr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Jr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Jr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Jr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Nr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Hr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; +return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dn=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),qn=Fn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=_n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Dn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Dn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Dn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));qn.to,qn.get;var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in $n)if($n.hasOwnProperty(l)){var i=$n[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Nn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Wn={};function Jn(e,n){if(!(this instanceof Jn))return new Jn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Jn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=qn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Jn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Jn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Jn.prototype[e]=function(){if(this.model===e)return new Jn(this);if(arguments.length)return new Jn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Jn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Jn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Jn(t,e)}}}));var Zn=Jn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let _t=0;const Dt=function(e){return _t+=+e||1},qt=Dt;function $t(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=$t(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=$t(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=$t(12,18,e,n);return[...Array(t)].map((()=>Ht())).join("")+"。"}function Ht(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Nt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Nt)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Wt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Jt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Wt;const Xt=Object.keys(Jt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=$t(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=$t(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},csentence:Lt,cparagraph:function(e,n){var t=$t(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Ht,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Jt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Jt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},_e=function(e){return new pr(e,e)},De="+",qe='"+"',$e=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new cr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new cr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new cr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new vr(e.join(""))},$t=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et(_r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Nr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Nr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Wr={gen:Gr,extend:gn};function Jr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Jr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Jr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Jr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Nr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Hr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class ma extends XMLHttpRequest{constructor(){super(...arguments),console.log(this)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.$timeout),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha;const e=ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) +class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha;const e=ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -61,4 +61,4 @@ class ma extends XMLHttpRequest{constructor(){super(...arguments),console.log(th 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/;var pa={Handler:Wr,Random:nr,Util:kn,XHR:da,RE:qr,toJSONSchema:Jr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Wr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa}};export default pa; +*/;var pa={Handler:Wr,Random:nr,Util:kn,XHR:da,RE:$r,toJSONSchema:Jr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Wr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa}};export default pa; diff --git a/package.json b/package.json index 4be479cb..e54bc66e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.6", + "version": "0.9.8", "homepage": "http://mockjs.com/", "keywords": [ "mock", diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 36e923a2..8ad14910 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -33,7 +33,6 @@ const defineGetAndSet = function (what) { class MockXMLHttpRequest extends XMLHttpRequest { constructor() { super(...arguments); - console.log(this); } _send = SEND; _open = OPEN; @@ -50,7 +49,7 @@ class MockXMLHttpRequest extends XMLHttpRequest { defineGetAndSet(this); this.dispatchEvent(new Event("loadstart")); - setTimeout(this.$done.bind(this), this.$timeout); + setTimeout(this.$done.bind(this), this.timeout || 100); return null; } } From 5f13836245e25890d1af7cae17cdaab3cc10b034 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Fri, 25 Jun 2021 20:03:35 +0800 Subject: [PATCH 29/65] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AE=8C=E4=BC=A0?= =?UTF-8?q?=E5=85=A5=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF=20BUG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BUG.md | 2 + dist/Mock.min.js | 8 +- dist/mock.js | 8 +- src/mock/handle/placeholder.js | 28 +- src/mock/random/address.js | 2 +- src/mock/random/basic/boolean.js | 3 +- src/mock/random/basic/character.js | 4 +- src/mock/random/basic/string.js | 3 +- src/mock/random/helper.js | 22 +- src/mock/random/text/range.js | 4 +- src/mock/random/text/text-ch.js | 24 +- src/mock/random/text/text_en.js | 26 +- test/test.js | 865 +++++++++++++++++------------ 13 files changed, 584 insertions(+), 415 deletions(-) create mode 100644 BUG.md diff --git a/BUG.md b/BUG.md new file mode 100644 index 00000000..04694527 --- /dev/null +++ b/BUG.md @@ -0,0 +1,2 @@ +@csentanse 有误 +@image \ No newline at end of file diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 42bca5f9..49c71d2e 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -48,11 +48,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!R(e)}function oe(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ie(e){return f(e)&&"[object Arguments]"==s(e)}var ce=Object.prototype,he=ce.hasOwnProperty,se=ce.propertyIsEnumerable,fe=ie(function(){return arguments}())?ie:function(e){return f(e)&&he.call(e,"callee")&&!se.call(e,"callee")};var me="object"==typeof exports&&exports&&!exports.nodeType&&exports,de=me&&"object"==typeof module&&module&&!module.nodeType&&module,pe=de&&de.exports===me?t.Buffer:void 0,be=(pe?pe.isBuffer:void 0)||function(){return!1},xe={};function ge(e){return function(n){return e(n)}}xe["[object Float32Array]"]=xe["[object Float64Array]"]=xe["[object Int8Array]"]=xe["[object Int16Array]"]=xe["[object Int32Array]"]=xe["[object Uint8Array]"]=xe["[object Uint8ClampedArray]"]=xe["[object Uint16Array]"]=xe["[object Uint32Array]"]=!0,xe["[object Arguments]"]=xe["[object Array]"]=xe["[object ArrayBuffer]"]=xe["[object Boolean]"]=xe["[object DataView]"]=xe["[object Date]"]=xe["[object Error]"]=xe["[object Function]"]=xe["[object Map]"]=xe["[object Number]"]=xe["[object Object]"]=xe["[object RegExp]"]=xe["[object Set]"]=xe["[object String]"]=xe["[object WeakMap]"]=!1;var ve="object"==typeof exports&&exports&&!exports.nodeType&&exports,ye=ve&&"object"==typeof module&&module&&!module.nodeType&&module,we=ye&&ye.exports===ve&&e.process,ke=function(){try{var e=ye&&ye.require&&ye.require("util").types;return e||we&&we.binding&&we.binding("util")}catch(e){}}(),Ae=ke&&ke.isTypedArray,Ce=Ae?ge(Ae):function(e){return f(e)&&re(e.length)&&!!xe[s(e)]},Me=Object.prototype.hasOwnProperty;function je(e,n){var t=p(e),r=!t&&fe(e),a=!t&&!r&&be(e),o=!t&&!r&&!a&&Ce(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Fe.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=ln();return un(e+a*(n-e+on("1e-"+((a+"").length-1))),n)}return an(e,n)}var hn=Math.ceil,sn=Math.max;var fn,mn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=sn(hn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=cn(t,r,!1);return parseFloat(cn(e,n,!0).toFixed(a))},Rn=function(e,n,t){ +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++J>=800)return arguments[0]}else J=0;return W.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function Z(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ue(e){return null!=e&&oe(e.length)&&!T(e)}function le(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ue(t)&&Z(n,t.length):"string"==r&&n in t)&&ee(t[n],e)}var ie=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ie)}function he(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=qe.length>3&&"function"==typeof a?(r--,a):void 0,o&&le(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function rn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Fe(e))}var an=Ce&&Ce.isRegExp,on=an?we(an):function(e){return f(e)&&"[object RegExp]"==s(e)},un=Math.floor,ln=Math.random;function cn(e,n){return e+un(ln()*(n-e+1))}var hn=parseFloat,sn=Math.min,fn=Math.random;function mn(e,n,t){if(t&&"boolean"!=typeof t&&le(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=O(e),void 0===n?(n=e,e=0):n=O(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=fn();return sn(e+a*(n-e+hn("1e-"+((a+"").length-1))),n)}return cn(e,n)}var dn=Math.ceil,pn=Math.max;var bn,xn=function(e,n,t){return t&&"number"!=typeof t&&le(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=pn(dn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=On,a=Sn(e,On);e-=On;for(var o=he(a,n="function"==typeof(t=n)?t:R);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=mn(t,r,!1);return parseFloat(mn(e,n,!0).toFixed(a))},Bn=function(e,n,t=!1){ //! cur:boolean 是划分概率的一个启动符号 -return t?cn(0,e+n)>e?!t:t:cn(10,-10)>0},Tn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Tn.alpha=Tn.lower+Tn.upper,Tn.default=Tn.lower+Tn.upper+Tn.number+Tn.symbol;const Fn=function(e="default"){return Tn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Tn[e.toLowerCase()]),e.charAt(On(0,e.length-1))},_n=function(...e){var n,t,r,a;switch(e.length){case 0:n=On(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=On(r,a));break;case 3:[t,r,a]=e,n=On(r,a)}return[...Array(n).keys()].map((()=>Fn(t))).join("")};function Dn(e,n){return e(n={exports:{}},n.exports),n.exports}var qn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},$n=Dn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Pn=Dn((function(e){var n={};for(var t in qn)qn.hasOwnProperty(t)&&(n[qn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=qn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=$n(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=$n(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=$n(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=$n(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=$n(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Pn.to,Pn.get;var zn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Ln=Dn((function(e){var n={};for(var t in zn)zn.hasOwnProperty(t)&&(n[zn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in zn)if(zn.hasOwnProperty(l)){var i=zn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Hn(e){var n=function(){for(var e={},n=Object.keys(Ln),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Un=Bn,Gn=[].slice,Wn=["keyword","gray","hex"],Jn={};Object.keys(Un).forEach((function(e){Jn[Gn.call(Un[e].labels).sort().join("")]=e}));var Kn={};function Yn(e,n){if(!(this instanceof Yn))return new Yn(e,n);if(n&&n in Wn&&(n=null),n&&!(n in Un))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Yn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Pn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Un[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Un[this.model].channels;var o=Gn.call(e,0,r);this.color=Qn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Jn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Jn[l];var i=Un[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Yn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Yn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Un).forEach((function(e){if(-1===Wn.indexOf(e)){var n=Un[e].channels;Yn.prototype[e]=function(){if(this.model===e)return new Yn(this);if(arguments.length)return new Yn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Yn(Zn(Un[this.model][e].raw(this.color)).concat(t),e)},Yn[e]=function(t){return"number"==typeof t&&(t=Qn(Gn.call(arguments),n)),new Yn(t,e)}}}));var et=Yn,nt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const tt=function(e,n,t){return void 0===n&&void 0===t?e[On(0,e.length-1)]:void 0!==n&&void 0!==t?rt(e,n,t):rt(e,0,n)},rt=function(e,n,t){let r=xn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},at={},ot=function(...e){1===e.length&&(e=e[0]);var n=ot.options.context.templatePath.join("."),t=at[n]=at[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var ut=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let lt;function it(e,n){return lt=lt||Math.random(),lt+=.618033988749895,lt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),et.hsv(360*lt,100*e,100*n)}function ct(){return it().hex()}var ht={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:st,lastName:ft,cfirstName:mt,clastName:dt}=ht;function pt(){var e=st.male.concat();return tt(e)}function bt(){return tt(ft)}function xt(){return tt(mt)}function gt(){return tt(dt)}var vt,yt=new Uint8Array(16);function wt(){if(!vt&&!(vt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return vt(yt)}var kt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function At(e){return"string"==typeof e&&kt.test(e)}for(var Ct=[],Mt=0;Mt<256;++Mt)Ct.push((Mt+256).toString(16).substr(1));function jt(e,n,t){var r=(e=e||{}).random||(e.rng||wt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Ct[e[n+0]]+Ct[e[n+1]]+Ct[e[n+2]]+Ct[e[n+3]]+"-"+Ct[e[n+4]]+Ct[e[n+5]]+"-"+Ct[e[n+6]]+Ct[e[n+7]]+"-"+Ct[e[n+8]]+Ct[e[n+9]]+"-"+Ct[e[n+10]]+Ct[e[n+11]]+Ct[e[n+12]]+Ct[e[n+13]]+Ct[e[n+14]]+Ct[e[n+15]]).toLowerCase();if(!At(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Et={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ot=Object.keys(Et),St=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Et).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ot.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Rt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Tt=new RegExp(`(${Object.keys(Rt).join("|")})`,"g");function Ft(e="yyyy-MM-dd"){return _t(Dt(),e)}function _t(e,n){return n.replace(Tt,(function n(t,r){let a=Rt[r];return"function"==typeof a?a(e):a in Rt?n(t,a):e[a]()}))}function Dt(e=new Date(0),n=new Date){return new Date(En(e.getTime(),n.getTime()))}let qt=0;const $t=function(e){return qt+=+e||1},Pt=$t;function zt(e,n,t,r){return void 0===t?On(e,n):void 0===r?t:On(parseInt(t,10),parseInt(r,10))}function Lt(e,n){var t=zt(12,18,e,n);return Ze([...Array(t)].map((()=>Ht())).join(""))+"."}function Ht(e,n){var t=zt(3,10,e,n);return[...Array(t)].map((()=>Fn("lower"))).join("")}function Nt(e,n){var t=zt(12,18,e,n);return[...Array(t)].map((()=>It())).join("")+"。"}function It(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=On(n,t));break;case 3:[a,n,t]=e,r=On(n,t)}const o=a.length;return 1===r?a.charAt(On(0,o)):[...Array(r)].map((()=>a.charAt(On(0,o)))).join("")}const Bt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Ut="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Gt(){return tt(Bt)}function Wt(e){return`${Ht()}.${e||Jt()}`}function Jt(){return tt(Ut)}var Kt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Yt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Vt,_screenSize:Xt,_videoSize:Zt}=Kt;const Qt=Object.keys(Yt);function er(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=tt(Vt)),r=(r||ct()).replace(/^#/,""),t=(t||ct()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var nr=["东北","华北","华东","华中","华南","西南","西北"];function tr(e){let n;switch(gn(e)){case"array":n=e;default:n=[e]}return n}var rr=Object.freeze({__proto__:null,integer:En,isNumber:Mn,random:cn,natural:On,int:En,float:Sn,boolean:Rn,bool:Rn,character:Fn,char:Fn,string:_n,str:_n,range:mn,color:function(e){return e||nt[e]?nt[e].nicer:tt(ut).hex},hex:ct,rgb:function(){return it().hsv().string()},rgba:function(){return it().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return it().hsl().string()},_goldenRatioColor:it,first:pt,last:bt,name:function(e){return e=e?` ${pt()} `:" ",`${pt()}${e}${bt()}`},cfirst:xt,clast:gt,cname:function(){return xt()+gt()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:tt,shuffle:rt,order:ot,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return jt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:jt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=tt(St).id+Ft("yyyyMMdd")+_n("number",3);for(var r=0;rLt()))},word:Ht,sentence:Lt,title:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Ze(Ht()))).join("")},ctitle:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>It())).join("")},csentence:Nt,cparagraph:function(e,n){var t=zt(3,7,e,n);return[...Array(t)].map((()=>Nt())).join("")},cword:It,protocol:Gt,domain:Wt,tld:Jt,email:function(e){return`${Fn("lower")}.${Ht()}@${e||Ht()+"."+Jt()}`},ip:function(){return[...Array(4)].map((()=>On(0,255))).join(".")},url:function(e,n){return`${e||Gt()}://${n||Wt()}/${Ht()}`},_patternLetters:Rt,_rformat:Tt,_formatDate:_t,_randomDate:Dt,time:function(e="HH:mm:ss"){return Ft(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ft(e)},date:Ft,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return _t(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Dt(e,n).getTime():Dt().getTime()},_adSize:Vt,_screenSize:Xt,_videoSize:Zt,image:er,img:er,_brandColors:Yt,_brandNames:Qt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=tt(Vt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Yt[tt(Qt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return tt(nr)},province:function(){return tt(St).name},city:function(e){var n=tt(St),t=tt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=tt(St),t=tt(n.children),r=tt(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=On(0,9);return n},genFile:function(e){return new File(tr(e),Ht())},genBlob:function(){return new Blob(tr(anyData))}}),ar={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function or(e=""){"string"!=typeof e&&(e+="");var n=e.match(ar.RE_KEY),t=n&&n[3]&&n[3].match(ar.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?En(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(ar.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||En(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ur({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=tt(Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Jr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Jr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Jr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function lr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Rn(n,e,r):r}function ir(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function cr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Sn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function hr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=rt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(ar.RE_KEY,"$1");l[t]=Jr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(ar.RE_KEY);i&&i[2]&&"number"===gn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function sr(e){this.type=e,this.offset=sr.offset(),this.text=sr.text()}function fr(e,n){sr.call(this,"alternate"),this.left=e,this.right=n}function mr(e){sr.call(this,"match"),this.body=e.filter(Boolean)}function dr(e,n){sr.call(this,e),this.body=n}function pr(e){dr.call(this,"capture-group"),this.index=Or[this.offset]||(Or[this.offset]=Er++),this.body=e}function br(e,n){sr.call(this,"quantified"),this.body=e,this.quantifier=n}function xr(e,n){sr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function gr(e,n){sr.call(this,"charset"),this.invert=e,this.body=n}function vr(e,n){sr.call(this,"range"),this.start=e,this.end=n}function yr(e){sr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function wr(e){sr.call(this,"unicode"),this.code=e.toUpperCase()}function kr(e){sr.call(this,"hex"),this.code=e.toUpperCase()}function Ar(e){sr.call(this,"octal"),this.code=e.toUpperCase()}function Cr(e){sr.call(this,"back-reference"),this.code=e.toUpperCase()}function Mr(e){sr.call(this,"control-character"),this.code=e.toUpperCase()}var jr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new fr(e,n[1]):e},me=function(e,n,t){return new mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new sr("start")},xe="$",ge='"$"',ve=function(){return new sr("end")},ye=function(e,n){return new br(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new xr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new xr(e,1/0)},_e=function(e){return new xr(e,e)},De="+",qe='"+"',$e=function(){return new xr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new xr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new xr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new pr(e)},Ze="?:",Qe='"?:"',en=function(e){return new dr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new dr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new dr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new gr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new vr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new yr(e)},kn=".",An='"."',Cn=function(){return new sr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new sr("backspace")},Tn=function(){return new sr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new sr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new sr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new sr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new sr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new sr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new sr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new sr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new sr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new sr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new sr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new sr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new sr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Mr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Cr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Ar(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new kr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new wr(e.join(""))},$t=function(){return new sr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(sr.offset=r,sr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Sr.gen=function(e,n,t){return t=t||{guid:1},Sr[e.type]?Sr[e.type](e,n,t):Sr.token(e,n,t)},Sr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Fn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return tt(Fr.split(""));case"non-digit":return tt((Rr+Tr+_r).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return tt(qr.split(""));case"non-white-space":return tt((Rr+Tr+Fr).split(""));case"tab":case"vertical-tab":break;case"word":return tt((Rr+Tr+Fr).split(""));case"non-word":return tt(_r.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Rn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Nr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Hr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Jr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in rr)&&!(u in rr))return e;o=o.map((e=>(ar.RE_PLACEHOLDER.exec(""),ar.RE_PLACEHOLDER.test(e)?Br(e,n,t,r):e)));var i=rr[a]||rr[u];switch(gn(i)){case"array":return tt(i);case"function":i.options=r;var c=i.apply(rr,o)||"";return delete i.options,c}}function Ur(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(ar.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Br(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return vn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?_n(t):o;return u}var Gr=Object.freeze({__proto__:null,array:ur,boolean:lr,function:ir,number:cr,object:hr,regexp:Lr,string:Ur});let Wr=1;function Jr(e,n="",t={}){var r={path:t.path||[Wr],templatePath:t.templatePath||[Wr++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=gn(e);let o=Gr[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(ar.RE_KEY,"$1"):n,rule:or(n),context:r}),r.root||(r.root=u),u):e}var Kr={gen:Jr,extend:yn};function Yr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(ar.RE_KEY,"$1"):n,template:e,type:gn(e),rule:or.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Yr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Yr(e,n,r.path)))}return r}function Vr(e,n){for(var t=Yr(e),r=Xr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Br,getValueByKeyPath:Hr,normalizePath:Nr,splitPathToArray:Ir});var Xr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Zr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(ar.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Zr.equal("type",e.path,gn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Zr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(ar.RE_PLACEHOLDER))return r.length===o}return Zr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Zr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Zr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Zr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Zr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Zr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Zr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Zr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Zr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=An(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Zr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Zr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Zr.equal("properties length",e.path,u.length,o.min,r)):Zr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Zr.message(u),a.push(u),!1}};Vr.Diff=Xr,Vr.Assert=Zr;const Qr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ea({url:e,type:n}){for(var t in n=n.toLowerCase(),Qr){var r=Qr[t];let{rurl:a,rtype:o}=r;if(na(a,e)&&na(o,n))return r}return!1}function na(e,n){switch(gn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ta({template:e},n){return R(e)?e(n):Jr(e)}const ra=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],aa=Symbol("Body internals"),oa=Symbol("Response internals");async function ua(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class la{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):ra(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[aa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[aa].body}get bodyUsed(){return this[aa].disturbed}async arrayBuffer(){return(await ua(this[aa])).arrayBuffer()}async blob(){return ua(this[aa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ua(this[aa])).text()}}Object.defineProperties(la.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ia=new Set([301,302,303,307,308]);class ca extends la{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":ra(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[oa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[oa].type}get url(){return this[oa].url||""}get status(){return this[oa].status}get ok(){return this[oa].status>=200&&this[oa].status<300}get redirected(){return this[oa].counter>0}get statusText(){return this[oa].statusText}get headers(){return this[oa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ia.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[oa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ha=window.fetch;async function sa(e,n={}){if(!0===window.fetch.$mock){let t=ea({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ta(t,{});return console.warn("mock代理中"),new ca(e,n)}}return console.warn("未使用 mockjs"),ha(e,n)}var fa="OK";let ma=XMLHttpRequest.prototype.send;const da=XMLHttpRequest.prototype.open; +return t?mn(0,e+n)>e?!t:t:mn(10,-10)>0},Un={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Un.alpha=Un.lower+Un.upper,Un.default=Un.lower+Un.upper+Un.number+Un.symbol;const Gn=function(e="default"){return Un.hasOwnProperty(e.toLocaleLowerCase())&&(e=Un[e.toLowerCase()]),yn(e)},Wn=function(...e){var n,t,r,a;switch(e.length){case 0:n=Nn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Nn(r,a));break;case 3:[t,r,a]=e,n=Nn(r,a)}return Rn(n,(()=>Gn(t))).join("")};function Jn(e,n){return e(n={exports:{}},n.exports),n.exports}var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Vn=Jn((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Kn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Yn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Yn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Yn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Vn.to,Vn.get;var Xn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Zn=Jn((function(e){var n={};for(var t in Xn)Xn.hasOwnProperty(t)&&(n[Xn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Xn)if(Xn.hasOwnProperty(l)){var i=Xn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Qn(e){var n=function(){for(var e={},n=Object.keys(Zn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var rt=tt,at=[].slice,ot=["keyword","gray","hex"],ut={};Object.keys(rt).forEach((function(e){ut[at.call(rt[e].labels).sort().join("")]=e}));var lt={};function it(e,n){if(!(this instanceof it))return new it(e,n);if(n&&n in ot&&(n=null),n&&!(n in rt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof it)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Vn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=rt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=rt[this.model].channels;var o=at.call(e,0,r);this.color=ft(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ut))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ut[l];var i=rt[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return it.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return it.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(rt).forEach((function(e){if(-1===ot.indexOf(e)){var n=rt[e].channels;it.prototype[e]=function(){if(this.model===e)return new it(this);if(arguments.length)return new it(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new it(st(rt[this.model][e].raw(this.color)).concat(t),e)},it[e]=function(t){return"number"==typeof t&&(t=ft(at.call(arguments),n)),new it(t,e)}}}));var mt=it,dt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const pt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,Mn(e,a);case 2:return[t,r]=n,Mn(e,mn(t,r))}},bt=function(e,n,t){let r=En(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},xt={},gt=function(...e){1===e.length&&(e=e[0]);var n=gt.options.context.templatePath.join("."),t=xt[n]=xt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var vt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function wt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),mt.hsv(360*yt,100*e,100*n)}function kt(){return wt().hex()}var At={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:Mt,lastName:Ct,cfirstName:jt,clastName:Et}=At;function Ot(){var e=Mt.male.concat();return pt(e)}function St(){return pt(Ct)}function Rt(){return pt(jt)}function Tt(){return pt(Et)}var Ft,_t=new Uint8Array(16);function Dt(){if(!Ft&&!(Ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ft(_t)}var qt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&qt.test(e)}for(var Pt=[],zt=0;zt<256;++zt)Pt.push((zt+256).toString(16).substr(1));function Lt(e,n,t){var r=(e=e||{}).random||(e.rng||Dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Pt[e[n+0]]+Pt[e[n+1]]+Pt[e[n+2]]+Pt[e[n+3]]+"-"+Pt[e[n+4]]+Pt[e[n+5]]+"-"+Pt[e[n+6]]+Pt[e[n+7]]+"-"+Pt[e[n+8]]+Pt[e[n+9]]+"-"+Pt[e[n+10]]+Pt[e[n+11]]+Pt[e[n+12]]+Pt[e[n+13]]+Pt[e[n+14]]+Pt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Ht={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Nt=Object.keys(Ht),It=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Ht).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Nt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Bt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ut=new RegExp(`(${Object.keys(Bt).join("|")})`,"g");function Gt(e="yyyy-MM-dd"){return Wt(Jt(),e)}function Wt(e,n){return n.replace(Ut,(function n(t,r){let a=Bt[r];return"function"==typeof a?a(e):a in Bt?n(t,a):e[a]()}))}function Jt(e=new Date(0),n=new Date){return new Date(Hn(e.getTime(),n.getTime()))}let Kt=0;const Yt=function(e){return Kt+=+e||1},Vt=Yt;function Xt(e=12,n=18){return nn(Rn(mn(e,n),(()=>Zt())).join(""))+"."}function Zt(e=3,n=10){return Rn(mn(e,n),(()=>Gn("lower"))).join("")}function Qt(e=12,n=18){return Rn(mn(e,n),(()=>er())).join("")+"。"}function er(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Nn(n,t));break;case 3:[a,n,t]=e,r=Nn(n,t)}return Mn(a,r).join("")}const nr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),tr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function rr(){return pt(nr)}function ar(e){return`${Zt()}.${e||or()}`}function or(){return pt(tr)}var ur={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},lr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:ir,_screenSize:cr,_videoSize:hr}=ur;const sr=Object.keys(lr);function fr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=pt(ir)),r=(r||kt()).replace(/^#/,""),t=(t||kt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var mr=["东北","华北","华东","华中","华南","西南","西北"];function dr(e){let n;switch(Tn(e)){case"array":n=e;default:n=[e]}return n}var pr=Object.freeze({__proto__:null,integer:Hn,isNumber:zn,random:mn,natural:Nn,int:Hn,float:In,boolean:Bn,bool:Bn,character:Gn,char:Gn,string:Wn,str:Wn,range:xn,color:function(e){return e||dt[e]?dt[e].nicer:pt(vt).hex},hex:kt,rgb:function(){return wt().hsv().string()},rgba:function(){return wt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return wt().hsl().string()},_goldenRatioColor:wt,first:Ot,last:St,name:function(e){return e=e?` ${Ot()} `:" ",`${Ot()}${e}${St()}`},cfirst:Rt,clast:Tt,cname:function(){return Rt()+Tt()},capitalize:nn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:pt,shuffle:bt,order:gt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Lt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Lt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=pt(It).id+Gt("yyyyMMdd")+Wn("number",3);for(var r=0;rXt())).join("\n")},word:Zt,sentence:Xt,title:function(e=3,n=7){return Rn(mn(e,n),(()=>nn(Zt()))).join("")},ctitle:function(e=3,n=7){return Rn(mn(e,n),(()=>er())).join("")},csentence:Qt,cparagraph:function(e=3,n=7){return Rn(mn(e,n),(()=>Qt())).join("\n")},cword:er,protocol:rr,domain:ar,tld:or,email:function(e){return`${Gn("lower")}.${Zt()}@${e||Zt()+"."+or()}`},ip:function(){return[...Array(4)].map((()=>Nn(0,255))).join(".")},url:function(e,n){return`${e||rr()}://${n||ar()}/${Zt()}`},_patternLetters:Bt,_rformat:Ut,_formatDate:Wt,_randomDate:Jt,time:function(e="HH:mm:ss"){return Gt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Gt(e)},date:Gt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Wt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Jt(e,n).getTime():Jt().getTime()},_adSize:ir,_screenSize:cr,_videoSize:hr,image:fr,img:fr,_brandColors:lr,_brandNames:sr,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=pt(ir)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=lr[pt(sr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return pt(mr)},province:function(){return pt(It).name},city:function(e){var n=pt(It),t=pt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=pt(It),t=pt(n.children),r=pt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Nn(0,9);return n},genFile:function(e){return new File(dr(e),Zt())},genBlob:function(){return new Blob(dr(anyData))}}),br={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function xr(e=""){"string"!=typeof e&&(e+="");var n=e.match(br.RE_KEY),t=n&&n[3]&&n[3].match(br.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Hn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(br.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Hn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function gr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=pt(oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(oa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(oa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function vr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Bn(n,e,r):r}function yr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function wr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=In(n,t,r,a)})):u=n&&!a[2]?t:o,u}function kr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=bt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(br.RE_KEY);i&&i[2]&&"number"===Tn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function Ar(e){this.type=e,this.offset=Ar.offset(),this.text=Ar.text()}function Mr(e,n){Ar.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){Ar.call(this,"match"),this.body=e.filter(Boolean)}function jr(e,n){Ar.call(this,e),this.body=n}function Er(e){jr.call(this,"capture-group"),this.index=Hr[this.offset]||(Hr[this.offset]=Lr++),this.body=e}function Or(e,n){Ar.call(this,"quantified"),this.body=e,this.quantifier=n}function Sr(e,n){Ar.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Rr(e,n){Ar.call(this,"charset"),this.invert=e,this.body=n}function Tr(e,n){Ar.call(this,"range"),this.start=e,this.end=n}function Fr(e){Ar.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function _r(e){Ar.call(this,"unicode"),this.code=e.toUpperCase()}function Dr(e){Ar.call(this,"hex"),this.code=e.toUpperCase()}function qr(e){Ar.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){Ar.call(this,"back-reference"),this.code=e.toUpperCase()}function Pr(e){Ar.call(this,"control-character"),this.code=e.toUpperCase()}var zr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t){if(r=[],Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new Mr(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new Ar("start")},xe="$",ge='"$"',ve=function(){return new Ar("end")},ye=function(e,n){return new Or(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ce=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Sr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Sr(e,1/0)},_e=function(e){return new Sr(e,e)},De="+",qe='"+"',$e=function(){return new Sr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Sr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Sr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Er(e)},Ze="?:",Qe='"?:"',en=function(e){return new jr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new jr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new jr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Rr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Tr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Fr(e)},kn=".",An='"."',Mn=function(){return new Ar("any-character")},Cn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new Ar("backspace")},Tn=function(){return new Ar("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new Ar("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new Ar("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new Ar("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new Ar("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new Ar("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new Ar("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new Ar("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new Ar("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new Ar("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new Ar("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new Ar("word")},st="\\W",ft='"\\\\W"',mt=function(){return new Ar("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Pr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Mt='"\\\\0"',Ct=/^[0-7]/,jt="[0-7]",Et=function(e){return new qr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Dr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new _r(e.join(""))},$t=function(){return new Ar("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(Ar.offset=r,Ar.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Nr.gen=function(e,n,t){return t=t||{guid:1},Nr[e.type]?Nr[e.type](e,n,t):Nr.token(e,n,t)},Nr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Gn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return pt(Ur.split(""));case"non-digit":return pt((Ir+Br+Gr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return pt(Jr.split(""));case"non-white-space":return pt((Ir+Br+Ur).split(""));case"tab":case"vertical-tab":break;case"word":return pt((Ir+Br+Ur).split(""));case"non-word":return pt(Gr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Bn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Qr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=oa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in pr)&&!(u in pr))return e;o=o?o.split(/\s*,\s*/).map((e=>(br.RE_PLACEHOLDER.exec(""),br.RE_PLACEHOLDER.test(e)?na(e,n,t,r):e))):[];var i=pr[a]||pr[u];switch(Tn(i)){case"array":return pt(i);case"function":i.options=r;var c=i.apply(pr,o)||"";return delete i.options,c}}function ta(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(br.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=na(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Fn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Wn(t):o;return u}var ra=Object.freeze({__proto__:null,array:gr,boolean:vr,function:yr,number:wr,object:kr,regexp:Xr,string:ta});let aa=1;function oa(e,n="",t={}){var r={path:t.path||[aa],templatePath:t.templatePath||[aa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Tn(e);let o=ra[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(br.RE_KEY,"$1"):n,rule:xr(n),context:r}),r.root||(r.root=u),u):e}var ua={gen:oa,extend:_n};function la(e,n,t=[]){var r={name:"string"==typeof n?n.replace(br.RE_KEY,"$1"):n,template:e,type:Tn(e),rule:xr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>la(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>la(e,n,r.path)))}return r}function ia(e,n){for(var t=la(e),r=ca.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:na,getValueByKeyPath:Zr,normalizePath:Qr,splitPathToArray:ea});var ca={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return ha.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(br.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ha.equal("type",e.path,Tn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return ha.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(br.RE_PLACEHOLDER))return r.length===o}return ha.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),ha.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&ha.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(ha.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),ha.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&ha.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ha.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ha.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ha.equal("properties length",e.path,u.length,o.min,r)):ha.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ha.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1}};ia.Diff=ca,ia.Assert=ha;const sa={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function fa({url:e,type:n}){for(var t in n=n.toLowerCase(),sa){var r=sa[t];let{rurl:a,rtype:o}=r;if(ma(a,e)&&ma(o,n))return r}return!1}function ma(e,n){switch(Tn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function da({template:e},n){return T(e)?e(n):oa(e)}const pa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ba=Symbol("Body internals"),xa=Symbol("Response internals");async function ga(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class va{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):pa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ba]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ba].body}get bodyUsed(){return this[ba].disturbed}async arrayBuffer(){return(await ga(this[ba])).arrayBuffer()}async blob(){return ga(this[ba])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ga(this[ba])).text()}}Object.defineProperties(va.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]);class wa extends va{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":pa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[xa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[xa].type}get url(){return this[xa].url||""}get status(){return this[xa].status}get ok(){return this[xa].status>=200&&this[xa].status<300}get redirected(){return this[xa].counter>0}get statusText(){return this[xa].statusText}get headers(){return this[xa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[xa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ka=window.fetch;async function Aa(e,n={}){if(!0===window.fetch.$mock){let t=fa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=da(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),ka(e,n)}var Ma="OK";let Ca=XMLHttpRequest.prototype.send;const ja=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open=da;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ea({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=fa;const e=ta(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var ba;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=sa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(ba=pa) +class Ea extends XMLHttpRequest{constructor(){super(...arguments)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=fa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=da(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Oa;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=Aa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Oa=Ea) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -61,4 +61,4 @@ class pa extends XMLHttpRequest{constructor(){super(...arguments)}_send=ma;_open 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ - */;var xa={Handler:Kr,Random:rr,Util:Cn,XHR:ba,RE:zr,toJSONSchema:Yr,valid:Vr,heredoc:kn,setup:function(e){return ba.setup(e)},_mocked:Qr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Kr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return ba&&(window.XMLHttpRequest=ba),Qr.$set({rurl:n,rtype:r,template:t}),xa}};return xa}(); + */;var Sa={Handler:ua,Random:pr,Util:Pn,XHR:Oa,RE:Vr,toJSONSchema:la,valid:ia,heredoc:qn,setup:function(e){return Oa.setup(e)},_mocked:sa,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ua.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Oa&&(window.XMLHttpRequest=Oa),sa.$set({rurl:n,rtype:r,template:t}),Sa}};return Sa}(); diff --git a/dist/mock.js b/dist/mock.js index 2cfc3c0e..a47a4b58 100644 --- a/dist/mock.js +++ b/dist/mock.js @@ -48,11 +48,11 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++U>=800)return arguments[0]}else U=0;return B.apply(void 0,arguments)}),K=/^(?:0|[1-9]\d*)$/;function Y(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&K.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function re(e){return null!=e&&te(e.length)&&!S(e)}function ae(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?re(t)&&Y(n,t.length):"string"==r&&n in t)&&X(t[n],e)}var oe=Object.prototype;function ue(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||oe)}function le(e){return f(e)&&"[object Arguments]"==s(e)}var ie=Object.prototype,ce=ie.hasOwnProperty,he=ie.propertyIsEnumerable,se=le(function(){return arguments}())?le:function(e){return f(e)&&ce.call(e,"callee")&&!he.call(e,"callee")};var fe="object"==typeof exports&&exports&&!exports.nodeType&&exports,me=fe&&"object"==typeof module&&module&&!module.nodeType&&module,de=me&&me.exports===fe?t.Buffer:void 0,pe=(de?de.isBuffer:void 0)||function(){return!1},be={};function xe(e){return function(n){return e(n)}}be["[object Float32Array]"]=be["[object Float64Array]"]=be["[object Int8Array]"]=be["[object Int16Array]"]=be["[object Int32Array]"]=be["[object Uint8Array]"]=be["[object Uint8ClampedArray]"]=be["[object Uint16Array]"]=be["[object Uint32Array]"]=!0,be["[object Arguments]"]=be["[object Array]"]=be["[object ArrayBuffer]"]=be["[object Boolean]"]=be["[object DataView]"]=be["[object Date]"]=be["[object Error]"]=be["[object Function]"]=be["[object Map]"]=be["[object Number]"]=be["[object Object]"]=be["[object RegExp]"]=be["[object Set]"]=be["[object String]"]=be["[object WeakMap]"]=!1;var ge="object"==typeof exports&&exports&&!exports.nodeType&&exports,ve=ge&&"object"==typeof module&&module&&!module.nodeType&&module,ye=ve&&ve.exports===ge&&e.process,we=function(){try{var e=ve&&ve.require&&ve.require("util").types;return e||ye&&ye.binding&&ye.binding("util")}catch(e){}}(),ke=we&&we.isTypedArray,Ae=ke?xe(ke):function(e){return f(e)&&te(e.length)&&!!be[s(e)]},Ce=Object.prototype.hasOwnProperty;function Me(e,n){var t=p(e),r=!t&&se(e),a=!t&&!r&&pe(e),o=!t&&!r&&!a&&Ae(e),u=t||r||a||o,l=u?function(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=Te.length>3&&"function"==typeof a?(r--,a):void 0,o&&ae(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++rn){var r=e;e=n,n=r}if(t||e%1||n%1){var a=on();return an(e+a*(n-e+rn("1e-"+((a+"").length-1))),n)}return tn(e,n)}var ln=Math.ceil,cn=Math.max;var hn,sn=function(e,n,t){return t&&"number"!=typeof t&&ae(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=cn(ln((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?en(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=un(t,r,!1);return parseFloat(un(e,n,!0).toFixed(a))},On=function(e,n,t){ +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ie(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function nn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Te(e))}var tn=Ce&&Ce.isRegExp,rn=tn?ye(tn):function(e){return f(e)&&"[object RegExp]"==s(e)},an=Math.floor,on=Math.random;function un(e,n){return e+an(on()*(n-e+1))}var ln=parseFloat,cn=Math.min,hn=Math.random;function sn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=hn();return cn(e+a*(n-e+ln("1e-"+((a+"").length-1))),n)}return un(e,n)}var fn=Math.ceil,mn=Math.max;var dn,pn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=mn(fn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=sn(t,r,!1);return parseFloat(sn(e,n,!0).toFixed(a))},Hn=function(e,n,t=!1){ //! cur:boolean 是划分概率的一个启动符号 -return t?un(0,e+n)>e?!t:t:un(10,-10)>0},Sn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Sn.alpha=Sn.lower+Sn.upper,Sn.default=Sn.lower+Sn.upper+Sn.number+Sn.symbol;const Rn=function(e="default"){return Sn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Sn[e.toLowerCase()]),e.charAt(jn(0,e.length-1))},Tn=function(...e){var n,t,r,a;switch(e.length){case 0:n=jn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=jn(r,a));break;case 3:[t,r,a]=e,n=jn(r,a)}return[...Array(n).keys()].map((()=>Rn(t))).join("")};function Fn(e,n){return e(n={exports:{}},n.exports),n.exports}var _n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Dn=Fn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),qn=Fn((function(e){var n={};for(var t in _n)_n.hasOwnProperty(t)&&(n[_n[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=_n[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Dn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Dn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Dn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Dn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));qn.to,qn.get;var $n={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Pn=Fn((function(e){var n={};for(var t in $n)$n.hasOwnProperty(t)&&(n[$n[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in $n)if($n.hasOwnProperty(l)){var i=$n[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function zn(e){var n=function(){for(var e={},n=Object.keys(Pn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var In=Nn,Bn=[].slice,Un=["keyword","gray","hex"],Gn={};Object.keys(In).forEach((function(e){Gn[Bn.call(In[e].labels).sort().join("")]=e}));var Wn={};function Jn(e,n){if(!(this instanceof Jn))return new Jn(e,n);if(n&&n in Un&&(n=null),n&&!(n in In))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof Jn)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=qn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=In[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=In[this.model].channels;var o=Bn.call(e,0,r);this.color=Xn(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in Gn))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=Gn[l];var i=In[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return Jn.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return Jn.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(In).forEach((function(e){if(-1===Un.indexOf(e)){var n=In[e].channels;Jn.prototype[e]=function(){if(this.model===e)return new Jn(this);if(arguments.length)return new Jn(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new Jn(Vn(In[this.model][e].raw(this.color)).concat(t),e)},Jn[e]=function(t){return"number"==typeof t&&(t=Xn(Bn.call(arguments),n)),new Jn(t,e)}}}));var Zn=Jn,Qn={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const et=function(e,n,t){return void 0===n&&void 0===t?e[jn(0,e.length-1)]:void 0!==n&&void 0!==t?nt(e,n,t):nt(e,0,n)},nt=function(e,n,t){let r=pn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},tt={},rt=function(...e){1===e.length&&(e=e[0]);var n=rt.options.context.templatePath.join("."),t=tt[n]=tt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var at=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let ot;function ut(e,n){return ot=ot||Math.random(),ot+=.618033988749895,ot%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Zn.hsv(360*ot,100*e,100*n)}function lt(){return ut().hex()}var it={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:ct,lastName:ht,cfirstName:st,clastName:ft}=it;function mt(){var e=ct.male.concat();return et(e)}function dt(){return et(ht)}function pt(){return et(st)}function bt(){return et(ft)}var xt,gt=new Uint8Array(16);function vt(){if(!xt&&!(xt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return xt(gt)}var yt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function wt(e){return"string"==typeof e&&yt.test(e)}for(var kt=[],At=0;At<256;++At)kt.push((At+256).toString(16).substr(1));function Ct(e,n,t){var r=(e=e||{}).random||(e.rng||vt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(kt[e[n+0]]+kt[e[n+1]]+kt[e[n+2]]+kt[e[n+3]]+"-"+kt[e[n+4]]+kt[e[n+5]]+"-"+kt[e[n+6]]+kt[e[n+7]]+"-"+kt[e[n+8]]+kt[e[n+9]]+"-"+kt[e[n+10]]+kt[e[n+11]]+kt[e[n+12]]+kt[e[n+13]]+kt[e[n+14]]+kt[e[n+15]]).toLowerCase();if(!wt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Mt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const jt=Object.keys(Mt),Et=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Mt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return jt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ot={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const St=new RegExp(`(${Object.keys(Ot).join("|")})`,"g");function Rt(e="yyyy-MM-dd"){return Tt(Ft(),e)}function Tt(e,n){return n.replace(St,(function n(t,r){let a=Ot[r];return"function"==typeof a?a(e):a in Ot?n(t,a):e[a]()}))}function Ft(e=new Date(0),n=new Date){return new Date(Mn(e.getTime(),n.getTime()))}let _t=0;const Dt=function(e){return _t+=+e||1},qt=Dt;function $t(e,n,t,r){return void 0===t?jn(e,n):void 0===r?t:jn(parseInt(t,10),parseInt(r,10))}function Pt(e,n){var t=$t(12,18,e,n);return Ve([...Array(t)].map((()=>zt())).join(""))+"."}function zt(e,n){var t=$t(3,10,e,n);return[...Array(t)].map((()=>Rn("lower"))).join("")}function Lt(e,n){var t=$t(12,18,e,n);return[...Array(t)].map((()=>Ht())).join("")+"。"}function Ht(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=jn(n,t));break;case 3:[a,n,t]=e,r=jn(n,t)}const o=a.length;return 1===r?a.charAt(jn(0,o)):[...Array(r)].map((()=>a.charAt(jn(0,o)))).join("")}const Nt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),It="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Bt(){return et(Nt)}function Ut(e){return`${zt()}.${e||Gt()}`}function Gt(){return et(It)}var Wt={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},Jt={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:Kt,_screenSize:Yt,_videoSize:Vt}=Wt;const Xt=Object.keys(Jt);function Zt(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=et(Kt)),r=(r||lt()).replace(/^#/,""),t=(t||lt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var Qt=["东北","华北","华东","华中","华南","西南","西北"];function er(e){let n;switch(bn(e)){case"array":n=e;default:n=[e]}return n}var nr=Object.freeze({__proto__:null,integer:Mn,isNumber:An,random:un,natural:jn,int:Mn,float:En,boolean:On,bool:On,character:Rn,char:Rn,string:Tn,str:Tn,range:sn,color:function(e){return e||Qn[e]?Qn[e].nicer:et(at).hex},hex:lt,rgb:function(){return ut().hsv().string()},rgba:function(){return ut().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return ut().hsl().string()},_goldenRatioColor:ut,first:mt,last:dt,name:function(e){return e=e?` ${mt()} `:" ",`${mt()}${e}${dt()}`},cfirst:pt,clast:bt,cname:function(){return pt()+bt()},capitalize:Ve,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:et,shuffle:nt,order:rt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Ct().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Ct,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=et(Et).id+Rt("yyyyMMdd")+Tn("number",3);for(var r=0;rPt()))},word:zt,sentence:Pt,title:function(e,n){var t=$t(3,7,e,n);return[...Array(t)].map((()=>Ve(zt()))).join("")},ctitle:function(e,n){var t=$t(3,7,e,n);return[...Array(t)].map((()=>Ht())).join("")},csentence:Lt,cparagraph:function(e,n){var t=$t(3,7,e,n);return[...Array(t)].map((()=>Lt())).join("")},cword:Ht,protocol:Bt,domain:Ut,tld:Gt,email:function(e){return`${Rn("lower")}.${zt()}@${e||zt()+"."+Gt()}`},ip:function(){return[...Array(4)].map((()=>jn(0,255))).join(".")},url:function(e,n){return`${e||Bt()}://${n||Ut()}/${zt()}`},_patternLetters:Ot,_rformat:St,_formatDate:Tt,_randomDate:Ft,time:function(e="HH:mm:ss"){return Rt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Rt(e)},date:Rt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Tt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ft(e,n).getTime():Ft().getTime()},_adSize:Kt,_screenSize:Yt,_videoSize:Vt,image:Zt,img:Zt,_brandColors:Jt,_brandNames:Xt,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=et(Kt)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=Jt[et(Xt)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return et(Qt)},province:function(){return et(Et).name},city:function(e){var n=et(Et),t=et(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=et(Et),t=et(n.children),r=et(t)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=jn(0,9);return n},genFile:function(e){return new File(er(e),zt())},genBlob:function(){return new Blob(er(anyData))}}),tr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function rr(e=""){"string"!=typeof e&&(e+="");var n=e.match(tr.RE_KEY),t=n&&n[3]&&n[3].match(tr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Mn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(tr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Mn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function ar({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=et(Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=Gr(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(Gr(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(Gr(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function or({rule:{max:e,min:n,parameters:t},template:r=""}){return t?On(n,e,r):r}function ur(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function lr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=En(n,t,r,a)})):u=n&&!a[2]?t:o,u}function ir({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=nt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(tr.RE_KEY,"$1");l[t]=Gr(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(tr.RE_KEY);i&&i[2]&&"number"===bn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function cr(e){this.type=e,this.offset=cr.offset(),this.text=cr.text()}function hr(e,n){cr.call(this,"alternate"),this.left=e,this.right=n}function sr(e){cr.call(this,"match"),this.body=e.filter(Boolean)}function fr(e,n){cr.call(this,e),this.body=n}function mr(e){fr.call(this,"capture-group"),this.index=jr[this.offset]||(jr[this.offset]=Mr++),this.body=e}function dr(e,n){cr.call(this,"quantified"),this.body=e,this.quantifier=n}function pr(e,n){cr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function br(e,n){cr.call(this,"charset"),this.invert=e,this.body=n}function xr(e,n){cr.call(this,"range"),this.start=e,this.end=n}function gr(e){cr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function vr(e){cr.call(this,"unicode"),this.code=e.toUpperCase()}function yr(e){cr.call(this,"hex"),this.code=e.toUpperCase()}function wr(e){cr.call(this,"octal"),this.code=e.toUpperCase()}function kr(e){cr.call(this,"back-reference"),this.code=e.toUpperCase()}function Ar(e){cr.call(this,"control-character"),this.code=e.toUpperCase()}var Cr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new hr(e,n[1]):e},me=function(e,n,t){return new sr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new cr("start")},xe="$",ge='"$"',ve=function(){return new cr("end")},ye=function(e,n){return new dr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new pr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new pr(e,1/0)},_e=function(e){return new pr(e,e)},De="+",qe='"+"',$e=function(){return new pr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new pr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new pr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new mr(e)},Ze="?:",Qe='"?:"',en=function(e){return new fr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new fr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new fr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new br(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new xr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new gr(e)},kn=".",An='"."',Cn=function(){return new cr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new cr("backspace")},Tn=function(){return new cr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new cr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new cr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new cr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new cr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new cr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new cr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new cr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new cr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new cr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new cr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new cr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new cr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Ar(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new kr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new wr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new yr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new vr(e.join(""))},$t=function(){return new cr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(cr.offset=r,cr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Er.gen=function(e,n,t){return t=t||{guid:1},Er[e.type]?Er[e.type](e,n,t):Er.token(e,n,t)},Er.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Rn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return et(Rr.split(""));case"non-digit":return et((Or+Sr+Tr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return et(_r.split(""));case"non-white-space":return et((Or+Sr+Rr).split(""));case"tab":case"vertical-tab":break;case"word":return et((Or+Sr+Rr).split(""));case"non-word":return et(Tr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(On()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Lr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=Gr(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in nr)&&!(u in nr))return e;o=o.map((e=>(tr.RE_PLACEHOLDER.exec(""),tr.RE_PLACEHOLDER.test(e)?Nr(e,n,t,r):e)));var i=nr[a]||nr[u];switch(bn(i)){case"array":return et(i);case"function":i.options=r;var c=i.apply(nr,o)||"";return delete i.options,c}}function Ir(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(tr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Nr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return xn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Tn(t):o;return u}var Br=Object.freeze({__proto__:null,array:ar,boolean:or,function:ur,number:lr,object:ir,regexp:Pr,string:Ir});let Ur=1;function Gr(e,n="",t={}){var r={path:t.path||[Ur],templatePath:t.templatePath||[Ur++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=bn(e);let o=Br[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(tr.RE_KEY,"$1"):n,rule:rr(n),context:r}),r.root||(r.root=u),u):e}var Wr={gen:Gr,extend:gn};function Jr(e,n,t=[]){var r={name:"string"==typeof n?n.replace(tr.RE_KEY,"$1"):n,template:e,type:bn(e),rule:rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>Jr(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>Jr(e,n,r.path)))}return r}function Kr(e,n){for(var t=Jr(e),r=Yr.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Nr,getValueByKeyPath:zr,normalizePath:Lr,splitPathToArray:Hr});var Yr={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return Vr.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(tr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Vr.equal("type",e.path,bn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return Vr.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(tr.RE_PLACEHOLDER))return r.length===o}return Vr.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),Vr.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&Vr.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(Vr.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),Vr.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&Vr.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(Vr.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),Vr.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&Vr.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=wn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Vr.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Vr.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Vr.equal("properties length",e.path,u.length,o.min,r)):Vr.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Vr.message(u),a.push(u),!1}};Kr.Diff=Yr,Kr.Assert=Vr;const Xr={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Zr({url:e,type:n}){for(var t in n=n.toLowerCase(),Xr){var r=Xr[t];let{rurl:a,rtype:o}=r;if(Qr(a,e)&&Qr(o,n))return r}return!1}function Qr(e,n){switch(bn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ea({template:e},n){return S(e)?e(n):Gr(e)}const na=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ta=Symbol("Body internals"),ra=Symbol("Response internals");async function aa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class oa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):na(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ta]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ta].body}get bodyUsed(){return this[ta].disturbed}async arrayBuffer(){return(await aa(this[ta])).arrayBuffer()}async blob(){return aa(this[ta])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await aa(this[ta])).text()}}Object.defineProperties(oa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ua=new Set([301,302,303,307,308]);class la extends oa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":na(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ra].type}get url(){return this[ra].url||""}get status(){return this[ra].status}get ok(){return this[ra].status>=200&&this[ra].status<300}get redirected(){return this[ra].counter>0}get statusText(){return this[ra].statusText}get headers(){return this[ra].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ua.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ia=window.fetch;async function ca(e,n={}){if(!0===window.fetch.$mock){let t=Zr({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ea(t,{});return console.warn("mock代理中"),new la(e,n)}}return console.warn("未使用 mockjs"),ia(e,n)}var ha="OK";let sa=XMLHttpRequest.prototype.send;const fa=XMLHttpRequest.prototype.open; +return t?sn(0,e+n)>e?!t:t:sn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const In=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),gn(e)},Bn=function(...e){var n,t,r,a;switch(e.length){case 0:n=zn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=zn(r,a));break;case 3:[t,r,a]=e,n=zn(r,a)}return En(n,(()=>In(t))).join("")};function Un(e,n){return e(n={exports:{}},n.exports),n.exports}var Gn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Wn=Un((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Jn=Un((function(e){var n={};for(var t in Gn)Gn.hasOwnProperty(t)&&(n[Gn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Gn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Wn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Wn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Wn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Jn.to,Jn.get;var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Un((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Kn)if(Kn.hasOwnProperty(l)){var i=Kn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Vn(e){var n=function(){for(var e={},n=Object.keys(Yn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var et=Qn,nt=[].slice,tt=["keyword","gray","hex"],rt={};Object.keys(et).forEach((function(e){rt[nt.call(et[e].labels).sort().join("")]=e}));var at={};function ot(e,n){if(!(this instanceof ot))return new ot(e,n);if(n&&n in tt&&(n=null),n&&!(n in et))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof ot)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Jn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=et[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=et[this.model].channels;var o=nt.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in rt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=rt[l];var i=et[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return ot.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return ot.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(et).forEach((function(e){if(-1===tt.indexOf(e)){var n=et[e].channels;ot.prototype[e]=function(){if(this.model===e)return new ot(this);if(arguments.length)return new ot(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new ot(it(et[this.model][e].raw(this.color)).concat(t),e)},ot[e]=function(t){return"number"==typeof t&&(t=ct(nt.call(arguments),n)),new ot(t,e)}}}));var ht=ot,st={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const ft=function(e,...n){let t,r,a;switch(n.length){case 0:return gn(e);case 1:return[a]=n,kn(e,a);case 2:return[t,r]=n,kn(e,sn(t,r))}},mt=function(e,n,t){let r=Mn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},dt={},pt=function(...e){1===e.length&&(e=e[0]);var n=pt.options.context.templatePath.join("."),t=dt[n]=dt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var bt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let xt;function gt(e,n){return xt=xt||Math.random(),xt+=.618033988749895,xt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ht.hsv(360*xt,100*e,100*n)}function vt(){return gt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:wt,lastName:kt,cfirstName:At,clastName:Ct}=yt;function Mt(){var e=wt.male.concat();return ft(e)}function jt(){return ft(kt)}function Et(){return ft(At)}function Ot(){return ft(Ct)}var St,Rt=new Uint8Array(16);function Tt(){if(!St&&!(St="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return St(Rt)}var Ft=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function _t(e){return"string"==typeof e&&Ft.test(e)}for(var Dt=[],qt=0;qt<256;++qt)Dt.push((qt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Tt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Dt[e[n+0]]+Dt[e[n+1]]+Dt[e[n+2]]+Dt[e[n+3]]+"-"+Dt[e[n+4]]+Dt[e[n+5]]+"-"+Dt[e[n+6]]+Dt[e[n+7]]+"-"+Dt[e[n+8]]+Dt[e[n+9]]+"-"+Dt[e[n+10]]+Dt[e[n+11]]+Dt[e[n+12]]+Dt[e[n+13]]+Dt[e[n+14]]+Dt[e[n+15]]).toLowerCase();if(!_t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const zt=Object.keys(Pt),Lt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ht={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Ht).join("|")})`,"g");function It(e="yyyy-MM-dd"){return Bt(Ut(),e)}function Bt(e,n){return n.replace(Nt,(function n(t,r){let a=Ht[r];return"function"==typeof a?a(e):a in Ht?n(t,a):e[a]()}))}function Ut(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Gt=0;const Wt=function(e){return Gt+=+e||1},Jt=Wt;function Kt(e=12,n=18){return Qe(En(sn(e,n),(()=>Yt())).join(""))+"."}function Yt(e=3,n=10){return En(sn(e,n),(()=>In("lower"))).join("")}function Vt(e=12,n=18){return En(sn(e,n),(()=>Xt())).join("")+"。"}function Xt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=zn(n,t));break;case 3:[a,n,t]=e,r=zn(n,t)}return kn(a,r).join("")}const Zt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Qt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function er(){return ft(Zt)}function nr(e){return`${Yt()}.${e||tr()}`}function tr(){return ft(Qt)}var rr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ar={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:or,_screenSize:ur,_videoSize:lr}=rr;const ir=Object.keys(ar);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=ft(or)),r=(r||vt()).replace(/^#/,""),t=(t||vt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var hr=["东北","华北","华东","华中","华南","西南","西北"];function sr(e){let n;switch(On(e)){case"array":n=e;default:n=[e]}return n}var fr=Object.freeze({__proto__:null,integer:Pn,isNumber:qn,random:sn,natural:zn,int:Pn,float:Ln,boolean:Hn,bool:Hn,character:In,char:In,string:Bn,str:Bn,range:pn,color:function(e){return e||st[e]?st[e].nicer:ft(bt).hex},hex:vt,rgb:function(){return gt().hsv().string()},rgba:function(){return gt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return gt().hsl().string()},_goldenRatioColor:gt,first:Mt,last:jt,name:function(e){return e=e?` ${Mt()} `:" ",`${Mt()}${e}${jt()}`},cfirst:Et,clast:Ot,cname:function(){return Et()+Ot()},capitalize:Qe,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:ft,shuffle:mt,order:pt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=ft(Lt).id+It("yyyyMMdd")+Bn("number",3);for(var r=0;rKt())).join("\n")},word:Yt,sentence:Kt,title:function(e=3,n=7){return En(sn(e,n),(()=>Qe(Yt()))).join("")},ctitle:function(e=3,n=7){return En(sn(e,n),(()=>Xt())).join("")},csentence:Vt,cparagraph:function(e=3,n=7){return En(sn(e,n),(()=>Vt())).join("\n")},cword:Xt,protocol:er,domain:nr,tld:tr,email:function(e){return`${In("lower")}.${Yt()}@${e||Yt()+"."+tr()}`},ip:function(){return[...Array(4)].map((()=>zn(0,255))).join(".")},url:function(e,n){return`${e||er()}://${n||nr()}/${Yt()}`},_patternLetters:Ht,_rformat:Nt,_formatDate:Bt,_randomDate:Ut,time:function(e="HH:mm:ss"){return It(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return It(e)},date:It,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Bt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ut(e,n).getTime():Ut().getTime()},_adSize:or,_screenSize:ur,_videoSize:lr,image:cr,img:cr,_brandColors:ar,_brandNames:ir,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=ft(or)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=ar[ft(ir)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return ft(hr)},province:function(){return ft(Lt).name},city:function(e){var n=ft(Lt),t=ft(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=ft(Lt),t=ft(n.children),r=ft(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=zn(0,9);return n},genFile:function(e){return new File(sr(e),Yt())},genBlob:function(){return new Blob(sr(anyData))}}),mr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function dr(e=""){"string"!=typeof e&&(e+="");var n=e.match(mr.RE_KEY),t=n&&n[3]&&n[3].match(mr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(mr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function pr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=ft(ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ta(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(ta(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function br({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Hn(n,e,r):r}function xr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function gr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Ln(n,t,r,a)})):u=n&&!a[2]?t:o,u}function vr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=mt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(mr.RE_KEY);i&&i[2]&&"number"===On(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function wr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function kr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function Ar(e,n){yr.call(this,e),this.body=n}function Cr(e){Ar.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Mr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Er(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Or(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Sr(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Rr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function Dr(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new wr(e,n[1]):e},me=function(e,n,t){return new kr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ve=function(){return new yr("end")},ye=function(e,n){return new Mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",qe='"+"',$e=function(){return new jr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new jr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Ar("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Ar("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Ar("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Er(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Or(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Sr(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Dr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new _r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Fr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Tr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Rr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}zr.gen=function(e,n,t){return t=t||{guid:1},zr[e.type]?zr[e.type](e,n,t):zr.token(e,n,t)},zr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return In();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return ft(Nr.split(""));case"non-digit":return ft((Lr+Hr+Ir).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return ft(Ur.split(""));case"non-white-space":return ft((Lr+Hr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return ft((Lr+Hr+Nr).split(""));case"non-word":return ft(Ir.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Hn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Vr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Yr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ta(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in fr)&&!(u in fr))return e;o=o?o.split(/\s*,\s*/).map((e=>(mr.RE_PLACEHOLDER.exec(""),mr.RE_PLACEHOLDER.test(e)?Zr(e,n,t,r):e))):[];var i=fr[a]||fr[u];switch(On(i)){case"array":return ft(i);case"function":i.options=r;var c=i.apply(fr,o)||"";return delete i.options,c}}function Qr(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(mr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Zr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Sn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Bn(t):o;return u}var ea=Object.freeze({__proto__:null,array:pr,boolean:br,function:xr,number:gr,object:vr,regexp:Kr,string:Qr});let na=1;function ta(e,n="",t={}){var r={path:t.path||[na],templatePath:t.templatePath||[na++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=On(e);let o=ea[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(mr.RE_KEY,"$1"):n,rule:dr(n),context:r}),r.root||(r.root=u),u):e}var ra={gen:ta,extend:Rn};function aa(e,n,t=[]){var r={name:"string"==typeof n?n.replace(mr.RE_KEY,"$1"):n,template:e,type:On(e),rule:dr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>aa(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>aa(e,n,r.path)))}return r}function oa(e,n){for(var t=aa(e),r=ua.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Zr,getValueByKeyPath:Yr,normalizePath:Vr,splitPathToArray:Xr});var ua={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return la.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(mr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return la.equal("type",e.path,On(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return la.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(mr.RE_PLACEHOLDER))return r.length===o}return la.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),la.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&la.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(la.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),la.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&la.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=_n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(la.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),la.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&la.equal("properties length",e.path,u.length,o.min,r)):la.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=la.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=la.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=la.message(u),a.push(u),!1}};oa.Diff=ua,oa.Assert=la;const ia={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){for(var t in n=n.toLowerCase(),ia){var r=ia[t];let{rurl:a,rtype:o}=r;if(ha(a,e)&&ha(o,n))return r}return!1}function ha(e,n){switch(On(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function sa({template:e},n){return R(e)?e(n):ta(e)}const fa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ma=Symbol("Body internals"),da=Symbol("Response internals");async function pa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class ba{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):fa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ma]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ma].body}get bodyUsed(){return this[ma].disturbed}async arrayBuffer(){return(await pa(this[ma])).arrayBuffer()}async blob(){return pa(this[ma])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await pa(this[ma])).text()}}Object.defineProperties(ba.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const xa=new Set([301,302,303,307,308]);class ga extends ba{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":fa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[da]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[da].type}get url(){return this[da].url||""}get status(){return this[da].status}get ok(){return this[da].status>=200&&this[da].status<300}get redirected(){return this[da].counter>0}get statusText(){return this[da].statusText}get headers(){return this[da].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!xa.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[da].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var va=window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){let t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=sa(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var wa="OK";let ka=XMLHttpRequest.prototype.send;const Aa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open=fa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Zr({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ha;const e=ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var da;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ca,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(da=ma) +class Ca extends XMLHttpRequest{constructor(){super(...arguments)}_send=ka;_open=Aa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=wa;const e=sa(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Ma;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ma=Ca) /*! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock @@ -61,4 +61,4 @@ class ma extends XMLHttpRequest{constructor(){super(...arguments)}_send=sa;_open 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ -*/;var pa={Handler:Wr,Random:nr,Util:kn,XHR:da,RE:$r,toJSONSchema:Jr,valid:Kr,heredoc:yn,setup:function(e){return da.setup(e)},_mocked:Xr,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,Wr.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return da&&(window.XMLHttpRequest=da),Xr.$set({rurl:n,rtype:r,template:t}),pa}};export default pa; +*/;var ja={Handler:ra,Random:fr,Util:Dn,XHR:Ma,RE:Jr,toJSONSchema:aa,valid:oa,heredoc:Fn,setup:function(e){return Ma.setup(e)},_mocked:ia,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ra.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma&&(window.XMLHttpRequest=Ma),ia.$set({rurl:n,rtype:r,template:t}),ja}};export default ja; diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js index dba35b8a..10ea5222 100644 --- a/src/mock/handle/placeholder.js +++ b/src/mock/handle/placeholder.js @@ -10,15 +10,11 @@ function placeholder(Placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params Constant.RE_PLACEHOLDER.exec(""); - var [, key, params = ""] = Constant.RE_PLACEHOLDER.exec(Placeholder); + var [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); var lkey = key && key.toLowerCase(), pathParts = splitPathToArray(key); - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - params = params.split(/\s*,\s*/); - // 占位符优先引用数据模板中的属性 if (obj && key in obj) return obj[key]; @@ -43,14 +39,20 @@ function placeholder(Placeholder, obj, templateContext, options) { // 如果未找到,则原样返回 if (!(key in Random) && !(lkey in Random)) return Placeholder; - // 递归解析参数中的占位符 - params = params.map((param) => { - Constant.RE_PLACEHOLDER.exec(""); - if (Constant.RE_PLACEHOLDER.test(param)) { - return placeholder(param, obj, templateContext, options); - } - return param; - }); + // 解析占位符的参数 + // !不进行低版本浏览器的匹配 + if (params) { + params = params.split(/\s*,\s*/).map((param) => { + // 递归解析参数中的占位符 + Constant.RE_PLACEHOLDER.exec(""); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); + } + return param; + }); + } else { + params = []; + } var handle = Random[key] || Random[lkey]; switch (Type(handle)) { diff --git a/src/mock/random/address.js b/src/mock/random/address.js index fe17c056..3a8962e9 100644 --- a/src/mock/random/address.js +++ b/src/mock/random/address.js @@ -24,7 +24,7 @@ function city(prefix) { function county(prefix) { var province = pick(DICT); var city = pick(province.children); - var county = pick(city) || { + var county = pick(city.children) || { name: "-", }; return prefix ? [province.name, city.name, county.name].join(" ") : county.name; diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js index d6614664..89fececc 100644 --- a/src/mock/random/basic/boolean.js +++ b/src/mock/random/basic/boolean.js @@ -1,5 +1,5 @@ import { random } from "lodash-es"; -const boolean = function (min, max, cur) { +const boolean = function (min, max, cur = false) { //! cur:boolean 是划分概率的一个启动符号 // if (cur) { // min = isNumber(min) ? parseInt(min, 10) : 1; @@ -9,6 +9,7 @@ const boolean = function (min, max, cur) { if (cur) { return random(0, min + max) > min ? !cur : cur; } + debugger; return random(10, -10) > 0; }; export { boolean, boolean as bool }; diff --git a/src/mock/random/basic/character.js b/src/mock/random/basic/character.js index ee9f3264..aae8dd7d 100644 --- a/src/mock/random/basic/character.js +++ b/src/mock/random/basic/character.js @@ -1,4 +1,4 @@ -import { natural } from "./number.js"; +import { sample } from "lodash-es"; const pools = { lower: "abcdefghijklmnopqrstuvwxyz", upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", @@ -12,6 +12,6 @@ const character = function (pool = "default") { if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { pool = pools[pool.toLowerCase()]; } - return pool.charAt(natural(0, pool.length - 1)); + return sample(pool); }; export { character, character as char }; diff --git a/src/mock/random/basic/string.js b/src/mock/random/basic/string.js index 1c811bfa..bc621c79 100644 --- a/src/mock/random/basic/string.js +++ b/src/mock/random/basic/string.js @@ -1,4 +1,5 @@ import { natural } from "./number.js"; +import { times } from "lodash-es"; import { character } from "./character.js"; const string = function (...args) { var len, pool, min, max; @@ -25,6 +26,6 @@ const string = function (...args) { len = natural(min, max); break; } - return [...Array(len).keys()].map(() => character(pool)).join(""); + return times(len, () => character(pool)).join(""); }; export { string, string as str }; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index 35465c20..afa29f35 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -2,8 +2,7 @@ ## Helpers */ -import { natural } from "./basic/number.js"; -import { shuffle as _shuffle, capitalize } from "lodash-es"; +import { shuffle as _shuffle, capitalize, sampleSize, random, sample } from "lodash-es"; const upper = function (str) { return (str + "").toUpperCase(); @@ -15,13 +14,18 @@ const lower = function (str) { // 从数组中随机选取一个元素,并返回。 // 更改 pick 函数 , 函数不进行重载 -const pick = function (arr, min, max) { - // pick( [ item1, item2 ... ] ) - if (min === undefined && max === undefined) return arr[natural(0, arr.length - 1)]; - // pick( [ item1, item2 ... ], min, max ) - if (min !== undefined && max !== undefined) return shuffle(arr, min, max); - // pick( [ item1, item2 ... ], count ) - return shuffle(arr, 0, min); +const pick = function (arr, ...args) { + let min, max, count; + switch (args.length) { + case 0: + return sample(arr, 1); + case 1: + [count] = args; + return sampleSize(arr, count); + case 2: + [min, max] = args; + return sampleSize(arr, random(min, max)); + } }; /* 打乱数组中元素的顺序,并返回。 diff --git a/src/mock/random/text/range.js b/src/mock/random/text/range.js index 348582d2..39041182 100644 --- a/src/mock/random/text/range.js +++ b/src/mock/random/text/range.js @@ -1,8 +1,8 @@ import { natural } from "../basic.js"; export default function range(defaultMin, defaultMax, min, max) { return min === undefined - ? natural(defaultMin, defaultMax) // () + ? natural(defaultMin, defaultMax) // (min,max) : max === undefined - ? min // ( len ) + ? min // ( min,max,len ) : natural(parseInt(min, 10), parseInt(max, 10)); // ( min, max ) } diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js index d5d21013..2215f836 100644 --- a/src/mock/random/text/text-ch.js +++ b/src/mock/random/text/text-ch.js @@ -1,20 +1,20 @@ import { natural } from "../basic.js"; -import range from "./range.js"; +import { random, sampleSize, times } from "lodash-es"; -function cparagraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => csentence()).join(""); +function cparagraph(min = 3, max = 7) { + var len = random(min, max); + return times(len, () => csentence()).join("\n"); } // 随机生成一个中文句子。 -function csentence(min, max) { - var len = range(12, 18, min, max); - return [...Array(len)].map(() => cword()).join("") + "。"; +function csentence(min = 12, max = 18) { + var len = random(min, max); + return times(len, () => cword()).join("") + "。"; } // 随机生成一句中文标题。 -function ctitle(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => cword()).join(""); +function ctitle(min = 3, max = 7) { + var len = random(min, max); + return times(len, () => cword()).join(""); } // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm const DICT_HANZI = @@ -52,10 +52,8 @@ function cword(...args) { len = natural(min, max); break; } - const poolLength = pool.length; - if (len === 1) return pool.charAt(natural(0, poolLength)); - return [...Array(len)].map(() => pool.charAt(natural(0, poolLength))).join(""); + return sampleSize(pool, len).join(""); } export { ctitle, csentence, cparagraph, cword }; diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index 723a30f9..9374dce8 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -1,28 +1,28 @@ -import range from "./range.js"; +import { random, times } from "lodash-es"; import { character } from "../basic.js"; import { capitalize } from "../helper.js"; // 随机生成一个句子,第一个单词的首字母大写。 -function sentence(min, max) { - var len = range(12, 18, min, max); - let string = [...Array(len)].map(() => word()).join(""); +function sentence(min = 12, max = 18) { + var len = random(min, max); + let string = times(len, () => word()).join(""); return capitalize(string) + "."; } // 随机生成一个单词。 -function word(min, max) { - var len = range(3, 10, min, max); - return [...Array(len)].map(() => character("lower")).join(""); +function word(min = 3, max = 10) { + var len = random(min, max); + return times(len, () => character("lower")).join(""); } // 随机生成一段文本。 -function paragraph(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map((i) => sentence()); +function paragraph(min = 3, max = 7) { + var len = random(min, max); + return times(len, () => sentence()).join("\n"); } // 随机生成一句标题,其中每个单词的首字母大写。 -function title(min, max) { - var len = range(3, 7, min, max); - return [...Array(len)].map(() => capitalize(word())).join(""); +function title(min = 3, max = 7) { + var len = random(min, max); + return times(len, () => capitalize(word())).join(""); } export { word, paragraph, sentence, title }; diff --git a/test/test.js b/test/test.js index 1ac89cbc..a260d5bc 100644 --- a/test/test.js +++ b/test/test.js @@ -1,96 +1,226 @@ -Mock.mock({ +console.log( + `.mock({ "string|1-10": "★", -}); -Mock.mock({ +})`, + Mock.mock({ + "string|1-10": "★", + }) +); +console.log( + `.mock({ "string|3": "★★★", -}); -Mock.mock({ +})`, + Mock.mock({ + "string|3": "★★★", + }) +); +console.log( + `.mock({ "number|+1": 202, -}); -Mock.mock({ +})`, + Mock.mock({ + "number|+1": 202, + }) +); +console.log( + `.mock({ "number|1-100": 100, -}); -Mock.mock({ +})`, + Mock.mock({ + "number|1-100": 100, + }) +); +console.log( + `.mock({ "number|1-100.1-10": 1, -}); -Mock.mock({ +})`, + Mock.mock({ + "number|1-100.1-10": 1, + }) +); +console.log( + `.mock({ "number|123.1-10": 1, -}); -Mock.mock({ +})`, + Mock.mock({ + "number|123.1-10": 1, + }) +); +console.log( + `.mock({ "number|123.3": 1, -}); -Mock.mock({ +})`, + Mock.mock({ + "number|123.3": 1, + }) +); +console.log( + `.mock({ "number|123.10": 1.123, -}); -Mock.mock({ +})`, + Mock.mock({ + "number|123.10": 1.123, + }) +); +console.log( + `.mock({ "boolean|1": true, -}); -Mock.mock({ +})`, + Mock.mock({ + "boolean|1": true, + }) +); +console.log( + `.mock({ "boolean|1-2": true, -}); -Mock.mock({ +})`, + Mock.mock({ + "boolean|1-2": true, + }) +); +console.log( + `.mock({ "object|2": { 310000: "上海市", 320000: "江苏省", 330000: "浙江省", 340000: "安徽省", }, -}); -Mock.mock({ +})`, + Mock.mock({ + "object|2": { + 310000: "上海市", + 320000: "江苏省", + 330000: "浙江省", + 340000: "安徽省", + }, + }) +); +console.log( + `.mock({ "object|2-4": { 110000: "北京市", 120000: "天津市", 130000: "河北省", 140000: "山西省", }, -}); -Mock.mock({ +})`, + Mock.mock({ + "object|2-4": { + 110000: "北京市", + 120000: "天津市", + 130000: "河北省", + 140000: "山西省", + }, + }) +); +console.log( + `.mock({ "array|1": ["AMD", "CMD", "UMD"], -}); -Mock.mock({ +})`, + Mock.mock({ + "array|1": ["AMD", "CMD", "UMD"], + }) +); +console.log( + `.mock({ "array|+1": ["AMD", "CMD", "UMD"], -}); -Mock.mock({ +})`, + Mock.mock({ + "array|+1": ["AMD", "CMD", "UMD"], + }) +); +console.log( + `.mock({ "array|1-10": [ { "name|+1": ["Hello", "Mock.js", "!"], }, ], -}); -Mock.mock({ +})`, + Mock.mock({ + "array|1-10": [ + { + "name|+1": ["Hello", "Mock.js", "!"], + }, + ], + }) +); +console.log( + `.mock({ "array|1-10": ["Mock.js"], -}); -Mock.mock({ +})`, + Mock.mock({ + "array|1-10": ["Mock.js"], + }) +); +console.log( + `.mock({ "array|1-10": ["Hello", "Mock.js", "!"], -}); -Mock.mock({ +})`, + Mock.mock({ + "array|1-10": ["Hello", "Mock.js", "!"], + }) +); +console.log( + `.mock({ "array|3": ["Mock.js"], -}); -Mock.mock({ +})`, + Mock.mock({ + "array|3": ["Mock.js"], + }) +); +console.log( + `.mock({ "array|3": ["Hello", "Mock.js", "!"], -}); -Mock.mock({ - foo: "Syntax Demo", - name: function () { - return this.foo; - }, -}); -Mock.mock({ +})`, + Mock.mock({ + "array|3": ["Hello", "Mock.js", "!"], + }) +); + +console.log( + `.mock({ regexp: /[a-z][A-Z][0-9]/, -}); -Mock.mock({ +})`, + Mock.mock({ + regexp: /[a-z][A-Z][0-9]/, + }) +); +console.log( + `.mock({ regexp: /\w\W\s\S\d\D/, -}); -Mock.mock({ +})`, + Mock.mock({ + regexp: /\w\W\s\S\d\D/, + }) +); +console.log( + `.mock({ regexp: /\d{5,10}/, -}); -Mock.mock({ +})`, + Mock.mock({ + regexp: /\d{5,10}/, + }) +); +console.log( + `.mock({ "regexp|3": /\d{5,10}\-/, -}); -Mock.mock({ +})`, + Mock.mock({ + "regexp|3": /\d{5,10}\-/, + }) +); +console.log( + `.mock({ "regexp|1-5": /\d{5,10}\-/, -}); -Mock.mock({ +})`, + Mock.mock({ + "regexp|1-5": /\d{5,10}\-/, + }) +); +console.log( + `.mock({ foo: "Hello", nested: { a: { @@ -100,8 +230,21 @@ Mock.mock({ }, }, absolutePath: "@/foo @/nested/a/b/c", -}); -Mock.mock({ +})`, + Mock.mock({ + foo: "Hello", + nested: { + a: { + b: { + c: "Mock.js", + }, + }, + }, + absolutePath: "@/foo @/nested/a/b/c", + }) +); +console.log( + `.mock({ foo: "Hello", nested: { a: { @@ -117,473 +260,491 @@ Mock.mock({ }, }, }, -}); +})`, + Mock.mock({ + foo: "Hello", + nested: { + a: { + b: { + c: "Mock.js", + }, + }, + }, + relativePath: { + a: { + b: { + c: "@../../../foo @../../../nested/a/b/c", + }, + }, + }, + }) +); // Mock.Random.boolean() -Mock.Random.boolean(); -Mock.mock("@boolean"); -Mock.mock("@boolean()"); +console.log(`.Random.boolean()`, Mock.Random.boolean()); +console.log(`.mock("@boolean")`, Mock.mock("@boolean")); +console.log(`.mock("@boolean()")`, Mock.mock("@boolean()")); // Mock.Random.boolean( min, max, current ) -Mock.Random.boolean(1, 9, true); -Mock.mock("@boolean(1, 9, true)"); +console.log(`.Random.boolean(1, 9, true)`, Mock.Random.boolean(1, 9, true)); +console.log(`.mock("@boolean(1, 9, true)")`, Mock.mock("@boolean(1, 9, true)")); // Mock.Random.natural() -Mock.Random.natural(); -Mock.mock("@natural"); -Mock.mock("@natural()"); +console.log(`.Random.natural()`, Mock.Random.natural()); +console.log(`.mock("@natural")`, Mock.mock("@natural")); +console.log(`.mock("@natural()")`, Mock.mock("@natural()")); // Mock.Random.natural( min ) -Mock.Random.natural(10000); -Mock.mock("@natural(10000)"); +console.log(`.Random.natural(10000)`, Mock.Random.natural(10000)); +console.log(`.mock("@natural(10000)")`, Mock.mock("@natural(10000)")); // Mock.Random.natural( min, max ) -Mock.Random.natural(60, 100); -Mock.mock("@natural(60, 100)"); +console.log(`.Random.natural(60, 100)`, Mock.Random.natural(60, 100)); +console.log(`.mock("@natural(60, 100)")`, Mock.mock("@natural(60, 100)")); // Mock.Random.integer() -Mock.Random.integer(); -Mock.mock("@integer"); -Mock.mock("@integer()"); +console.log(`.Random.integer()`, Mock.Random.integer()); +console.log(`.mock("@integer")`, Mock.mock("@integer")); +console.log(`.mock("@integer()")`, Mock.mock("@integer()")); // Mock.Random.integer( min ) -Mock.Random.integer(10000); -Mock.mock("@integer(10000)"); +console.log(`.Random.integer(10000)`, Mock.Random.integer(10000)); +console.log(`.mock("@integer(10000)")`, Mock.mock("@integer(10000)")); // Mock.Random.integer( min, max ) -Mock.Random.integer(60, 100); -Mock.mock("@integer(60, 100)"); +console.log(`.Random.integer(60, 100)`, Mock.Random.integer(60, 100)); +console.log(`.mock("@integer(60, 100)")`, Mock.mock("@integer(60, 100)")); // Mock.Random.float() -Mock.Random.float(); -Mock.mock("@float"); -Mock.mock("@float()"); +console.log(`.Random.float()`, Mock.Random.float()); +console.log(`.mock("@float")`, Mock.mock("@float")); +console.log(`.mock("@float()")`, Mock.mock("@float()")); // Mock.Random.float( min ) -Mock.Random.float(0); -Mock.mock("@float(0)"); +console.log(`.Random.float(0)`, Mock.Random.float(0)); +console.log(`.mock("@float(0)")`, Mock.mock("@float(0)")); // Mock.Random.float( min, max ) -Mock.Random.float(60, 100); -Mock.mock("@float(60, 100)"); +console.log(`.Random.float(60, 100)`, Mock.Random.float(60, 100)); +console.log(`.mock("@float(60, 100)")`, Mock.mock("@float(60, 100)")); // Mock.Random.float( min, max, dmin ) -Mock.Random.float(60, 100, 3); -Mock.mock("@float(60, 100, 3)"); +console.log(`.Random.float(60, 100, 3)`, Mock.Random.float(60, 100, 3)); +console.log(`.mock("@float(60, 100, 3)")`, Mock.mock("@float(60, 100, 3)")); // Mock.Random.float( min, max, dmin, dmax ) -Mock.Random.float(60, 100, 3, 5); -Mock.mock("@float(60, 100, 3, 5)"); +console.log(`.Random.float(60, 100, 3, 5)`, Mock.Random.float(60, 100, 3, 5)); +console.log(`.mock("@float(60, 100, 3, 5)")`, Mock.mock("@float(60, 100, 3, 5)")); // Mock.Random.character() -Mock.Random.character(); -Mock.mock("@character"); -Mock.mock("@character()"); +console.log(`.Random.character()`, Mock.Random.character()); +console.log(`.mock("@character")`, Mock.mock("@character")); +console.log(`.mock("@character()")`, Mock.mock("@character()")); // Mock.Random.character( 'lower/upper/number/symbol' ) -Mock.Random.character("lower"); -Mock.Random.character("upper"); -Mock.Random.character("number"); -Mock.Random.character("symbol"); +console.log(`.Random.character("lower")`, Mock.Random.character("lower")); +console.log(`.Random.character("upper")`, Mock.Random.character("upper")); +console.log(`.Random.character("number")`, Mock.Random.character("number")); +console.log(`.Random.character("symbol")`, Mock.Random.character("symbol")); -Mock.mock('@character("lower")'); -Mock.mock('@character("upper")'); -Mock.mock('@character("number")'); -Mock.mock('@character("symbol")'); +console.log(`.mock('@character("lower")')`, Mock.mock('@character("lower")')); +console.log(`.mock('@character("upper")')`, Mock.mock('@character("upper")')); +console.log(`.mock('@character("number")')`, Mock.mock('@character("number")')); +console.log(`.mock('@character("symbol")')`, Mock.mock('@character("symbol")')); // Mock.Random.character( pool ) -Mock.Random.character("aeiou"); -Mock.mock('@character("aeiou")'); +console.log(`.Random.character("aeiou")`, Mock.Random.character("aeiou")); +console.log(`.mock('@character("aeiou")')`, Mock.mock('@character("aeiou")')); // Mock.Random.string() -Mock.Random.string(); -Mock.mock("@string"); -Mock.mock("@string()"); +console.log(`.Random.string()`, Mock.Random.string()); +console.log(`.mock("@string")`, Mock.mock("@string")); +console.log(`.mock("@string()")`, Mock.mock("@string()")); // Mock.Random.string( length ) -Mock.Random.string(5); -Mock.mock("@string(5)"); +console.log(`.Random.string(5)`, Mock.Random.string(5)); +console.log(`.mock("@string(5)")`, Mock.mock("@string(5)")); // Mock.Random.string( pool, length ) -Mock.Random.string("lower", 5); -Mock.Random.string("upper", 5); -Mock.Random.string("number", 5); -Mock.Random.string("symbol", 5); -Mock.Random.string("aeiou", 5); - -Mock.mock('@string("lower", 5)'); -Mock.mock('@string("upper", 5)'); -Mock.mock('@string("number", 5)'); -Mock.mock('@string("symbol", 5)'); -Mock.mock('@string("aeiou", 5)'); +console.log(`.Random.string("lower", 5)`, Mock.Random.string("lower", 5)); +console.log(`.Random.string("upper", 5)`, Mock.Random.string("upper", 5)); +console.log(`.Random.string("number", 5)`, Mock.Random.string("number", 5)); +console.log(`.Random.string("symbol", 5)`, Mock.Random.string("symbol", 5)); +console.log(`.Random.string("aeiou", 5)`, Mock.Random.string("aeiou", 5)); + +console.log(`.mock('@string("lower", 5)')`, Mock.mock('@string("lower", 5)')); +console.log(`.mock('@string("upper", 5)')`, Mock.mock('@string("upper", 5)')); +console.log(`.mock('@string("number", 5)')`, Mock.mock('@string("number", 5)')); +console.log(`.mock('@string("symbol", 5)')`, Mock.mock('@string("symbol", 5)')); +console.log(`.mock('@string("aeiou", 5)')`, Mock.mock('@string("aeiou", 5)')); // Mock.Random.string( min, max ) -Mock.Random.string(7, 10); -Mock.mock("@string(7, 10)"); +console.log(`.Random.string(7, 10)`, Mock.Random.string(7, 10)); +console.log(`.mock("@string(7, 10)")`, Mock.mock("@string(7, 10)")); // Mock.Random.string( pool, min, max ) -Mock.Random.string("lower", 1, 3); -Mock.Random.string("upper", 1, 3); -Mock.Random.string("number", 1, 3); -Mock.Random.string("symbol", 1, 3); -Mock.Random.string("aeiou", 1, 3); - -Mock.mock('@string("lower", 1, 3)'); -Mock.mock('@string("upper", 1, 3)'); -Mock.mock('@string("number", 1, 3)'); -Mock.mock('@string("symbol", 1, 3)'); -Mock.mock('@string("aeiou", 1, 3)'); +console.log(`.Random.string("lower", 1, 3)`, Mock.Random.string("lower", 1, 3)); +console.log(`.Random.string("upper", 1, 3)`, Mock.Random.string("upper", 1, 3)); +console.log(`.Random.string("number", 1, 3)`, Mock.Random.string("number", 1, 3)); +console.log(`.Random.string("symbol", 1, 3)`, Mock.Random.string("symbol", 1, 3)); +console.log(`.Random.string("aeiou", 1, 3)`, Mock.Random.string("aeiou", 1, 3)); + +console.log(`.mock('@string("lower", 1, 3)')`, Mock.mock('@string("lower", 1, 3)')); +console.log(`.mock('@string("upper", 1, 3)')`, Mock.mock('@string("upper", 1, 3)')); +console.log(`.mock('@string("number", 1, 3)')`, Mock.mock('@string("number", 1, 3)')); +console.log(`.mock('@string("symbol", 1, 3)')`, Mock.mock('@string("symbol", 1, 3)')); +console.log(`.mock('@string("aeiou", 1, 3)')`, Mock.mock('@string("aeiou", 1, 3)')); // Mock.Random.range( stop ) -Mock.Random.range(10); -Mock.mock("@range(10)"); +console.log(`.Random.range(10)`, Mock.Random.range(10)); +console.log(`.mock("@range(10)")`, Mock.mock("@range(10)")); // Mock.Random.range( start, stop ) -Mock.Random.range(3, 7); -Mock.mock("@range(3, 7)"); +console.log(`.Random.range(3, 7)`, Mock.Random.range(3, 7)); +console.log(`.mock("@range(3, 7)")`, Mock.mock("@range(3, 7)")); // Mock.Random.range( start, stop, step ) -Mock.Random.range(1, 10, 2); -Mock.Random.range(1, 10, 3); +console.log(`.Random.range(1, 10, 2)`, Mock.Random.range(1, 10, 2)); +console.log(`.Random.range(1, 10, 3)`, Mock.Random.range(1, 10, 3)); -Mock.mock("@range(1, 10, 2)"); -Mock.mock("@range(1, 10, 3)"); +console.log(`.mock("@range(1, 10, 2)")`, Mock.mock("@range(1, 10, 2)")); +console.log(`.mock("@range(1, 10, 3)")`, Mock.mock("@range(1, 10, 3)")); // Mock.Random.date() -Mock.Random.date(); -Mock.mock("@date"); -Mock.mock("@date()"); +console.log(`.Random.date()`, Mock.Random.date()); +console.log(`.mock("@date")`, Mock.mock("@date")); +console.log(`.mock("@date()")`, Mock.mock("@date()")); // Mock.Random.date( format ) -Mock.Random.date("yyyy-MM-dd"); -Mock.Random.date("yy-MM-dd"); -Mock.Random.date("y-MM-dd"); -Mock.Random.date("y-M-d"); +console.log(`.Random.date("yyyy-MM-dd")`, Mock.Random.date("yyyy-MM-dd")); +console.log(`.Random.date("yy-MM-dd")`, Mock.Random.date("yy-MM-dd")); +console.log(`.Random.date("y-MM-dd")`, Mock.Random.date("y-MM-dd")); +console.log(`.Random.date("y-M-d")`, Mock.Random.date("y-M-d")); -Mock.mock('@date("yyyy-MM-dd")'); -Mock.mock('@date("yy-MM-dd")'); -Mock.mock('@date("y-MM-dd")'); -Mock.mock('@date("y-M-d")'); +console.log(`.mock('@date("yyyy-MM-dd")')`, Mock.mock('@date("yyyy-MM-dd")')); +console.log(`.mock('@date("yy-MM-dd")')`, Mock.mock('@date("yy-MM-dd")')); +console.log(`.mock('@date("y-MM-dd")')`, Mock.mock('@date("y-MM-dd")')); +console.log(`.mock('@date("y-M-d")')`, Mock.mock('@date("y-M-d")')); -Mock.mock('@date("yyyy yy y MM M dd d")'); +console.log(`.mock('@date("yyyy yy y MM M dd d")')`, Mock.mock('@date("yyyy yy y MM M dd d")')); // Mock.Random.time() -Mock.Random.time(); -Mock.mock("@time"); -Mock.mock("@time()"); +console.log(`.Random.time()`, Mock.Random.time()); +console.log(`.mock("@time")`, Mock.mock("@time")); +console.log(`.mock("@time()")`, Mock.mock("@time()")); // Mock.Random.time( format ) -Mock.Random.time("A HH:mm:ss"); -Mock.Random.time("a HH:mm:ss"); -Mock.Random.time("HH:mm:ss"); -Mock.Random.time("H:m:s"); +console.log(`.Random.time("A HH:mm:ss")`, Mock.Random.time("A HH:mm:ss")); +console.log(`.Random.time("a HH:mm:ss")`, Mock.Random.time("a HH:mm:ss")); +console.log(`.Random.time("HH:mm:ss")`, Mock.Random.time("HH:mm:ss")); +console.log(`.Random.time("H:m:s")`, Mock.Random.time("H:m:s")); -Mock.mock('@time("A HH:mm:ss")'); -Mock.mock('@time("a HH:mm:ss")'); -Mock.mock('@time("HH:mm:ss")'); -Mock.mock('@time("H:m:s")'); +console.log(`.mock('@time("A HH:mm:ss")')`, Mock.mock('@time("A HH:mm:ss")')); +console.log(`.mock('@time("a HH:mm:ss")')`, Mock.mock('@time("a HH:mm:ss")')); +console.log(`.mock('@time("HH:mm:ss")')`, Mock.mock('@time("HH:mm:ss")')); +console.log(`.mock('@time("H:m:s")')`, Mock.mock('@time("H:m:s")')); -Mock.mock('@datetime("HH H hh h mm m ss s SS S A a T")'); +console.log(`.mock('@datetime("HH H hh h mm m ss s SS S A a T")')`, Mock.mock('@datetime("HH H hh h mm m ss s SS S A a T")')); // Mock.Random.datetime() -Mock.Random.datetime(); -Mock.mock("@datetime"); -Mock.mock("@datetime()"); +console.log(`.Random.datetime()`, Mock.Random.datetime()); +console.log(`.mock("@datetime")`, Mock.mock("@datetime")); +console.log(`.mock("@datetime()")`, Mock.mock("@datetime()")); // Mock.Random.datetime( format ) -Mock.Random.datetime("yyyy-MM-dd A HH:mm:ss"); -Mock.Random.datetime("yy-MM-dd a HH:mm:ss"); -Mock.Random.datetime("y-MM-dd HH:mm:ss"); -Mock.Random.datetime("y-M-d H:m:s"); +console.log(`.Random.datetime("yyyy-MM-dd A HH:mm:ss")`, Mock.Random.datetime("yyyy-MM-dd A HH:mm:ss")); +console.log(`.Random.datetime("yy-MM-dd a HH:mm:ss")`, Mock.Random.datetime("yy-MM-dd a HH:mm:ss")); +console.log(`.Random.datetime("y-MM-dd HH:mm:ss")`, Mock.Random.datetime("y-MM-dd HH:mm:ss")); +console.log(`.Random.datetime("y-M-d H:m:s")`, Mock.Random.datetime("y-M-d H:m:s")); -Mock.mock('@datetime("yyyy-MM-dd A HH:mm:ss")'); -Mock.mock('@datetime("yy-MM-dd a HH:mm:ss")'); -Mock.mock('@datetime("y-MM-dd HH:mm:ss")'); -Mock.mock('@datetime("y-M-d H:m:s")'); +console.log(`.mock('@datetime("yyyy-MM-dd A HH:mm:ss")')`, Mock.mock('@datetime("yyyy-MM-dd A HH:mm:ss")')); +console.log(`.mock('@datetime("yy-MM-dd a HH:mm:ss")')`, Mock.mock('@datetime("yy-MM-dd a HH:mm:ss")')); +console.log(`.mock('@datetime("y-MM-dd HH:mm:ss")')`, Mock.mock('@datetime("y-MM-dd HH:mm:ss")')); +console.log(`.mock('@datetime("y-M-d H:m:s")')`, Mock.mock('@datetime("y-M-d H:m:s")')); -Mock.mock('@datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")'); +console.log(`.mock('@datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")')`, Mock.mock('@datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")')); // Ranndom.now() -Mock.Random.now(); -Mock.mock("@now"); -Mock.mock("@now()"); +console.log(`.Random.now()`, Mock.Random.now()); +console.log(`.mock("@now")`, Mock.mock("@now")); +console.log(`.mock("@now()")`, Mock.mock("@now()")); // Ranndom.now( unit ) -Mock.Random.now("year"); -Mock.Random.now("month"); -Mock.Random.now("week"); -Mock.Random.now("day"); -Mock.Random.now("hour"); -Mock.Random.now("minute"); -Mock.Random.now("second"); +console.log(`.Random.now("year")`, Mock.Random.now("year")); +console.log(`.Random.now("month")`, Mock.Random.now("month")); +console.log(`.Random.now("week")`, Mock.Random.now("week")); +console.log(`.Random.now("day")`, Mock.Random.now("day")); +console.log(`.Random.now("hour")`, Mock.Random.now("hour")); +console.log(`.Random.now("minute")`, Mock.Random.now("minute")); +console.log(`.Random.now("second")`, Mock.Random.now("second")); // Ranndom.now( format ) -Mock.Random.now("yyyy-MM-dd HH:mm:ss SS"); +console.log(`.Random.now("yyyy-MM-dd HH:mm:ss SS")`, Mock.Random.now("yyyy-MM-dd HH:mm:ss SS")); // Ranndom.now( unit, format ) -Mock.Random.now("day", "yyyy-MM-dd HH:mm:ss SS"); +console.log(`.Random.now("day", "yyyy-MM-dd HH:mm:ss SS")`, Mock.Random.now("day", "yyyy-MM-dd HH:mm:ss SS")); // Mock.Random.image() -Mock.Random.image(); +console.log(`.Random.image()`, Mock.Random.image()); // Mock.Random.image( size ) -Mock.Random.image("200x100"); +console.log(`.Random.image("200x100")`, Mock.Random.image("200x100")); // Mock.Random.image( size, background ) -Mock.Random.image("200x100", "#FF6600"); +console.log(`.Random.image("200x100", "#FF6600")`, Mock.Random.image("200x100", "#FF6600")); // Mock.Random.image( size, background, text ) -Mock.Random.image("200x100", "#4A7BF7", "Hello"); +console.log(`.Random.image("200x100", "#4A7BF7", "Hello")`, Mock.Random.image("200x100", "#4A7BF7", "Hello")); // Mock.Random.image( size, background, foreground, text ) -Mock.Random.image("200x100", "#50B347", "#FFF", "Mock.js"); +console.log(`.Random.image("200x100", "#50B347", "#FFF", "Mock.js")`, Mock.Random.image("200x100", "#50B347", "#FFF", "Mock.js")); // Mock.Random.image( size, background, foreground, format, text ) -Mock.Random.image("200x100", "#894FC4", "#FFF", "png", "!"); +console.log(`.Random.image("200x100", "#894FC4", "#FFF", "png", "!")`, Mock.Random.image("200x100", "#894FC4", "#FFF", "png", "!")); // Mock.Random.dataImage() -Mock.Random.dataImage(); +console.log(`.Random.dataImage()`, Mock.Random.dataImage()); // Mock.Random.dataImage( size ) -Mock.Random.dataImage("200x100"); +console.log(`.Random.dataImage("200x100")`, Mock.Random.dataImage("200x100")); // Mock.Random.dataImage( size, text ) -Mock.Random.dataImage("200x100", "Hello Mock.js!"); +console.log(`.Random.dataImage("200x100", "Hello Mock.js!")`, Mock.Random.dataImage("200x100", "Hello Mock.js!")); // Mock.Random.color() -Mock.Random.color(); -Mock.mock("@color"); -Mock.mock("@color()"); +console.log(`.Random.color()`, Mock.Random.color()); +console.log(`.mock("@color")`, Mock.mock("@color")); +console.log(`.mock("@color()")`, Mock.mock("@color()")); // Mock.Random.hex() -Mock.Random.hex(); -Mock.mock("@hex"); -Mock.mock("@hex()"); +console.log(`.Random.hex()`, Mock.Random.hex()); +console.log(`.mock("@hex")`, Mock.mock("@hex")); +console.log(`.mock("@hex()")`, Mock.mock("@hex()")); // Mock.Random.rgb() -Mock.Random.rgb(); -Mock.mock("@rgb"); -Mock.mock("@rgb()"); +console.log(`.Random.rgb()`, Mock.Random.rgb()); +console.log(`.mock("@rgb")`, Mock.mock("@rgb")); +console.log(`.mock("@rgb()")`, Mock.mock("@rgb()")); // Mock.Random.rgba() -Mock.Random.rgba(); -Mock.mock("@rgba"); -Mock.mock("@rgba()"); +console.log(`.Random.rgba()`, Mock.Random.rgba()); +console.log(`.mock("@rgba")`, Mock.mock("@rgba")); +console.log(`.mock("@rgba()")`, Mock.mock("@rgba()")); // Mock.Random.hsl() -Mock.Random.hsl(); -Mock.mock("@hsl"); -Mock.mock("@hsl()"); +console.log(`.Random.hsl()`, Mock.Random.hsl()); +console.log(`.mock("@hsl")`, Mock.mock("@hsl")); +console.log(`.mock("@hsl()")`, Mock.mock("@hsl()")); // Mock.Random.paragraph() -Mock.Random.paragraph(); +console.log(`.Random.paragraph()`, Mock.Random.paragraph()); -Mock.mock("@paragraph"); +console.log(`.mock("@paragraph")`, Mock.mock("@paragraph")); -Mock.mock("@paragraph()"); +console.log(`.mock("@paragraph()")`, Mock.mock("@paragraph()")); // Mock.Random.paragraph( len ) -Mock.Random.paragraph(2); +console.log(`.Random.paragraph(2)`, Mock.Random.paragraph(2)); -Mock.mock("@paragraph(2)"); +console.log(`.mock("@paragraph(2)")`, Mock.mock("@paragraph(2)")); // Mock.Random.paragraph( min, max ) -Mock.Random.paragraph(1, 3); +console.log(`.Random.paragraph(1, 3)`, Mock.Random.paragraph(1, 3)); -Mock.mock("@paragraph(1, 3)"); +console.log(`.mock("@paragraph(1, 3)")`, Mock.mock("@paragraph(1, 3)")); // Mock.Random.sentence() -Mock.Random.sentence(); -Mock.mock("@sentence"); -Mock.mock("@sentence()"); +console.log(`.Random.sentence()`, Mock.Random.sentence()); +console.log(`.mock("@sentence")`, Mock.mock("@sentence")); +console.log(`.mock("@sentence()")`, Mock.mock("@sentence()")); // Mock.Random.sentence( len ) -Mock.Random.sentence(5); -Mock.mock("@sentence(5)"); +console.log(`.Random.sentence(5)`, Mock.Random.sentence(5)); +console.log(`.mock("@sentence(5)")`, Mock.mock("@sentence(5)")); // Mock.Random.sentence( min, max ) -Mock.Random.sentence(3, 5); -Mock.mock("@sentence(3, 5)"); +console.log(`.Random.sentence(3, 5)`, Mock.Random.sentence(3, 5)); +console.log(`.mock("@sentence(3, 5)")`, Mock.mock("@sentence(3, 5)")); // Mock.Random.word() -Mock.Random.word(); -Mock.mock("@word"); -Mock.mock("@word()"); +console.log(`.Random.word()`, Mock.Random.word()); +console.log(`.mock("@word")`, Mock.mock("@word")); +console.log(`.mock("@word()")`, Mock.mock("@word()")); // Mock.Random.word( len ) -Mock.Random.word(5); -Mock.mock("@word(5)"); +console.log(`.Random.word(5)`, Mock.Random.word(5)); +console.log(`.mock("@word(5)")`, Mock.mock("@word(5)")); // Mock.Random.word( min, max ) -Mock.Random.word(3, 5); -Mock.mock("@word(3, 5)"); +console.log(`.Random.word(3, 5)`, Mock.Random.word(3, 5)); +console.log(`.mock("@word(3, 5)")`, Mock.mock("@word(3, 5)")); // Mock.Random.title() -Mock.Random.title(); -Mock.mock("@title"); -Mock.mock("@title()"); +console.log(`.Random.title()`, Mock.Random.title()); +console.log(`.mock("@title")`, Mock.mock("@title")); +console.log(`.mock("@title()")`, Mock.mock("@title()")); // Mock.Random.title( len ) -Mock.Random.title(5); -Mock.mock("@title(5)"); +console.log(`.Random.title(5)`, Mock.Random.title(5)); +console.log(`.mock("@title(5)")`, Mock.mock("@title(5)")); // Mock.Random.title( min, max ) -Mock.Random.title(3, 5); -Mock.mock("@title(3, 5)"); +console.log(`.Random.title(3, 5)`, Mock.Random.title(3, 5)); +console.log(`.mock("@title(3, 5)")`, Mock.mock("@title(3, 5)")); // Mock.Random.cparagraph() -Mock.Random.cparagraph(); +console.log(`.Random.cparagraph()`, Mock.Random.cparagraph()); -Mock.mock("@cparagraph"); +console.log(`.mock("@cparagraph")`, Mock.mock("@cparagraph")); -Mock.mock("@cparagraph()"); +console.log(`.mock("@cparagraph()")`, Mock.mock("@cparagraph()")); // Mock.Random.cparagraph( len ) -Mock.Random.cparagraph(2); +console.log(`.Random.cparagraph(2)`, Mock.Random.cparagraph(2)); -Mock.mock("@cparagraph(2)"); +console.log(`.mock("@cparagraph(2)")`, Mock.mock("@cparagraph(2)")); // Mock.Random.cparagraph( min, max ) -Mock.Random.cparagraph(1, 3); +console.log(`.Random.cparagraph(1, 3)`, Mock.Random.cparagraph(1, 3)); -Mock.mock("@cparagraph(1, 3)"); +console.log(`.mock("@cparagraph(1, 3)")`, Mock.mock("@cparagraph(1, 3)")); // Mock.Random.csentence() -Mock.Random.csentence(); -Mock.mock("@csentence"); -Mock.mock("@csentence()"); +console.log(`.Random.csentence()`, Mock.Random.csentence()); +console.log(`.mock("@csentence")`, Mock.mock("@csentence")); +console.log(`.mock("@csentence()")`, Mock.mock("@csentence()")); // Mock.Random.csentence( len ) -Mock.Random.csentence(5); -Mock.mock("@csentence(5)"); +console.log(`.Random.csentence(5)`, Mock.Random.csentence(5)); +console.log(`.mock("@csentence(5)")`, Mock.mock("@csentence(5)")); // Mock.Random.csentence( min, max ) -Mock.Random.csentence(3, 5); -Mock.mock("@csentence(3, 5)"); +console.log(`.Random.csentence(3, 5)`, Mock.Random.csentence(3, 5)); +console.log(`.mock("@csentence(3, 5)")`, Mock.mock("@csentence(3, 5)")); // Mock.Random.cword() -Mock.Random.cword(); -Mock.mock("@cword"); -Mock.mock("@cword()"); +console.log(`.Random.cword()`, Mock.Random.cword()); +console.log(`.mock("@cword")`, Mock.mock("@cword")); +console.log(`.mock("@cword()")`, Mock.mock("@cword()")); // Mock.Random.cword( pool ) -Mock.Random.cword("零一二三四五六七八九十"); -Mock.mock('@cword("零一二三四五六七八九十")'); +console.log(`.Random.cword("零一二三四五六七八九十")`, Mock.Random.cword("零一二三四五六七八九十")); +console.log(`.mock('@cword("零一二三四五六七八九十")')`, Mock.mock('@cword("零一二三四五六七八九十")')); // Mock.Random.cword( length ) -Mock.Random.cword(3); -Mock.mock("@cword(3)"); +console.log(`.Random.cword(3)`, Mock.Random.cword(3)); +console.log(`.mock("@cword(3)")`, Mock.mock("@cword(3)")); // Mock.Random.cword( pool, length ) -Mock.Random.cword("零一二三四五六七八九十", 3); -Mock.mock('@cword("零一二三四五六七八九十", 3)'); +console.log(`.Random.cword("零一二三四五六七八九十", 3)`, Mock.Random.cword("零一二三四五六七八九十", 3)); +console.log(`.mock('@cword("零一二三四五六七八九十", 3)')`, Mock.mock('@cword("零一二三四五六七八九十", 3)')); // Mock.Random.cword( min, max ) -Mock.Random.cword(3, 5); -Mock.mock("@cword(3, 5)"); +console.log(`.Random.cword(3, 5)`, Mock.Random.cword(3, 5)); +console.log(`.mock("@cword(3, 5)")`, Mock.mock("@cword(3, 5)")); // Mock.Random.cword( pool, min, max ) -Mock.Random.cword("零一二三四五六七八九十", 5, 7); -Mock.mock('@cword("零一二三四五六七八九十", 5, 7)'); +console.log(`.Random.cword("零一二三四五六七八九十", 5, 7)`, Mock.Random.cword("零一二三四五六七八九十", 5, 7)); +console.log(`.mock('@cword("零一二三四五六七八九十", 5, 7)')`, Mock.mock('@cword("零一二三四五六七八九十", 5, 7)')); // Mock.Random.ctitle() -Mock.Random.ctitle(); -Mock.mock("@ctitle"); -Mock.mock("@ctitle()"); +console.log(`.Random.ctitle()`, Mock.Random.ctitle()); +console.log(`.mock("@ctitle")`, Mock.mock("@ctitle")); +console.log(`.mock("@ctitle()")`, Mock.mock("@ctitle()")); // Mock.Random.ctitle( len ) -Mock.Random.ctitle(5); -Mock.mock("@ctitle(5)"); +console.log(`.Random.ctitle(5)`, Mock.Random.ctitle(5)); +console.log(`.mock("@ctitle(5)")`, Mock.mock("@ctitle(5)")); // Mock.Random.ctitle( min, max ) -Mock.Random.ctitle(3, 5); -Mock.mock("@ctitle(3, 5)"); +console.log(`.Random.ctitle(3, 5)`, Mock.Random.ctitle(3, 5)); +console.log(`.mock("@ctitle(3, 5)")`, Mock.mock("@ctitle(3, 5)")); // Mock.Random.first() -Mock.Random.first(); -Mock.mock("@first"); -Mock.mock("@first()"); +console.log(`.Random.first()`, Mock.Random.first()); +console.log(`.mock("@first")`, Mock.mock("@first")); +console.log(`.mock("@first()")`, Mock.mock("@first()")); // Mock.Random.last() -Mock.Random.last(); -Mock.mock("@last"); -Mock.mock("@last()"); +console.log(`.Random.last()`, Mock.Random.last()); +console.log(`.mock("@last")`, Mock.mock("@last")); +console.log(`.mock("@last()")`, Mock.mock("@last()")); // Mock.Random.name() -Mock.Random.name(); -Mock.mock("@name"); -Mock.mock("@name()"); +console.log(`.Random.name()`, Mock.Random.name()); +console.log(`.mock("@name")`, Mock.mock("@name")); +console.log(`.mock("@name()")`, Mock.mock("@name()")); // Mock.Random.name( middle ) -Mock.Random.name(true); -Mock.mock("@name(true)"); +console.log(`.Random.name(true)`, Mock.Random.name(true)); +console.log(`.mock("@name(true)")`, Mock.mock("@name(true)")); // Mock.Random.cfirst() -Mock.Random.cfirst(); -Mock.mock("@cfirst"); -Mock.mock("@cfirst()"); +console.log(`.Random.cfirst()`, Mock.Random.cfirst()); +console.log(`.mock("@cfirst")`, Mock.mock("@cfirst")); +console.log(`.mock("@cfirst()")`, Mock.mock("@cfirst()")); // Mock.Random.clast() -Mock.Random.clast(); -Mock.mock("@clast"); -Mock.mock("@clast()"); +console.log(`.Random.clast()`, Mock.Random.clast()); +console.log(`.mock("@clast")`, Mock.mock("@clast")); +console.log(`.mock("@clast()")`, Mock.mock("@clast()")); // Mock.Random.cname() -Mock.Random.cname(); -Mock.mock("@cname"); -Mock.mock("@cname()"); +console.log(`.Random.cname()`, Mock.Random.cname()); +console.log(`.mock("@cname")`, Mock.mock("@cname")); +console.log(`.mock("@cname()")`, Mock.mock("@cname()")); // Mock.Random.url() -Mock.Random.url(); -Mock.mock("@url"); -Mock.mock("@url()"); +console.log(`.Random.url()`, Mock.Random.url()); +console.log(`.mock("@url")`, Mock.mock("@url")); +console.log(`.mock("@url()")`, Mock.mock("@url()")); // Mock.Random.domain() -Mock.Random.domain(); -Mock.mock("@domain"); -Mock.mock("@domain()"); +console.log(`.Random.domain()`, Mock.Random.domain()); +console.log(`.mock("@domain")`, Mock.mock("@domain")); +console.log(`.mock("@domain()")`, Mock.mock("@domain()")); // Mock.Random.protocol() -Mock.Random.protocol(); -Mock.mock("@protocol"); -Mock.mock("@protocol()"); +console.log(`.Random.protocol()`, Mock.Random.protocol()); +console.log(`.mock("@protocol")`, Mock.mock("@protocol")); +console.log(`.mock("@protocol()")`, Mock.mock("@protocol()")); // Mock.Random.tld() -Mock.Random.tld(); -Mock.mock("@tld"); -Mock.mock("@tld()"); +console.log(`.Random.tld()`, Mock.Random.tld()); +console.log(`.mock("@tld")`, Mock.mock("@tld")); +console.log(`.mock("@tld()")`, Mock.mock("@tld()")); // Mock.Random.email() -Mock.Random.email(); -Mock.mock("@email"); -Mock.mock("@email()"); +console.log(`.Random.email()`, Mock.Random.email()); +console.log(`.mock("@email")`, Mock.mock("@email")); +console.log(`.mock("@email()")`, Mock.mock("@email()")); // Mock.Random.ip() -Mock.Random.ip(); -Mock.mock("@ip"); -Mock.mock("@ip()"); +console.log(`.Random.ip()`, Mock.Random.ip()); +console.log(`.mock("@ip")`, Mock.mock("@ip")); +console.log(`.mock("@ip()")`, Mock.mock("@ip()")); // Mock.Random.region() -Mock.Random.region(); -Mock.mock("@region"); -Mock.mock("@region()"); +console.log(`.Random.region()`, Mock.Random.region()); +console.log(`.mock("@region")`, Mock.mock("@region")); +console.log(`.mock("@region()")`, Mock.mock("@region()")); // Mock.Random.province() -Mock.Random.province(); -Mock.mock("@province"); -Mock.mock("@province()"); +console.log(`.Random.province()`, Mock.Random.province()); +console.log(`.mock("@province")`, Mock.mock("@province")); +console.log(`.mock("@province()")`, Mock.mock("@province()")); // Mock.Random.city() -Mock.Random.city(); -Mock.mock("@city"); -Mock.mock("@city()"); +console.log(`.Random.city()`, Mock.Random.city()); +console.log(`.mock("@city")`, Mock.mock("@city")); +console.log(`.mock("@city()")`, Mock.mock("@city()")); // Mock.Random.city( prefix ) -Mock.Random.city(true); -Mock.mock("@city(true)"); +console.log(`.Random.city(true)`, Mock.Random.city(true)); +console.log(`.mock("@city(true)")`, Mock.mock("@city(true)")); // Mock.Random.county() -Mock.Random.county(); -Mock.mock("@county"); -Mock.mock("@county()"); +console.log(`.Random.county()`, Mock.Random.county()); +console.log(`.mock("@county")`, Mock.mock("@county")); +console.log(`.mock("@county()")`, Mock.mock("@county()")); // Mock.Random.county( prefix ) -Mock.Random.county(true); -Mock.mock("@county(true)"); +console.log(`.Random.county(true)`, Mock.Random.county(true)); +console.log(`.mock("@county(true)")`, Mock.mock("@county(true)")); // Mock.Random.zip() -Mock.Random.zip(); -Mock.mock("@zip"); -Mock.mock("@zip()"); +console.log(`.Random.zip()`, Mock.Random.zip()); +console.log(`.mock("@zip")`, Mock.mock("@zip")); +console.log(`.mock("@zip()")`, Mock.mock("@zip()")); // Mock.Random.capitalize( word ) -Mock.Random.capitalize("hello"); -Mock.mock('@capitalize("hello")'); +console.log(`.Random.capitalize("hello")`, Mock.Random.capitalize("hello")); +console.log(`.mock('@capitalize("hello")')`, Mock.mock('@capitalize("hello")')); // Mock.Random.upper( str ) -Mock.Random.upper("hello"); -Mock.mock('@upper("hello")'); +console.log(`.Random.upper("hello")`, Mock.Random.upper("hello")); +console.log(`.mock('@upper("hello")')`, Mock.mock('@upper("hello")')); // Mock.Random.lower( str ) -Mock.Random.lower("HELLO"); -Mock.mock('@lower("HELLO")'); +console.log(`.Random.lower("HELLO")`, Mock.Random.lower("HELLO")); +console.log(`.mock('@lower("HELLO")')`, Mock.mock('@lower("HELLO")')); // Mock.Random.pick( arr ) -Mock.Random.pick(["a", "e", "i", "o", "u"]); -Mock.mock('@pick(["a", "e", "i", "o", "u"])'); +console.log(`.Random.pick(["a", "e", "i", "o", "u"])`, Mock.Random.pick(["a", "e", "i", "o", "u"])); +console.log(`.mock('@pick(["a", "e", "i", "o", "u"])')`, Mock.mock('@pick(["a", "e", "i", "o", "u"])')); // Mock.Random.shuffle( arr ) -Mock.Random.shuffle(["a", "e", "i", "o", "u"]); -Mock.mock('@shuffle(["a", "e", "i", "o", "u"])'); +console.log(`.Random.shuffle(["a", "e", "i", "o", "u"])`, Mock.Random.shuffle(["a", "e", "i", "o", "u"])); +console.log(`.mock('@shuffle(["a", "e", "i", "o", "u"])')`, Mock.mock('@shuffle(["a", "e", "i", "o", "u"])')); // Mock.Random.guid() -Mock.Random.guid(); -Mock.mock("@guid"); -Mock.mock("@guid()"); +console.log(`.Random.guid()`, Mock.Random.guid()); +console.log(`.mock("@guid")`, Mock.mock("@guid")); +console.log(`.mock("@guid()")`, Mock.mock("@guid()")); // Mock.Random.id() -Mock.Random.id(); -Mock.mock("@id"); -Mock.mock("@id()"); +console.log(`.Random.id()`, Mock.Random.id()); +console.log(`.mock("@id")`, Mock.mock("@id")); +console.log(`.mock("@id()")`, Mock.mock("@id()")); // Mock.Random.increment() -Mock.Random.increment(); -Mock.mock("@increment"); -Mock.mock("@increment()"); +console.log(`.Random.increment()`, Mock.Random.increment()); +console.log(`.mock("@increment")`, Mock.mock("@increment")); +console.log(`.mock("@increment()")`, Mock.mock("@increment()")); // Mock.Random.increment( step ) -Mock.Random.increment(100); -Mock.mock("@increment(100)"); -Mock.Random.increment(1000); -Mock.mock("@increment(1000)"); +console.log(`.Random.increment(100)`, Mock.Random.increment(100)); +console.log(`.mock("@increment(100)")`, Mock.mock("@increment(100)")); +console.log(`.Random.increment(1000)`, Mock.Random.increment(1000)); +console.log(`.mock("@increment(1000)")`, Mock.mock("@increment(1000)")); From 0de7310cc5382c591acec4ac02500a61f5fa60e1 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Fri, 25 Jun 2021 20:03:46 +0800 Subject: [PATCH 30/65] 0.9.9 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e54bc66e..334902e9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.8", + "version": "0.9.9", "homepage": "http://mockjs.com/", "keywords": [ "mock", From de8dc3adbc7e6cc74ae43df2bb076e9d512ca927 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 17:57:12 +0800 Subject: [PATCH 31/65] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20esm=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E5=92=8C=20iife=20=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 19 ++++-- dist/Mock.min.js | 2 +- dist/mock.cjs.js | 64 ++++++++++++++++++++ dist/{mock.js => mock.esm.js} | 2 +- package.json | 108 +++++++++++++++++----------------- rollup.config.build.js | 8 ++- src/mock/xhr/fetch/fetch.js | 2 +- test/common.test.js | 7 +++ test/index.html | 4 +- 9 files changed, 150 insertions(+), 66 deletions(-) create mode 100644 dist/mock.cjs.js rename dist/{mock.js => mock.esm.js} (99%) create mode 100644 test/common.test.js diff --git a/README.md b/README.md index b77d303e..f860069e 100644 --- a/README.md +++ b/README.md @@ -30,16 +30,18 @@ Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](htt 1. 生成 timestamp ```js -Mock.mock('@timestamp') // 生成数字型的 timestamp +Mock.mock("@timestamp"); // 生成数字型的 timestamp ``` 2. 支持 fetch 代理 ```js -Mock.mock('fake/1','get',{ - 'timestamp|10':['@timestamp'] -}) -fetch('fake/1').then(res=>res.json()).then(console.log) +Mock.mock("fake/1", "get", { + "timestamp|10": ["@timestamp"], +}); +fetch("fake/1") + .then((res) => res.json()) + .then(console.log); ``` ## 从 Mockjs 迁移到 Mockjs-esm @@ -47,7 +49,12 @@ fetch('fake/1').then(res=>res.json()).then(console.log) 不用修改任何的 API ,只需要改变 Mockjs 的引用方式即可。 ```html - + +``` + +```js +import Mock from "Mock"; +import Mock from "https://cdn.jsdelivr.net/npm/mockjs-esm/dist/mock.esm.js"; ``` ## 作者的闲聊 diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 49c71d2e..394d7138 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -50,7 +50,7 @@ var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++J>=800)return arguments[0]}else J=0;return W.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function Z(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ue(e){return null!=e&&oe(e.length)&&!T(e)}function le(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ue(t)&&Z(n,t.length):"string"==r&&n in t)&&ee(t[n],e)}var ie=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ie)}function he(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=qe.length>3&&"function"==typeof a?(r--,a):void 0,o&&le(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function rn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Fe(e))}var an=Ce&&Ce.isRegExp,on=an?we(an):function(e){return f(e)&&"[object RegExp]"==s(e)},un=Math.floor,ln=Math.random;function cn(e,n){return e+un(ln()*(n-e+1))}var hn=parseFloat,sn=Math.min,fn=Math.random;function mn(e,n,t){if(t&&"boolean"!=typeof t&&le(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=O(e),void 0===n?(n=e,e=0):n=O(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=fn();return sn(e+a*(n-e+hn("1e-"+((a+"").length-1))),n)}return cn(e,n)}var dn=Math.ceil,pn=Math.max;var bn,xn=function(e,n,t){return t&&"number"!=typeof t&&le(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=pn(dn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=On,a=Sn(e,On);e-=On;for(var o=he(a,n="function"==typeof(t=n)?t:R);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=mn(t,r,!1);return parseFloat(mn(e,n,!0).toFixed(a))},Bn=function(e,n,t=!1){ //! cur:boolean 是划分概率的一个启动符号 -return t?mn(0,e+n)>e?!t:t:mn(10,-10)>0},Un={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Un.alpha=Un.lower+Un.upper,Un.default=Un.lower+Un.upper+Un.number+Un.symbol;const Gn=function(e="default"){return Un.hasOwnProperty(e.toLocaleLowerCase())&&(e=Un[e.toLowerCase()]),yn(e)},Wn=function(...e){var n,t,r,a;switch(e.length){case 0:n=Nn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Nn(r,a));break;case 3:[t,r,a]=e,n=Nn(r,a)}return Rn(n,(()=>Gn(t))).join("")};function Jn(e,n){return e(n={exports:{}},n.exports),n.exports}var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Vn=Jn((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Kn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Yn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Yn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Yn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Vn.to,Vn.get;var Xn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Zn=Jn((function(e){var n={};for(var t in Xn)Xn.hasOwnProperty(t)&&(n[Xn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Xn)if(Xn.hasOwnProperty(l)){var i=Xn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Qn(e){var n=function(){for(var e={},n=Object.keys(Zn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var rt=tt,at=[].slice,ot=["keyword","gray","hex"],ut={};Object.keys(rt).forEach((function(e){ut[at.call(rt[e].labels).sort().join("")]=e}));var lt={};function it(e,n){if(!(this instanceof it))return new it(e,n);if(n&&n in ot&&(n=null),n&&!(n in rt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof it)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Vn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=rt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=rt[this.model].channels;var o=at.call(e,0,r);this.color=ft(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ut))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ut[l];var i=rt[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return it.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return it.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(rt).forEach((function(e){if(-1===ot.indexOf(e)){var n=rt[e].channels;it.prototype[e]=function(){if(this.model===e)return new it(this);if(arguments.length)return new it(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new it(st(rt[this.model][e].raw(this.color)).concat(t),e)},it[e]=function(t){return"number"==typeof t&&(t=ft(at.call(arguments),n)),new it(t,e)}}}));var mt=it,dt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const pt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,Mn(e,a);case 2:return[t,r]=n,Mn(e,mn(t,r))}},bt=function(e,n,t){let r=En(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},xt={},gt=function(...e){1===e.length&&(e=e[0]);var n=gt.options.context.templatePath.join("."),t=xt[n]=xt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var vt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function wt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),mt.hsv(360*yt,100*e,100*n)}function kt(){return wt().hex()}var At={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:Mt,lastName:Ct,cfirstName:jt,clastName:Et}=At;function Ot(){var e=Mt.male.concat();return pt(e)}function St(){return pt(Ct)}function Rt(){return pt(jt)}function Tt(){return pt(Et)}var Ft,_t=new Uint8Array(16);function Dt(){if(!Ft&&!(Ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ft(_t)}var qt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&qt.test(e)}for(var Pt=[],zt=0;zt<256;++zt)Pt.push((zt+256).toString(16).substr(1));function Lt(e,n,t){var r=(e=e||{}).random||(e.rng||Dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Pt[e[n+0]]+Pt[e[n+1]]+Pt[e[n+2]]+Pt[e[n+3]]+"-"+Pt[e[n+4]]+Pt[e[n+5]]+"-"+Pt[e[n+6]]+Pt[e[n+7]]+"-"+Pt[e[n+8]]+Pt[e[n+9]]+"-"+Pt[e[n+10]]+Pt[e[n+11]]+Pt[e[n+12]]+Pt[e[n+13]]+Pt[e[n+14]]+Pt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Ht={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Nt=Object.keys(Ht),It=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Ht).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Nt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Bt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ut=new RegExp(`(${Object.keys(Bt).join("|")})`,"g");function Gt(e="yyyy-MM-dd"){return Wt(Jt(),e)}function Wt(e,n){return n.replace(Ut,(function n(t,r){let a=Bt[r];return"function"==typeof a?a(e):a in Bt?n(t,a):e[a]()}))}function Jt(e=new Date(0),n=new Date){return new Date(Hn(e.getTime(),n.getTime()))}let Kt=0;const Yt=function(e){return Kt+=+e||1},Vt=Yt;function Xt(e=12,n=18){return nn(Rn(mn(e,n),(()=>Zt())).join(""))+"."}function Zt(e=3,n=10){return Rn(mn(e,n),(()=>Gn("lower"))).join("")}function Qt(e=12,n=18){return Rn(mn(e,n),(()=>er())).join("")+"。"}function er(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Nn(n,t));break;case 3:[a,n,t]=e,r=Nn(n,t)}return Mn(a,r).join("")}const nr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),tr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function rr(){return pt(nr)}function ar(e){return`${Zt()}.${e||or()}`}function or(){return pt(tr)}var ur={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},lr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:ir,_screenSize:cr,_videoSize:hr}=ur;const sr=Object.keys(lr);function fr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=pt(ir)),r=(r||kt()).replace(/^#/,""),t=(t||kt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var mr=["东北","华北","华东","华中","华南","西南","西北"];function dr(e){let n;switch(Tn(e)){case"array":n=e;default:n=[e]}return n}var pr=Object.freeze({__proto__:null,integer:Hn,isNumber:zn,random:mn,natural:Nn,int:Hn,float:In,boolean:Bn,bool:Bn,character:Gn,char:Gn,string:Wn,str:Wn,range:xn,color:function(e){return e||dt[e]?dt[e].nicer:pt(vt).hex},hex:kt,rgb:function(){return wt().hsv().string()},rgba:function(){return wt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return wt().hsl().string()},_goldenRatioColor:wt,first:Ot,last:St,name:function(e){return e=e?` ${Ot()} `:" ",`${Ot()}${e}${St()}`},cfirst:Rt,clast:Tt,cname:function(){return Rt()+Tt()},capitalize:nn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:pt,shuffle:bt,order:gt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Lt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Lt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=pt(It).id+Gt("yyyyMMdd")+Wn("number",3);for(var r=0;rXt())).join("\n")},word:Zt,sentence:Xt,title:function(e=3,n=7){return Rn(mn(e,n),(()=>nn(Zt()))).join("")},ctitle:function(e=3,n=7){return Rn(mn(e,n),(()=>er())).join("")},csentence:Qt,cparagraph:function(e=3,n=7){return Rn(mn(e,n),(()=>Qt())).join("\n")},cword:er,protocol:rr,domain:ar,tld:or,email:function(e){return`${Gn("lower")}.${Zt()}@${e||Zt()+"."+or()}`},ip:function(){return[...Array(4)].map((()=>Nn(0,255))).join(".")},url:function(e,n){return`${e||rr()}://${n||ar()}/${Zt()}`},_patternLetters:Bt,_rformat:Ut,_formatDate:Wt,_randomDate:Jt,time:function(e="HH:mm:ss"){return Gt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Gt(e)},date:Gt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Wt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Jt(e,n).getTime():Jt().getTime()},_adSize:ir,_screenSize:cr,_videoSize:hr,image:fr,img:fr,_brandColors:lr,_brandNames:sr,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=pt(ir)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=lr[pt(sr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return pt(mr)},province:function(){return pt(It).name},city:function(e){var n=pt(It),t=pt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=pt(It),t=pt(n.children),r=pt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Nn(0,9);return n},genFile:function(e){return new File(dr(e),Zt())},genBlob:function(){return new Blob(dr(anyData))}}),br={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function xr(e=""){"string"!=typeof e&&(e+="");var n=e.match(br.RE_KEY),t=n&&n[3]&&n[3].match(br.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Hn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(br.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Hn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function gr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=pt(oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(oa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(oa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function vr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Bn(n,e,r):r}function yr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function wr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=In(n,t,r,a)})):u=n&&!a[2]?t:o,u}function kr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=bt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(br.RE_KEY);i&&i[2]&&"number"===Tn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function Ar(e){this.type=e,this.offset=Ar.offset(),this.text=Ar.text()}function Mr(e,n){Ar.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){Ar.call(this,"match"),this.body=e.filter(Boolean)}function jr(e,n){Ar.call(this,e),this.body=n}function Er(e){jr.call(this,"capture-group"),this.index=Hr[this.offset]||(Hr[this.offset]=Lr++),this.body=e}function Or(e,n){Ar.call(this,"quantified"),this.body=e,this.quantifier=n}function Sr(e,n){Ar.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Rr(e,n){Ar.call(this,"charset"),this.invert=e,this.body=n}function Tr(e,n){Ar.call(this,"range"),this.start=e,this.end=n}function Fr(e){Ar.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function _r(e){Ar.call(this,"unicode"),this.code=e.toUpperCase()}function Dr(e){Ar.call(this,"hex"),this.code=e.toUpperCase()}function qr(e){Ar.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){Ar.call(this,"back-reference"),this.code=e.toUpperCase()}function Pr(e){Ar.call(this,"control-character"),this.code=e.toUpperCase()}var zr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t){if(r=[],Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new Mr(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new Ar("start")},xe="$",ge='"$"',ve=function(){return new Ar("end")},ye=function(e,n){return new Or(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ce=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Sr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Sr(e,1/0)},_e=function(e){return new Sr(e,e)},De="+",qe='"+"',$e=function(){return new Sr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Sr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Sr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Er(e)},Ze="?:",Qe='"?:"',en=function(e){return new jr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new jr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new jr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Rr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Tr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Fr(e)},kn=".",An='"."',Mn=function(){return new Ar("any-character")},Cn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new Ar("backspace")},Tn=function(){return new Ar("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new Ar("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new Ar("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new Ar("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new Ar("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new Ar("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new Ar("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new Ar("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new Ar("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new Ar("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new Ar("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new Ar("word")},st="\\W",ft='"\\\\W"',mt=function(){return new Ar("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Pr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Mt='"\\\\0"',Ct=/^[0-7]/,jt="[0-7]",Et=function(e){return new qr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Dr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new _r(e.join(""))},$t=function(){return new Ar("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(Ar.offset=r,Ar.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Nr.gen=function(e,n,t){return t=t||{guid:1},Nr[e.type]?Nr[e.type](e,n,t):Nr.token(e,n,t)},Nr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Gn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return pt(Ur.split(""));case"non-digit":return pt((Ir+Br+Gr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return pt(Jr.split(""));case"non-white-space":return pt((Ir+Br+Ur).split(""));case"tab":case"vertical-tab":break;case"word":return pt((Ir+Br+Ur).split(""));case"non-word":return pt(Gr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Bn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Qr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=oa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in pr)&&!(u in pr))return e;o=o?o.split(/\s*,\s*/).map((e=>(br.RE_PLACEHOLDER.exec(""),br.RE_PLACEHOLDER.test(e)?na(e,n,t,r):e))):[];var i=pr[a]||pr[u];switch(Tn(i)){case"array":return pt(i);case"function":i.options=r;var c=i.apply(pr,o)||"";return delete i.options,c}}function ta(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(br.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=na(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Fn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Wn(t):o;return u}var ra=Object.freeze({__proto__:null,array:gr,boolean:vr,function:yr,number:wr,object:kr,regexp:Xr,string:ta});let aa=1;function oa(e,n="",t={}){var r={path:t.path||[aa],templatePath:t.templatePath||[aa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Tn(e);let o=ra[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(br.RE_KEY,"$1"):n,rule:xr(n),context:r}),r.root||(r.root=u),u):e}var ua={gen:oa,extend:_n};function la(e,n,t=[]){var r={name:"string"==typeof n?n.replace(br.RE_KEY,"$1"):n,template:e,type:Tn(e),rule:xr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>la(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>la(e,n,r.path)))}return r}function ia(e,n){for(var t=la(e),r=ca.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:na,getValueByKeyPath:Zr,normalizePath:Qr,splitPathToArray:ea});var ca={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return ha.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(br.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ha.equal("type",e.path,Tn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return ha.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(br.RE_PLACEHOLDER))return r.length===o}return ha.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),ha.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&ha.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(ha.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),ha.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&ha.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ha.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ha.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ha.equal("properties length",e.path,u.length,o.min,r)):ha.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ha.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1}};ia.Diff=ca,ia.Assert=ha;const sa={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function fa({url:e,type:n}){for(var t in n=n.toLowerCase(),sa){var r=sa[t];let{rurl:a,rtype:o}=r;if(ma(a,e)&&ma(o,n))return r}return!1}function ma(e,n){switch(Tn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function da({template:e},n){return T(e)?e(n):oa(e)}const pa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ba=Symbol("Body internals"),xa=Symbol("Response internals");async function ga(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class va{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):pa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ba]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ba].body}get bodyUsed(){return this[ba].disturbed}async arrayBuffer(){return(await ga(this[ba])).arrayBuffer()}async blob(){return ga(this[ba])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ga(this[ba])).text()}}Object.defineProperties(va.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]);class wa extends va{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":pa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[xa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[xa].type}get url(){return this[xa].url||""}get status(){return this[xa].status}get ok(){return this[xa].status>=200&&this[xa].status<300}get redirected(){return this[xa].counter>0}get statusText(){return this[xa].statusText}get headers(){return this[xa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[xa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ka=window.fetch;async function Aa(e,n={}){if(!0===window.fetch.$mock){let t=fa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=da(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),ka(e,n)}var Ma="OK";let Ca=XMLHttpRequest.prototype.send;const ja=XMLHttpRequest.prototype.open; +return t?mn(0,e+n)>e?!t:t:mn(10,-10)>0},Un={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Un.alpha=Un.lower+Un.upper,Un.default=Un.lower+Un.upper+Un.number+Un.symbol;const Gn=function(e="default"){return Un.hasOwnProperty(e.toLocaleLowerCase())&&(e=Un[e.toLowerCase()]),yn(e)},Wn=function(...e){var n,t,r,a;switch(e.length){case 0:n=Nn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Nn(r,a));break;case 3:[t,r,a]=e,n=Nn(r,a)}return Rn(n,(()=>Gn(t))).join("")};function Jn(e,n){return e(n={exports:{}},n.exports),n.exports}var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Vn=Jn((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Kn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Yn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Yn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Yn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Vn.to,Vn.get;var Xn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Zn=Jn((function(e){var n={};for(var t in Xn)Xn.hasOwnProperty(t)&&(n[Xn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Xn)if(Xn.hasOwnProperty(l)){var i=Xn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Qn(e){var n=function(){for(var e={},n=Object.keys(Zn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var rt=tt,at=[].slice,ot=["keyword","gray","hex"],ut={};Object.keys(rt).forEach((function(e){ut[at.call(rt[e].labels).sort().join("")]=e}));var lt={};function it(e,n){if(!(this instanceof it))return new it(e,n);if(n&&n in ot&&(n=null),n&&!(n in rt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof it)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Vn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=rt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=rt[this.model].channels;var o=at.call(e,0,r);this.color=ft(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ut))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ut[l];var i=rt[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return it.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return it.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(rt).forEach((function(e){if(-1===ot.indexOf(e)){var n=rt[e].channels;it.prototype[e]=function(){if(this.model===e)return new it(this);if(arguments.length)return new it(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new it(st(rt[this.model][e].raw(this.color)).concat(t),e)},it[e]=function(t){return"number"==typeof t&&(t=ft(at.call(arguments),n)),new it(t,e)}}}));var mt=it,dt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const pt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,Mn(e,a);case 2:return[t,r]=n,Mn(e,mn(t,r))}},bt=function(e,n,t){let r=En(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},xt={},gt=function(...e){1===e.length&&(e=e[0]);var n=gt.options.context.templatePath.join("."),t=xt[n]=xt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var vt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function wt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),mt.hsv(360*yt,100*e,100*n)}function kt(){return wt().hex()}var At={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:Mt,lastName:Ct,cfirstName:jt,clastName:Et}=At;function Ot(){var e=Mt.male.concat();return pt(e)}function St(){return pt(Ct)}function Rt(){return pt(jt)}function Tt(){return pt(Et)}var Ft,_t=new Uint8Array(16);function Dt(){if(!Ft&&!(Ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ft(_t)}var qt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&qt.test(e)}for(var Pt=[],zt=0;zt<256;++zt)Pt.push((zt+256).toString(16).substr(1));function Lt(e,n,t){var r=(e=e||{}).random||(e.rng||Dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Pt[e[n+0]]+Pt[e[n+1]]+Pt[e[n+2]]+Pt[e[n+3]]+"-"+Pt[e[n+4]]+Pt[e[n+5]]+"-"+Pt[e[n+6]]+Pt[e[n+7]]+"-"+Pt[e[n+8]]+Pt[e[n+9]]+"-"+Pt[e[n+10]]+Pt[e[n+11]]+Pt[e[n+12]]+Pt[e[n+13]]+Pt[e[n+14]]+Pt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Ht={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Nt=Object.keys(Ht),It=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Ht).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Nt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Bt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ut=new RegExp(`(${Object.keys(Bt).join("|")})`,"g");function Gt(e="yyyy-MM-dd"){return Wt(Jt(),e)}function Wt(e,n){return n.replace(Ut,(function n(t,r){let a=Bt[r];return"function"==typeof a?a(e):a in Bt?n(t,a):e[a]()}))}function Jt(e=new Date(0),n=new Date){return new Date(Hn(e.getTime(),n.getTime()))}let Kt=0;const Yt=function(e){return Kt+=+e||1},Vt=Yt;function Xt(e=12,n=18){return nn(Rn(mn(e,n),(()=>Zt())).join(""))+"."}function Zt(e=3,n=10){return Rn(mn(e,n),(()=>Gn("lower"))).join("")}function Qt(e=12,n=18){return Rn(mn(e,n),(()=>er())).join("")+"。"}function er(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Nn(n,t));break;case 3:[a,n,t]=e,r=Nn(n,t)}return Mn(a,r).join("")}const nr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),tr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function rr(){return pt(nr)}function ar(e){return`${Zt()}.${e||or()}`}function or(){return pt(tr)}var ur={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},lr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:ir,_screenSize:cr,_videoSize:hr}=ur;const sr=Object.keys(lr);function fr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=pt(ir)),r=(r||kt()).replace(/^#/,""),t=(t||kt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var mr=["东北","华北","华东","华中","华南","西南","西北"];function dr(e){let n;switch(Tn(e)){case"array":n=e;default:n=[e]}return n}var pr=Object.freeze({__proto__:null,integer:Hn,isNumber:zn,random:mn,natural:Nn,int:Hn,float:In,boolean:Bn,bool:Bn,character:Gn,char:Gn,string:Wn,str:Wn,range:xn,color:function(e){return e||dt[e]?dt[e].nicer:pt(vt).hex},hex:kt,rgb:function(){return wt().hsv().string()},rgba:function(){return wt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return wt().hsl().string()},_goldenRatioColor:wt,first:Ot,last:St,name:function(e){return e=e?` ${Ot()} `:" ",`${Ot()}${e}${St()}`},cfirst:Rt,clast:Tt,cname:function(){return Rt()+Tt()},capitalize:nn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:pt,shuffle:bt,order:gt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Lt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Lt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=pt(It).id+Gt("yyyyMMdd")+Wn("number",3);for(var r=0;rXt())).join("\n")},word:Zt,sentence:Xt,title:function(e=3,n=7){return Rn(mn(e,n),(()=>nn(Zt()))).join("")},ctitle:function(e=3,n=7){return Rn(mn(e,n),(()=>er())).join("")},csentence:Qt,cparagraph:function(e=3,n=7){return Rn(mn(e,n),(()=>Qt())).join("\n")},cword:er,protocol:rr,domain:ar,tld:or,email:function(e){return`${Gn("lower")}.${Zt()}@${e||Zt()+"."+or()}`},ip:function(){return[...Array(4)].map((()=>Nn(0,255))).join(".")},url:function(e,n){return`${e||rr()}://${n||ar()}/${Zt()}`},_patternLetters:Bt,_rformat:Ut,_formatDate:Wt,_randomDate:Jt,time:function(e="HH:mm:ss"){return Gt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Gt(e)},date:Gt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Wt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Jt(e,n).getTime():Jt().getTime()},_adSize:ir,_screenSize:cr,_videoSize:hr,image:fr,img:fr,_brandColors:lr,_brandNames:sr,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=pt(ir)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=lr[pt(sr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return pt(mr)},province:function(){return pt(It).name},city:function(e){var n=pt(It),t=pt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=pt(It),t=pt(n.children),r=pt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Nn(0,9);return n},genFile:function(e){return new File(dr(e),Zt())},genBlob:function(){return new Blob(dr(anyData))}}),br={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function xr(e=""){"string"!=typeof e&&(e+="");var n=e.match(br.RE_KEY),t=n&&n[3]&&n[3].match(br.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Hn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(br.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Hn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function gr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=pt(oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(oa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(oa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function vr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Bn(n,e,r):r}function yr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function wr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=In(n,t,r,a)})):u=n&&!a[2]?t:o,u}function kr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=bt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(br.RE_KEY);i&&i[2]&&"number"===Tn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function Ar(e){this.type=e,this.offset=Ar.offset(),this.text=Ar.text()}function Mr(e,n){Ar.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){Ar.call(this,"match"),this.body=e.filter(Boolean)}function jr(e,n){Ar.call(this,e),this.body=n}function Er(e){jr.call(this,"capture-group"),this.index=Hr[this.offset]||(Hr[this.offset]=Lr++),this.body=e}function Or(e,n){Ar.call(this,"quantified"),this.body=e,this.quantifier=n}function Sr(e,n){Ar.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Rr(e,n){Ar.call(this,"charset"),this.invert=e,this.body=n}function Tr(e,n){Ar.call(this,"range"),this.start=e,this.end=n}function Fr(e){Ar.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function _r(e){Ar.call(this,"unicode"),this.code=e.toUpperCase()}function Dr(e){Ar.call(this,"hex"),this.code=e.toUpperCase()}function qr(e){Ar.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){Ar.call(this,"back-reference"),this.code=e.toUpperCase()}function Pr(e){Ar.call(this,"control-character"),this.code=e.toUpperCase()}var zr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t){if(r=[],Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new Mr(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new Ar("start")},xe="$",ge='"$"',ve=function(){return new Ar("end")},ye=function(e,n){return new Or(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ce=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Sr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Sr(e,1/0)},_e=function(e){return new Sr(e,e)},De="+",qe='"+"',$e=function(){return new Sr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Sr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Sr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Er(e)},Ze="?:",Qe='"?:"',en=function(e){return new jr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new jr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new jr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Rr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Tr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Fr(e)},kn=".",An='"."',Mn=function(){return new Ar("any-character")},Cn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new Ar("backspace")},Tn=function(){return new Ar("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new Ar("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new Ar("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new Ar("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new Ar("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new Ar("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new Ar("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new Ar("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new Ar("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new Ar("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new Ar("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new Ar("word")},st="\\W",ft='"\\\\W"',mt=function(){return new Ar("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Pr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Mt='"\\\\0"',Ct=/^[0-7]/,jt="[0-7]",Et=function(e){return new qr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Dr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new _r(e.join(""))},$t=function(){return new Ar("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(Ar.offset=r,Ar.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Nr.gen=function(e,n,t){return t=t||{guid:1},Nr[e.type]?Nr[e.type](e,n,t):Nr.token(e,n,t)},Nr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Gn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return pt(Ur.split(""));case"non-digit":return pt((Ir+Br+Gr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return pt(Jr.split(""));case"non-white-space":return pt((Ir+Br+Ur).split(""));case"tab":case"vertical-tab":break;case"word":return pt((Ir+Br+Ur).split(""));case"non-word":return pt(Gr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Bn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Qr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=oa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in pr)&&!(u in pr))return e;o=o?o.split(/\s*,\s*/).map((e=>(br.RE_PLACEHOLDER.exec(""),br.RE_PLACEHOLDER.test(e)?na(e,n,t,r):e))):[];var i=pr[a]||pr[u];switch(Tn(i)){case"array":return pt(i);case"function":i.options=r;var c=i.apply(pr,o)||"";return delete i.options,c}}function ta(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(br.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=na(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Fn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Wn(t):o;return u}var ra=Object.freeze({__proto__:null,array:gr,boolean:vr,function:yr,number:wr,object:kr,regexp:Xr,string:ta});let aa=1;function oa(e,n="",t={}){var r={path:t.path||[aa],templatePath:t.templatePath||[aa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Tn(e);let o=ra[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(br.RE_KEY,"$1"):n,rule:xr(n),context:r}),r.root||(r.root=u),u):e}var ua={gen:oa,extend:_n};function la(e,n,t=[]){var r={name:"string"==typeof n?n.replace(br.RE_KEY,"$1"):n,template:e,type:Tn(e),rule:xr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>la(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>la(e,n,r.path)))}return r}function ia(e,n){for(var t=la(e),r=ca.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:na,getValueByKeyPath:Zr,normalizePath:Qr,splitPathToArray:ea});var ca={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return ha.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(br.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ha.equal("type",e.path,Tn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return ha.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(br.RE_PLACEHOLDER))return r.length===o}return ha.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),ha.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&ha.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(ha.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),ha.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&ha.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ha.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ha.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ha.equal("properties length",e.path,u.length,o.min,r)):ha.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ha.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1}};ia.Diff=ca,ia.Assert=ha;const sa={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function fa({url:e,type:n}){for(var t in n=n.toLowerCase(),sa){var r=sa[t];let{rurl:a,rtype:o}=r;if(ma(a,e)&&ma(o,n))return r}return!1}function ma(e,n){switch(Tn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function da({template:e},n){return T(e)?e(n):oa(e)}const pa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ba=Symbol("Body internals"),xa=Symbol("Response internals");async function ga(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class va{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):pa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ba]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ba].body}get bodyUsed(){return this[ba].disturbed}async arrayBuffer(){return(await ga(this[ba])).arrayBuffer()}async blob(){return ga(this[ba])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ga(this[ba])).text()}}Object.defineProperties(va.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]);class wa extends va{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":pa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[xa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[xa].type}get url(){return this[xa].url||""}get status(){return this[xa].status}get ok(){return this[xa].status>=200&&this[xa].status<300}get redirected(){return this[xa].counter>0}get statusText(){return this[xa].statusText}get headers(){return this[xa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[xa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ka=window&&window.fetch;async function Aa(e,n={}){if(!0===window.fetch.$mock){let t=fa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=da(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),ka(e,n)}var Ma="OK";let Ca=XMLHttpRequest.prototype.send;const ja=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 class Ea extends XMLHttpRequest{constructor(){super(...arguments)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=fa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=da(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Oa;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=Aa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Oa=Ea) /*! diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js new file mode 100644 index 00000000..7bfc3aba --- /dev/null +++ b/dist/mock.cjs.js @@ -0,0 +1,64 @@ +/** + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ie(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function nn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Te(e))}var tn=Ce&&Ce.isRegExp,rn=tn?ye(tn):function(e){return f(e)&&"[object RegExp]"==s(e)},an=Math.floor,on=Math.random;function un(e,n){return e+an(on()*(n-e+1))}var ln=parseFloat,cn=Math.min,hn=Math.random;function sn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=hn();return cn(e+a*(n-e+ln("1e-"+((a+"").length-1))),n)}return un(e,n)}var fn=Math.ceil,mn=Math.max;var dn,pn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=mn(fn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=sn(t,r,!1);return parseFloat(sn(e,n,!0).toFixed(a))},Hn=function(e,n,t=!1){ +//! cur:boolean 是划分概率的一个启动符号 +return t?sn(0,e+n)>e?!t:t:sn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const In=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),gn(e)},Bn=function(...e){var n,t,r,a;switch(e.length){case 0:n=zn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=zn(r,a));break;case 3:[t,r,a]=e,n=zn(r,a)}return En(n,(()=>In(t))).join("")};function Un(e,n){return e(n={exports:{}},n.exports),n.exports}var Gn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Wn=Un((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Jn=Un((function(e){var n={};for(var t in Gn)Gn.hasOwnProperty(t)&&(n[Gn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Gn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Wn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Wn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Wn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Jn.to,Jn.get;var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Un((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Kn)if(Kn.hasOwnProperty(l)){var i=Kn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Vn(e){var n=function(){for(var e={},n=Object.keys(Yn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var et=Qn,nt=[].slice,tt=["keyword","gray","hex"],rt={};Object.keys(et).forEach((function(e){rt[nt.call(et[e].labels).sort().join("")]=e}));var at={};function ot(e,n){if(!(this instanceof ot))return new ot(e,n);if(n&&n in tt&&(n=null),n&&!(n in et))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof ot)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Jn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=et[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=et[this.model].channels;var o=nt.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in rt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=rt[l];var i=et[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return ot.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return ot.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(et).forEach((function(e){if(-1===tt.indexOf(e)){var n=et[e].channels;ot.prototype[e]=function(){if(this.model===e)return new ot(this);if(arguments.length)return new ot(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new ot(it(et[this.model][e].raw(this.color)).concat(t),e)},ot[e]=function(t){return"number"==typeof t&&(t=ct(nt.call(arguments),n)),new ot(t,e)}}}));var ht=ot,st={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const ft=function(e,...n){let t,r,a;switch(n.length){case 0:return gn(e);case 1:return[a]=n,kn(e,a);case 2:return[t,r]=n,kn(e,sn(t,r))}},mt=function(e,n,t){let r=Mn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},dt={},pt=function(...e){1===e.length&&(e=e[0]);var n=pt.options.context.templatePath.join("."),t=dt[n]=dt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var bt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let xt;function gt(e,n){return xt=xt||Math.random(),xt+=.618033988749895,xt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ht.hsv(360*xt,100*e,100*n)}function vt(){return gt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:wt,lastName:kt,cfirstName:At,clastName:Ct}=yt;function Mt(){var e=wt.male.concat();return ft(e)}function jt(){return ft(kt)}function Et(){return ft(At)}function Ot(){return ft(Ct)}var St,Rt=new Uint8Array(16);function Tt(){if(!St&&!(St="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return St(Rt)}var Ft=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function _t(e){return"string"==typeof e&&Ft.test(e)}for(var Dt=[],qt=0;qt<256;++qt)Dt.push((qt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Tt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Dt[e[n+0]]+Dt[e[n+1]]+Dt[e[n+2]]+Dt[e[n+3]]+"-"+Dt[e[n+4]]+Dt[e[n+5]]+"-"+Dt[e[n+6]]+Dt[e[n+7]]+"-"+Dt[e[n+8]]+Dt[e[n+9]]+"-"+Dt[e[n+10]]+Dt[e[n+11]]+Dt[e[n+12]]+Dt[e[n+13]]+Dt[e[n+14]]+Dt[e[n+15]]).toLowerCase();if(!_t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const zt=Object.keys(Pt),Lt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ht={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Ht).join("|")})`,"g");function It(e="yyyy-MM-dd"){return Bt(Ut(),e)}function Bt(e,n){return n.replace(Nt,(function n(t,r){let a=Ht[r];return"function"==typeof a?a(e):a in Ht?n(t,a):e[a]()}))}function Ut(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Gt=0;const Wt=function(e){return Gt+=+e||1},Jt=Wt;function Kt(e=12,n=18){return Qe(En(sn(e,n),(()=>Yt())).join(""))+"."}function Yt(e=3,n=10){return En(sn(e,n),(()=>In("lower"))).join("")}function Vt(e=12,n=18){return En(sn(e,n),(()=>Xt())).join("")+"。"}function Xt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=zn(n,t));break;case 3:[a,n,t]=e,r=zn(n,t)}return kn(a,r).join("")}const Zt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Qt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function er(){return ft(Zt)}function nr(e){return`${Yt()}.${e||tr()}`}function tr(){return ft(Qt)}var rr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ar={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:or,_screenSize:ur,_videoSize:lr}=rr;const ir=Object.keys(ar);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=ft(or)),r=(r||vt()).replace(/^#/,""),t=(t||vt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var hr=["东北","华北","华东","华中","华南","西南","西北"];function sr(e){let n;switch(On(e)){case"array":n=e;default:n=[e]}return n}var fr=Object.freeze({__proto__:null,integer:Pn,isNumber:qn,random:sn,natural:zn,int:Pn,float:Ln,boolean:Hn,bool:Hn,character:In,char:In,string:Bn,str:Bn,range:pn,color:function(e){return e||st[e]?st[e].nicer:ft(bt).hex},hex:vt,rgb:function(){return gt().hsv().string()},rgba:function(){return gt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return gt().hsl().string()},_goldenRatioColor:gt,first:Mt,last:jt,name:function(e){return e=e?` ${Mt()} `:" ",`${Mt()}${e}${jt()}`},cfirst:Et,clast:Ot,cname:function(){return Et()+Ot()},capitalize:Qe,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:ft,shuffle:mt,order:pt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=ft(Lt).id+It("yyyyMMdd")+Bn("number",3);for(var r=0;rKt())).join("\n")},word:Yt,sentence:Kt,title:function(e=3,n=7){return En(sn(e,n),(()=>Qe(Yt()))).join("")},ctitle:function(e=3,n=7){return En(sn(e,n),(()=>Xt())).join("")},csentence:Vt,cparagraph:function(e=3,n=7){return En(sn(e,n),(()=>Vt())).join("\n")},cword:Xt,protocol:er,domain:nr,tld:tr,email:function(e){return`${In("lower")}.${Yt()}@${e||Yt()+"."+tr()}`},ip:function(){return[...Array(4)].map((()=>zn(0,255))).join(".")},url:function(e,n){return`${e||er()}://${n||nr()}/${Yt()}`},_patternLetters:Ht,_rformat:Nt,_formatDate:Bt,_randomDate:Ut,time:function(e="HH:mm:ss"){return It(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return It(e)},date:It,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Bt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ut(e,n).getTime():Ut().getTime()},_adSize:or,_screenSize:ur,_videoSize:lr,image:cr,img:cr,_brandColors:ar,_brandNames:ir,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=ft(or)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=ar[ft(ir)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return ft(hr)},province:function(){return ft(Lt).name},city:function(e){var n=ft(Lt),t=ft(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=ft(Lt),t=ft(n.children),r=ft(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=zn(0,9);return n},genFile:function(e){return new File(sr(e),Yt())},genBlob:function(){return new Blob(sr(anyData))}}),mr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function dr(e=""){"string"!=typeof e&&(e+="");var n=e.match(mr.RE_KEY),t=n&&n[3]&&n[3].match(mr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(mr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function pr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=ft(ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ta(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(ta(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function br({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Hn(n,e,r):r}function xr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function gr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Ln(n,t,r,a)})):u=n&&!a[2]?t:o,u}function vr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=mt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(mr.RE_KEY);i&&i[2]&&"number"===On(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function wr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function kr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function Ar(e,n){yr.call(this,e),this.body=n}function Cr(e){Ar.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Mr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Er(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Or(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Sr(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Rr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function Dr(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new wr(e,n[1]):e},me=function(e,n,t){return new kr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ve=function(){return new yr("end")},ye=function(e,n){return new Mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",qe='"+"',$e=function(){return new jr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new jr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Ar("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Ar("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Ar("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Er(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Or(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Sr(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Dr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new _r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Fr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Tr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Rr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}zr.gen=function(e,n,t){return t=t||{guid:1},zr[e.type]?zr[e.type](e,n,t):zr.token(e,n,t)},zr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return In();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return ft(Nr.split(""));case"non-digit":return ft((Lr+Hr+Ir).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return ft(Ur.split(""));case"non-white-space":return ft((Lr+Hr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return ft((Lr+Hr+Nr).split(""));case"non-word":return ft(Ir.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Hn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Vr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Yr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ta(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in fr)&&!(u in fr))return e;o=o?o.split(/\s*,\s*/).map((e=>(mr.RE_PLACEHOLDER.exec(""),mr.RE_PLACEHOLDER.test(e)?Zr(e,n,t,r):e))):[];var i=fr[a]||fr[u];switch(On(i)){case"array":return ft(i);case"function":i.options=r;var c=i.apply(fr,o)||"";return delete i.options,c}}function Qr(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(mr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Zr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Sn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Bn(t):o;return u}var ea=Object.freeze({__proto__:null,array:pr,boolean:br,function:xr,number:gr,object:vr,regexp:Kr,string:Qr});let na=1;function ta(e,n="",t={}){var r={path:t.path||[na],templatePath:t.templatePath||[na++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=On(e);let o=ea[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(mr.RE_KEY,"$1"):n,rule:dr(n),context:r}),r.root||(r.root=u),u):e}var ra={gen:ta,extend:Rn};function aa(e,n,t=[]){var r={name:"string"==typeof n?n.replace(mr.RE_KEY,"$1"):n,template:e,type:On(e),rule:dr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>aa(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>aa(e,n,r.path)))}return r}function oa(e,n){for(var t=aa(e),r=ua.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Zr,getValueByKeyPath:Yr,normalizePath:Vr,splitPathToArray:Xr});var ua={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return la.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(mr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return la.equal("type",e.path,On(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return la.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(mr.RE_PLACEHOLDER))return r.length===o}return la.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),la.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&la.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(la.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),la.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&la.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=_n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(la.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),la.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&la.equal("properties length",e.path,u.length,o.min,r)):la.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=la.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=la.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=la.message(u),a.push(u),!1}};oa.Diff=ua,oa.Assert=la;const ia={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){for(var t in n=n.toLowerCase(),ia){var r=ia[t];let{rurl:a,rtype:o}=r;if(ha(a,e)&&ha(o,n))return r}return!1}function ha(e,n){switch(On(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function sa({template:e},n){return R(e)?e(n):ta(e)}const fa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ma=Symbol("Body internals"),da=Symbol("Response internals");async function pa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class ba{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):fa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ma]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ma].body}get bodyUsed(){return this[ma].disturbed}async arrayBuffer(){return(await pa(this[ma])).arrayBuffer()}async blob(){return pa(this[ma])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await pa(this[ma])).text()}}Object.defineProperties(ba.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const xa=new Set([301,302,303,307,308]);class ga extends ba{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":fa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[da]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[da].type}get url(){return this[da].url||""}get status(){return this[da].status}get ok(){return this[da].status>=200&&this[da].status<300}get redirected(){return this[da].counter>0}get statusText(){return this[da].statusText}get headers(){return this[da].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!xa.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[da].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var va=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){let t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=sa(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var wa="OK";let ka=XMLHttpRequest.prototype.send;const Aa=XMLHttpRequest.prototype.open; +//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 +class Ca extends XMLHttpRequest{constructor(){super(...arguments)}_send=ka;_open=Aa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=wa;const e=sa(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Ma;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ma=Ca) +/*! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao/ +*/;var ja={Handler:ra,Random:fr,Util:Dn,XHR:Ma,RE:Jr,toJSONSchema:aa,valid:oa,heredoc:Fn,setup:function(e){return Ma.setup(e)},_mocked:ia,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ra.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma&&(window.XMLHttpRequest=Ma),ia.$set({rurl:n,rtype:r,template:t}),ja}};module.exports=ja; diff --git a/dist/mock.js b/dist/mock.esm.js similarity index 99% rename from dist/mock.js rename to dist/mock.esm.js index a47a4b58..9fc5dca0 100644 --- a/dist/mock.js +++ b/dist/mock.esm.js @@ -50,7 +50,7 @@ var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ie(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function nn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Te(e))}var tn=Ce&&Ce.isRegExp,rn=tn?ye(tn):function(e){return f(e)&&"[object RegExp]"==s(e)},an=Math.floor,on=Math.random;function un(e,n){return e+an(on()*(n-e+1))}var ln=parseFloat,cn=Math.min,hn=Math.random;function sn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=hn();return cn(e+a*(n-e+ln("1e-"+((a+"").length-1))),n)}return un(e,n)}var fn=Math.ceil,mn=Math.max;var dn,pn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=mn(fn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=sn(t,r,!1);return parseFloat(sn(e,n,!0).toFixed(a))},Hn=function(e,n,t=!1){ //! cur:boolean 是划分概率的一个启动符号 -return t?sn(0,e+n)>e?!t:t:sn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const In=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),gn(e)},Bn=function(...e){var n,t,r,a;switch(e.length){case 0:n=zn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=zn(r,a));break;case 3:[t,r,a]=e,n=zn(r,a)}return En(n,(()=>In(t))).join("")};function Un(e,n){return e(n={exports:{}},n.exports),n.exports}var Gn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Wn=Un((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Jn=Un((function(e){var n={};for(var t in Gn)Gn.hasOwnProperty(t)&&(n[Gn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Gn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Wn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Wn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Wn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Jn.to,Jn.get;var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Un((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Kn)if(Kn.hasOwnProperty(l)){var i=Kn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Vn(e){var n=function(){for(var e={},n=Object.keys(Yn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var et=Qn,nt=[].slice,tt=["keyword","gray","hex"],rt={};Object.keys(et).forEach((function(e){rt[nt.call(et[e].labels).sort().join("")]=e}));var at={};function ot(e,n){if(!(this instanceof ot))return new ot(e,n);if(n&&n in tt&&(n=null),n&&!(n in et))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof ot)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Jn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=et[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=et[this.model].channels;var o=nt.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in rt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=rt[l];var i=et[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return ot.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return ot.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(et).forEach((function(e){if(-1===tt.indexOf(e)){var n=et[e].channels;ot.prototype[e]=function(){if(this.model===e)return new ot(this);if(arguments.length)return new ot(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new ot(it(et[this.model][e].raw(this.color)).concat(t),e)},ot[e]=function(t){return"number"==typeof t&&(t=ct(nt.call(arguments),n)),new ot(t,e)}}}));var ht=ot,st={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const ft=function(e,...n){let t,r,a;switch(n.length){case 0:return gn(e);case 1:return[a]=n,kn(e,a);case 2:return[t,r]=n,kn(e,sn(t,r))}},mt=function(e,n,t){let r=Mn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},dt={},pt=function(...e){1===e.length&&(e=e[0]);var n=pt.options.context.templatePath.join("."),t=dt[n]=dt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var bt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let xt;function gt(e,n){return xt=xt||Math.random(),xt+=.618033988749895,xt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ht.hsv(360*xt,100*e,100*n)}function vt(){return gt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:wt,lastName:kt,cfirstName:At,clastName:Ct}=yt;function Mt(){var e=wt.male.concat();return ft(e)}function jt(){return ft(kt)}function Et(){return ft(At)}function Ot(){return ft(Ct)}var St,Rt=new Uint8Array(16);function Tt(){if(!St&&!(St="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return St(Rt)}var Ft=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function _t(e){return"string"==typeof e&&Ft.test(e)}for(var Dt=[],qt=0;qt<256;++qt)Dt.push((qt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Tt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Dt[e[n+0]]+Dt[e[n+1]]+Dt[e[n+2]]+Dt[e[n+3]]+"-"+Dt[e[n+4]]+Dt[e[n+5]]+"-"+Dt[e[n+6]]+Dt[e[n+7]]+"-"+Dt[e[n+8]]+Dt[e[n+9]]+"-"+Dt[e[n+10]]+Dt[e[n+11]]+Dt[e[n+12]]+Dt[e[n+13]]+Dt[e[n+14]]+Dt[e[n+15]]).toLowerCase();if(!_t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const zt=Object.keys(Pt),Lt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ht={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Ht).join("|")})`,"g");function It(e="yyyy-MM-dd"){return Bt(Ut(),e)}function Bt(e,n){return n.replace(Nt,(function n(t,r){let a=Ht[r];return"function"==typeof a?a(e):a in Ht?n(t,a):e[a]()}))}function Ut(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Gt=0;const Wt=function(e){return Gt+=+e||1},Jt=Wt;function Kt(e=12,n=18){return Qe(En(sn(e,n),(()=>Yt())).join(""))+"."}function Yt(e=3,n=10){return En(sn(e,n),(()=>In("lower"))).join("")}function Vt(e=12,n=18){return En(sn(e,n),(()=>Xt())).join("")+"。"}function Xt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=zn(n,t));break;case 3:[a,n,t]=e,r=zn(n,t)}return kn(a,r).join("")}const Zt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Qt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function er(){return ft(Zt)}function nr(e){return`${Yt()}.${e||tr()}`}function tr(){return ft(Qt)}var rr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ar={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:or,_screenSize:ur,_videoSize:lr}=rr;const ir=Object.keys(ar);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=ft(or)),r=(r||vt()).replace(/^#/,""),t=(t||vt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var hr=["东北","华北","华东","华中","华南","西南","西北"];function sr(e){let n;switch(On(e)){case"array":n=e;default:n=[e]}return n}var fr=Object.freeze({__proto__:null,integer:Pn,isNumber:qn,random:sn,natural:zn,int:Pn,float:Ln,boolean:Hn,bool:Hn,character:In,char:In,string:Bn,str:Bn,range:pn,color:function(e){return e||st[e]?st[e].nicer:ft(bt).hex},hex:vt,rgb:function(){return gt().hsv().string()},rgba:function(){return gt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return gt().hsl().string()},_goldenRatioColor:gt,first:Mt,last:jt,name:function(e){return e=e?` ${Mt()} `:" ",`${Mt()}${e}${jt()}`},cfirst:Et,clast:Ot,cname:function(){return Et()+Ot()},capitalize:Qe,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:ft,shuffle:mt,order:pt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=ft(Lt).id+It("yyyyMMdd")+Bn("number",3);for(var r=0;rKt())).join("\n")},word:Yt,sentence:Kt,title:function(e=3,n=7){return En(sn(e,n),(()=>Qe(Yt()))).join("")},ctitle:function(e=3,n=7){return En(sn(e,n),(()=>Xt())).join("")},csentence:Vt,cparagraph:function(e=3,n=7){return En(sn(e,n),(()=>Vt())).join("\n")},cword:Xt,protocol:er,domain:nr,tld:tr,email:function(e){return`${In("lower")}.${Yt()}@${e||Yt()+"."+tr()}`},ip:function(){return[...Array(4)].map((()=>zn(0,255))).join(".")},url:function(e,n){return`${e||er()}://${n||nr()}/${Yt()}`},_patternLetters:Ht,_rformat:Nt,_formatDate:Bt,_randomDate:Ut,time:function(e="HH:mm:ss"){return It(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return It(e)},date:It,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Bt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ut(e,n).getTime():Ut().getTime()},_adSize:or,_screenSize:ur,_videoSize:lr,image:cr,img:cr,_brandColors:ar,_brandNames:ir,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=ft(or)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=ar[ft(ir)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return ft(hr)},province:function(){return ft(Lt).name},city:function(e){var n=ft(Lt),t=ft(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=ft(Lt),t=ft(n.children),r=ft(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=zn(0,9);return n},genFile:function(e){return new File(sr(e),Yt())},genBlob:function(){return new Blob(sr(anyData))}}),mr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function dr(e=""){"string"!=typeof e&&(e+="");var n=e.match(mr.RE_KEY),t=n&&n[3]&&n[3].match(mr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(mr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function pr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=ft(ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ta(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(ta(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function br({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Hn(n,e,r):r}function xr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function gr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Ln(n,t,r,a)})):u=n&&!a[2]?t:o,u}function vr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=mt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(mr.RE_KEY);i&&i[2]&&"number"===On(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function wr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function kr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function Ar(e,n){yr.call(this,e),this.body=n}function Cr(e){Ar.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Mr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Er(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Or(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Sr(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Rr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function Dr(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new wr(e,n[1]):e},me=function(e,n,t){return new kr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ve=function(){return new yr("end")},ye=function(e,n){return new Mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",qe='"+"',$e=function(){return new jr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new jr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Ar("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Ar("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Ar("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Er(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Or(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Sr(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Dr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new _r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Fr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Tr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Rr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}zr.gen=function(e,n,t){return t=t||{guid:1},zr[e.type]?zr[e.type](e,n,t):zr.token(e,n,t)},zr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return In();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return ft(Nr.split(""));case"non-digit":return ft((Lr+Hr+Ir).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return ft(Ur.split(""));case"non-white-space":return ft((Lr+Hr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return ft((Lr+Hr+Nr).split(""));case"non-word":return ft(Ir.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Hn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Vr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Yr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ta(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in fr)&&!(u in fr))return e;o=o?o.split(/\s*,\s*/).map((e=>(mr.RE_PLACEHOLDER.exec(""),mr.RE_PLACEHOLDER.test(e)?Zr(e,n,t,r):e))):[];var i=fr[a]||fr[u];switch(On(i)){case"array":return ft(i);case"function":i.options=r;var c=i.apply(fr,o)||"";return delete i.options,c}}function Qr(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(mr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Zr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Sn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Bn(t):o;return u}var ea=Object.freeze({__proto__:null,array:pr,boolean:br,function:xr,number:gr,object:vr,regexp:Kr,string:Qr});let na=1;function ta(e,n="",t={}){var r={path:t.path||[na],templatePath:t.templatePath||[na++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=On(e);let o=ea[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(mr.RE_KEY,"$1"):n,rule:dr(n),context:r}),r.root||(r.root=u),u):e}var ra={gen:ta,extend:Rn};function aa(e,n,t=[]){var r={name:"string"==typeof n?n.replace(mr.RE_KEY,"$1"):n,template:e,type:On(e),rule:dr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>aa(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>aa(e,n,r.path)))}return r}function oa(e,n){for(var t=aa(e),r=ua.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Zr,getValueByKeyPath:Yr,normalizePath:Vr,splitPathToArray:Xr});var ua={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return la.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(mr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return la.equal("type",e.path,On(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return la.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(mr.RE_PLACEHOLDER))return r.length===o}return la.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),la.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&la.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(la.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),la.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&la.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=_n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(la.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),la.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&la.equal("properties length",e.path,u.length,o.min,r)):la.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=la.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=la.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=la.message(u),a.push(u),!1}};oa.Diff=ua,oa.Assert=la;const ia={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){for(var t in n=n.toLowerCase(),ia){var r=ia[t];let{rurl:a,rtype:o}=r;if(ha(a,e)&&ha(o,n))return r}return!1}function ha(e,n){switch(On(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function sa({template:e},n){return R(e)?e(n):ta(e)}const fa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ma=Symbol("Body internals"),da=Symbol("Response internals");async function pa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class ba{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):fa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ma]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ma].body}get bodyUsed(){return this[ma].disturbed}async arrayBuffer(){return(await pa(this[ma])).arrayBuffer()}async blob(){return pa(this[ma])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await pa(this[ma])).text()}}Object.defineProperties(ba.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const xa=new Set([301,302,303,307,308]);class ga extends ba{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":fa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[da]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[da].type}get url(){return this[da].url||""}get status(){return this[da].status}get ok(){return this[da].status>=200&&this[da].status<300}get redirected(){return this[da].counter>0}get statusText(){return this[da].statusText}get headers(){return this[da].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!xa.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[da].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var va=window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){let t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=sa(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var wa="OK";let ka=XMLHttpRequest.prototype.send;const Aa=XMLHttpRequest.prototype.open; +return t?sn(0,e+n)>e?!t:t:sn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const In=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),gn(e)},Bn=function(...e){var n,t,r,a;switch(e.length){case 0:n=zn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=zn(r,a));break;case 3:[t,r,a]=e,n=zn(r,a)}return En(n,(()=>In(t))).join("")};function Un(e,n){return e(n={exports:{}},n.exports),n.exports}var Gn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Wn=Un((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Jn=Un((function(e){var n={};for(var t in Gn)Gn.hasOwnProperty(t)&&(n[Gn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Gn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Wn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Wn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Wn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Jn.to,Jn.get;var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Un((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Kn)if(Kn.hasOwnProperty(l)){var i=Kn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Vn(e){var n=function(){for(var e={},n=Object.keys(Yn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var et=Qn,nt=[].slice,tt=["keyword","gray","hex"],rt={};Object.keys(et).forEach((function(e){rt[nt.call(et[e].labels).sort().join("")]=e}));var at={};function ot(e,n){if(!(this instanceof ot))return new ot(e,n);if(n&&n in tt&&(n=null),n&&!(n in et))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof ot)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Jn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=et[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=et[this.model].channels;var o=nt.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in rt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=rt[l];var i=et[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return ot.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return ot.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(et).forEach((function(e){if(-1===tt.indexOf(e)){var n=et[e].channels;ot.prototype[e]=function(){if(this.model===e)return new ot(this);if(arguments.length)return new ot(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new ot(it(et[this.model][e].raw(this.color)).concat(t),e)},ot[e]=function(t){return"number"==typeof t&&(t=ct(nt.call(arguments),n)),new ot(t,e)}}}));var ht=ot,st={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const ft=function(e,...n){let t,r,a;switch(n.length){case 0:return gn(e);case 1:return[a]=n,kn(e,a);case 2:return[t,r]=n,kn(e,sn(t,r))}},mt=function(e,n,t){let r=Mn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},dt={},pt=function(...e){1===e.length&&(e=e[0]);var n=pt.options.context.templatePath.join("."),t=dt[n]=dt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var bt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let xt;function gt(e,n){return xt=xt||Math.random(),xt+=.618033988749895,xt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ht.hsv(360*xt,100*e,100*n)}function vt(){return gt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:wt,lastName:kt,cfirstName:At,clastName:Ct}=yt;function Mt(){var e=wt.male.concat();return ft(e)}function jt(){return ft(kt)}function Et(){return ft(At)}function Ot(){return ft(Ct)}var St,Rt=new Uint8Array(16);function Tt(){if(!St&&!(St="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return St(Rt)}var Ft=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function _t(e){return"string"==typeof e&&Ft.test(e)}for(var Dt=[],qt=0;qt<256;++qt)Dt.push((qt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Tt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Dt[e[n+0]]+Dt[e[n+1]]+Dt[e[n+2]]+Dt[e[n+3]]+"-"+Dt[e[n+4]]+Dt[e[n+5]]+"-"+Dt[e[n+6]]+Dt[e[n+7]]+"-"+Dt[e[n+8]]+Dt[e[n+9]]+"-"+Dt[e[n+10]]+Dt[e[n+11]]+Dt[e[n+12]]+Dt[e[n+13]]+Dt[e[n+14]]+Dt[e[n+15]]).toLowerCase();if(!_t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const zt=Object.keys(Pt),Lt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ht={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Ht).join("|")})`,"g");function It(e="yyyy-MM-dd"){return Bt(Ut(),e)}function Bt(e,n){return n.replace(Nt,(function n(t,r){let a=Ht[r];return"function"==typeof a?a(e):a in Ht?n(t,a):e[a]()}))}function Ut(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Gt=0;const Wt=function(e){return Gt+=+e||1},Jt=Wt;function Kt(e=12,n=18){return Qe(En(sn(e,n),(()=>Yt())).join(""))+"."}function Yt(e=3,n=10){return En(sn(e,n),(()=>In("lower"))).join("")}function Vt(e=12,n=18){return En(sn(e,n),(()=>Xt())).join("")+"。"}function Xt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=zn(n,t));break;case 3:[a,n,t]=e,r=zn(n,t)}return kn(a,r).join("")}const Zt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Qt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function er(){return ft(Zt)}function nr(e){return`${Yt()}.${e||tr()}`}function tr(){return ft(Qt)}var rr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ar={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:or,_screenSize:ur,_videoSize:lr}=rr;const ir=Object.keys(ar);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=ft(or)),r=(r||vt()).replace(/^#/,""),t=(t||vt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var hr=["东北","华北","华东","华中","华南","西南","西北"];function sr(e){let n;switch(On(e)){case"array":n=e;default:n=[e]}return n}var fr=Object.freeze({__proto__:null,integer:Pn,isNumber:qn,random:sn,natural:zn,int:Pn,float:Ln,boolean:Hn,bool:Hn,character:In,char:In,string:Bn,str:Bn,range:pn,color:function(e){return e||st[e]?st[e].nicer:ft(bt).hex},hex:vt,rgb:function(){return gt().hsv().string()},rgba:function(){return gt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return gt().hsl().string()},_goldenRatioColor:gt,first:Mt,last:jt,name:function(e){return e=e?` ${Mt()} `:" ",`${Mt()}${e}${jt()}`},cfirst:Et,clast:Ot,cname:function(){return Et()+Ot()},capitalize:Qe,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:ft,shuffle:mt,order:pt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=ft(Lt).id+It("yyyyMMdd")+Bn("number",3);for(var r=0;rKt())).join("\n")},word:Yt,sentence:Kt,title:function(e=3,n=7){return En(sn(e,n),(()=>Qe(Yt()))).join("")},ctitle:function(e=3,n=7){return En(sn(e,n),(()=>Xt())).join("")},csentence:Vt,cparagraph:function(e=3,n=7){return En(sn(e,n),(()=>Vt())).join("\n")},cword:Xt,protocol:er,domain:nr,tld:tr,email:function(e){return`${In("lower")}.${Yt()}@${e||Yt()+"."+tr()}`},ip:function(){return[...Array(4)].map((()=>zn(0,255))).join(".")},url:function(e,n){return`${e||er()}://${n||nr()}/${Yt()}`},_patternLetters:Ht,_rformat:Nt,_formatDate:Bt,_randomDate:Ut,time:function(e="HH:mm:ss"){return It(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return It(e)},date:It,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Bt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ut(e,n).getTime():Ut().getTime()},_adSize:or,_screenSize:ur,_videoSize:lr,image:cr,img:cr,_brandColors:ar,_brandNames:ir,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=ft(or)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=ar[ft(ir)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return ft(hr)},province:function(){return ft(Lt).name},city:function(e){var n=ft(Lt),t=ft(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=ft(Lt),t=ft(n.children),r=ft(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=zn(0,9);return n},genFile:function(e){return new File(sr(e),Yt())},genBlob:function(){return new Blob(sr(anyData))}}),mr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function dr(e=""){"string"!=typeof e&&(e+="");var n=e.match(mr.RE_KEY),t=n&&n[3]&&n[3].match(mr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(mr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function pr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=ft(ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ta(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(ta(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function br({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Hn(n,e,r):r}function xr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function gr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Ln(n,t,r,a)})):u=n&&!a[2]?t:o,u}function vr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=mt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(mr.RE_KEY);i&&i[2]&&"number"===On(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function wr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function kr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function Ar(e,n){yr.call(this,e),this.body=n}function Cr(e){Ar.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Mr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Er(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Or(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Sr(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Rr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function Dr(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new wr(e,n[1]):e},me=function(e,n,t){return new kr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ve=function(){return new yr("end")},ye=function(e,n){return new Mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",qe='"+"',$e=function(){return new jr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new jr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Ar("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Ar("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Ar("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Er(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Or(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Sr(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Dr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new _r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Fr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Tr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Rr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}zr.gen=function(e,n,t){return t=t||{guid:1},zr[e.type]?zr[e.type](e,n,t):zr.token(e,n,t)},zr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return In();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return ft(Nr.split(""));case"non-digit":return ft((Lr+Hr+Ir).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return ft(Ur.split(""));case"non-white-space":return ft((Lr+Hr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return ft((Lr+Hr+Nr).split(""));case"non-word":return ft(Ir.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Hn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Vr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Yr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ta(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in fr)&&!(u in fr))return e;o=o?o.split(/\s*,\s*/).map((e=>(mr.RE_PLACEHOLDER.exec(""),mr.RE_PLACEHOLDER.test(e)?Zr(e,n,t,r):e))):[];var i=fr[a]||fr[u];switch(On(i)){case"array":return ft(i);case"function":i.options=r;var c=i.apply(fr,o)||"";return delete i.options,c}}function Qr(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(mr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Zr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Sn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Bn(t):o;return u}var ea=Object.freeze({__proto__:null,array:pr,boolean:br,function:xr,number:gr,object:vr,regexp:Kr,string:Qr});let na=1;function ta(e,n="",t={}){var r={path:t.path||[na],templatePath:t.templatePath||[na++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=On(e);let o=ea[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(mr.RE_KEY,"$1"):n,rule:dr(n),context:r}),r.root||(r.root=u),u):e}var ra={gen:ta,extend:Rn};function aa(e,n,t=[]){var r={name:"string"==typeof n?n.replace(mr.RE_KEY,"$1"):n,template:e,type:On(e),rule:dr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>aa(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>aa(e,n,r.path)))}return r}function oa(e,n){for(var t=aa(e),r=ua.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Zr,getValueByKeyPath:Yr,normalizePath:Vr,splitPathToArray:Xr});var ua={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return la.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(mr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return la.equal("type",e.path,On(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return la.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(mr.RE_PLACEHOLDER))return r.length===o}return la.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),la.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&la.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(la.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),la.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&la.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=_n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(la.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),la.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&la.equal("properties length",e.path,u.length,o.min,r)):la.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=la.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=la.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=la.message(u),a.push(u),!1}};oa.Diff=ua,oa.Assert=la;const ia={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){for(var t in n=n.toLowerCase(),ia){var r=ia[t];let{rurl:a,rtype:o}=r;if(ha(a,e)&&ha(o,n))return r}return!1}function ha(e,n){switch(On(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function sa({template:e},n){return R(e)?e(n):ta(e)}const fa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ma=Symbol("Body internals"),da=Symbol("Response internals");async function pa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class ba{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):fa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ma]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ma].body}get bodyUsed(){return this[ma].disturbed}async arrayBuffer(){return(await pa(this[ma])).arrayBuffer()}async blob(){return pa(this[ma])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await pa(this[ma])).text()}}Object.defineProperties(ba.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const xa=new Set([301,302,303,307,308]);class ga extends ba{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":fa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[da]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[da].type}get url(){return this[da].url||""}get status(){return this[da].status}get ok(){return this[da].status>=200&&this[da].status<300}get redirected(){return this[da].counter>0}get statusText(){return this[da].statusText}get headers(){return this[da].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!xa.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[da].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var va=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){let t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=sa(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var wa="OK";let ka=XMLHttpRequest.prototype.send;const Aa=XMLHttpRequest.prototype.open; //! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 class Ca extends XMLHttpRequest{constructor(){super(...arguments)}_send=ka;_open=Aa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=wa;const e=sa(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Ma;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ma=Ca) /*! diff --git a/package.json b/package.json index 334902e9..4a64b395 100644 --- a/package.json +++ b/package.json @@ -1,58 +1,58 @@ { - "name": "mockjs-esm", - "title": "Mock.js", - "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.9", - "homepage": "http://mockjs.com/", - "keywords": [ - "mock", - "mockJSON", - "mockAjax", - "mockTempalte" - ], - "licenses": [ - { - "type": "MIT", - "url": "https://github.com/nuysoft/Mock/blob/master/MIT-LICENSE.txt" + "name": "mockjs-esm", + "title": "Mock.js", + "description": "Mockjs 的 esm 版本,基础 api 一致", + "version": "0.9.9", + "homepage": "http://mockjs.com/", + "keywords": [ + "mock", + "mockJSON", + "mockAjax", + "mockTempalte" + ], + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nuysoft/Mock/blob/master/MIT-LICENSE.txt" + }, + { + "type": "MIT", + "url": "https://gitee.com/dongzhongzhidong/Mock/LICENSE" + } + ], + "repository": { + "type": "git", + "url": "git://gitee.com/dongzhongzhidong/Mock.git" }, - { - "type": "MIT", - "url": "https://gitee.com/dongzhongzhidong/Mock/LICENSE" + "main": "./dist/mock.esm.js", + "spm": { + "main": "./dist/mock.esm.js" + }, + "scripts": { + "dev": "rollup --config rollup.config.dev.js -w", + "build": "rollup --config rollup.config.build.js" + }, + "dependencies": { + "color": "^3.1.3", + "lodash-es": "^4.17.21", + "uuid": "^8.3.2" + }, + "devDependencies": { + "@babel/core": "^7.14.3", + "@babel/preset-env": "^7.14.4", + "@rollup/plugin-babel": "^5.3.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.0.0", + "@rollup/plugin-replace": "^2.4.2", + "rollup": "^2.50.5", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-delete": "^2.0.0", + "rollup-plugin-license": "^2.4.0", + "rollup-plugin-livereload": "^2.0.0", + "rollup-plugin-multi-input": "^1.3.1", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-serve": "^1.1.0", + "rollup-plugin-terser": "^7.0.2" } - ], - "repository": { - "type": "git", - "url": "git://gitee.com/dongzhongzhidong/Mock.git" - }, - "main": "./dist/mock.js", - "spm": { - "main": "./dist/mock.js" - }, - "scripts": { - "dev": "rollup --config rollup.config.dev.js -w", - "build": "rollup --config rollup.config.build.js" - }, - "dependencies": { - "color": "^3.1.3", - "lodash-es": "^4.17.21", - "uuid": "^8.3.2" - }, - "devDependencies": { - "@babel/core": "^7.14.3", - "@babel/preset-env": "^7.14.4", - "@rollup/plugin-babel": "^5.3.0", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-multi-entry": "^4.0.0", - "@rollup/plugin-replace": "^2.4.2", - "rollup": "^2.50.5", - "rollup-plugin-babel": "^4.4.0", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-delete": "^2.0.0", - "rollup-plugin-license": "^2.4.0", - "rollup-plugin-livereload": "^2.0.0", - "rollup-plugin-multi-input": "^1.3.1", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-serve": "^1.1.0", - "rollup-plugin-terser": "^7.0.2" - } } diff --git a/rollup.config.build.js b/rollup.config.build.js index 56696002..34f1eb60 100644 --- a/rollup.config.build.js +++ b/rollup.config.build.js @@ -9,7 +9,7 @@ export default { output: [ { // 打包出口 - file: "./dist/mock.js", + file: "./dist/mock.esm.js", format: "es", }, { @@ -17,6 +17,12 @@ export default { file: "./dist/mock.min.js", format: "iife", name: "Mock", + },{ + // 打包出口 + file: "./dist/mock.cjs.js", + format: "cjs", + name: "Mock", + }, ], plugins: [ diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index 8d8ec33f..86ee214e 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -1,4 +1,4 @@ -var realFetch = window.fetch; +var realFetch = window&&window.fetch; function mockFetch() { // 代理 fetch 的初始化函数 if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { diff --git a/test/common.test.js b/test/common.test.js new file mode 100644 index 00000000..9b34760f --- /dev/null +++ b/test/common.test.js @@ -0,0 +1,7 @@ +const Mock = require('../dist/mock.cjs.js') + + +// const a = Mock.mock({ +// 'a|20':['@cname'] +// }) +console.log(Mock) \ No newline at end of file diff --git a/test/index.html b/test/index.html index c9be0d63..dba72d1c 100644 --- a/test/index.html +++ b/test/index.html @@ -13,9 +13,9 @@ - + \ No newline at end of file From eece57586bab8fde933cd4e4f0c1e9d522104ec9 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 17:57:26 +0800 Subject: [PATCH 32/65] 0.9.10 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4a64b395..a7738b5a 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.9", + "version": "0.9.10", "homepage": "http://mockjs.com/", "keywords": [ "mock", From 7bcff09691e1316733cf4abaf1ac39358599c95e Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 18:52:48 +0800 Subject: [PATCH 33/65] =?UTF-8?q?style:=20=E4=BF=AE=E5=A4=8D=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BB=A5=E9=80=82=E5=BA=94=20eslint=20=E5=92=8C=20pre?= =?UTF-8?q?ttier?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .editorconfig | 15 + .eslintrc.js | 35 + .prettierignore | 1 + .prettierrc | 10 + package.json | 13 +- src/mock.js | 66 +- src/mock/XHR.js | 4 + src/mock/handle/array.js | 19 +- src/mock/handle/boolean.js | 4 +- src/mock/handle/function.js | 2 +- src/mock/handle/gen.js | 20 +- src/mock/handle/index.js | 14 +- src/mock/handle/number.js | 6 +- src/mock/handle/object.js | 26 +- src/mock/handle/path.js | 35 +- src/mock/handle/placeholder.js | 36 +- src/mock/handle/regexp.js | 4 +- src/mock/handle/string.js | 22 +- src/mock/handler.js | 24 +- src/mock/mock.js | 34 + src/mock/parser.js | 64 +- src/mock/random/address.js | 28 +- src/mock/random/address_ch.json | 4 +- src/mock/random/address_dict.js | 17 +- src/mock/random/basic.js | 10 +- src/mock/random/basic/boolean.js | 5 +- src/mock/random/basic/character.js | 12 +- src/mock/random/basic/number.js | 8 +- src/mock/random/basic/range.js | 2 +- src/mock/random/basic/string.js | 15 +- src/mock/random/brandColors.json | 151 +++- src/mock/random/color.js | 28 +- src/mock/random/color/color_dict.js | 68 +- src/mock/random/color/color_dict_cn.json | 529 ++++++++++- src/mock/random/date.js | 45 +- src/mock/random/date/_patternLetters.js | 50 +- src/mock/random/file.js | 9 +- src/mock/random/helper.js | 30 +- src/mock/random/image.js | 62 +- src/mock/random/image.json | 36 +- src/mock/random/index.js | 24 +- src/mock/random/misc.js | 24 +- src/mock/random/misc/guid.js | 60 +- src/mock/random/misc/id.js | 20 +- src/mock/random/name.js | 20 +- src/mock/random/name.json | 16 +- src/mock/random/text.js | 4 +- src/mock/random/text/range.js | 2 +- src/mock/random/text/text-ch.js | 32 +- src/mock/random/text/text_en.js | 24 +- src/mock/random/web.js | 2 +- src/mock/random/web/web_dict.js | 18 +- src/mock/random/web/web_func.js | 32 +- src/mock/regexp/handler.js | 190 ++-- src/mock/regexp/index.js | 4 +- src/mock/regexp/parser.js | 623 +++++++++---- src/mock/schema/index.js | 2 +- src/mock/schema/schema.js | 16 +- src/mock/util.js | 10 +- src/mock/utils/each.js | 8 +- src/mock/utils/extend.js | 3 +- src/mock/utils/heredoc.js | 12 +- src/mock/utils/type.js | 4 +- src/mock/valid/index.js | 2 +- src/mock/valid/valid.js | 210 +++-- src/mock/xhr/XMLHttpRequest/constant.js | 82 +- src/mock/xhr/XMLHttpRequest/xhr.js | 41 +- src/mock/xhr/ajax-tools.js | 16 +- src/mock/xhr/fetch/fetch.js | 19 +- src/mock/xhr/fetch/src/INTERNALS.js | 4 +- src/mock/xhr/fetch/src/body.js | 8 +- src/mock/xhr/fetch/src/body/consumeBody.js | 2 +- .../xhr/fetch/src/body/exactContentType.js | 13 +- src/mock/xhr/fetch/src/response.js | 30 +- src/mock/xhr/fetch/src/utils/is-redirect.js | 4 +- src/mock/xhr/fetch/src/utils/is.js | 18 +- src/mock/xhr/index.js | 6 +- yarn.lock | 827 +++++++++++++++++- 78 files changed, 2936 insertions(+), 1059 deletions(-) create mode 100644 .editorconfig create mode 100644 .eslintrc.js create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 src/mock/XHR.js create mode 100644 src/mock/mock.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..8e08ed89 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +# /.editorconfig + +root = true + +[*] + +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..ec6f8c86 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,35 @@ +module.exports = { + env: { + browser: true, + es2021: true, + node: true, + }, + plugins: ['prettier'], + extends: ['eslint:recommended', 'prettier', 'google'], + parser: 'babel-eslint', + parserOptions: { + ecmaVersion: 12, + sourceType: 'module', + }, + rules: { + 'prettier/prettier': ['error'], + 'no-console': 0, + 'no-prototype-builtins': 0, // 不调用 object 本身的属性 + 'no-useless-escape': 0, // 正则表达式转义的时候的一个错误 + 'require-jsdoc': 0, + 'new-cap': 0, // 函数首字母不能大写 + indent: 0, // prettier 已经处理好了 + 'object-curly-spacing': 0, // prettier 自动格式化这个部分 + 'max-len': ['error', 120], + 'operator-linebreak': 0, // 交由 prettier 判断 + 'quote-props': ['error', 'as-needed'], + 'space-before-function-paren': 0, // 交由 prettier 管理 + 'valid-jsdoc': 0, + 'linebreak-style': [0, 'error', 'windows'], + 'max-len': 0, // 交由 prettier 判断 + 'guard-for-in': 0, + }, + globals: { + window: true, + }, +}; diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..ed691d1b --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ +./src/mock/regexp/parser.js diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..92ae9404 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "printWidth": 120, + "tabWidth": 4, + "useTabs": false, + "endOfLine": "auto", + "singleQuote": true, + "semi": true, + "trailingComma": "all", + "bracketSpacing": true +} diff --git a/package.json b/package.json index a7738b5a..d7590501 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,10 @@ }, "scripts": { "dev": "rollup --config rollup.config.dev.js -w", - "build": "rollup --config rollup.config.build.js" + "build": "rollup --config rollup.config.build.js", + "lint": "eslint src", + "Lint": "prettier --write src/**/*.{ts,json,md,yml,js} & eslint src", + "prettier": "prettier --write src/**/*.{ts,json,md,yml,js}" }, "dependencies": { "color": "^3.1.3", @@ -38,12 +41,18 @@ "uuid": "^8.3.2" }, "devDependencies": { - "@babel/core": "^7.14.3", + "@babel/core": "^7.14.6", "@babel/preset-env": "^7.14.4", "@rollup/plugin-babel": "^5.3.0", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-multi-entry": "^4.0.0", "@rollup/plugin-replace": "^2.4.2", + "babel-eslint": "^10.1.0", + "eslint": "^7.29.0", + "eslint-config-google": "^0.14.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^3.4.0", + "prettier": "^2.3.2", "rollup": "^2.50.5", "rollup-plugin-babel": "^4.4.0", "rollup-plugin-commonjs": "^10.1.0", diff --git a/src/mock.js b/src/mock.js index ca0395c1..062b79eb 100644 --- a/src/mock.js +++ b/src/mock.js @@ -1,26 +1,25 @@ -/* global require, module, window */ -import Handler from "./mock/handler.js"; -import * as Util from "./mock/util.js"; -import * as Random from "./mock/random/index.js"; -import * as RE from "./mock/regexp/index.js"; -import { toJSONSchema } from "./mock/schema/index.js"; -import { valid } from "./mock/valid/index.js"; -import { _mocked } from "./mock/_mocked.js"; -import { MockXMLHttpRequest } from "./mock/xhr/index.js"; - -var XHR; -if (typeof window !== "undefined") XHR = MockXMLHttpRequest; - -/*! +// global require, module, window +import Handler from './mock/handler.js'; +import * as Util from './mock/util.js'; +import * as Random from './mock/random/index.js'; +import * as RE from './mock/regexp/index.js'; +import { toJSONSchema } from './mock/schema/index.js'; +import { valid } from './mock/valid/index.js'; +import { _mocked } from './mock/_mocked.js'; +import { XHR } from './mock/XHR.js'; +import { mock } from './mock'; + +/* ! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 + + 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ */ -var Mock = { + +const Mock = { Handler, Random, Util, @@ -33,9 +32,10 @@ var Mock = { return XHR.setup(settings); }, _mocked, + mock, }; -Mock.version = "1.1.1-es6"; +Mock.version = '1.1.1-es6'; /* * Mock.mock( template ) @@ -47,35 +47,5 @@ Mock.version = "1.1.1-es6"; 根据数据模板生成模拟数据。 */ -Mock.mock = function (...args) { - let rurl, - rtype = "get", - template; - - switch (args.length) { - case 1: - // Mock.mock(template) - [template] = args; - return Handler.gen(template); - // 2 和 3 switch 穿透 - case 2: - // Mock.mock(rurl, template) - [rurl, template] = args; - break; - case 3: - // Mock.mock(rurl,rtype, template) - [rurl, rtype, template] = args; - break; - } - - // 拦截 XHR - if (XHR) window.XMLHttpRequest = XHR; - _mocked.$set({ - rurl, - rtype, - template, - }); - return Mock; -}; export default Mock; diff --git a/src/mock/XHR.js b/src/mock/XHR.js new file mode 100644 index 00000000..6ee9e6c0 --- /dev/null +++ b/src/mock/XHR.js @@ -0,0 +1,4 @@ +import { MockXMLHttpRequest } from './mock/xhr/index.js'; +let XHR; +if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; +export { XHR }; diff --git a/src/mock/handle/array.js b/src/mock/handle/array.js index 79e75177..3356f0ad 100644 --- a/src/mock/handle/array.js +++ b/src/mock/handle/array.js @@ -1,7 +1,12 @@ -import { pick } from "../random/index.js"; -import { gen } from "./gen.js"; -export function array({ name, rule: { min, max, parameters, count }, template, context: { path, templatePath, root, templateRoot } }) { - var result = []; +import { pick } from '../random/index.js'; +import { gen } from './gen.js'; +export function array({ + name, + rule: { min, max, parameters, count }, + template, + context: { path, templatePath, root, templateRoot }, +}) { + let result = []; // 'name|1': [] // 'name|count': [] @@ -19,7 +24,7 @@ export function array({ name, rule: { min, max, parameters, count }, template, c templateCurrentContext: template, root: root || result, templateRoot: templateRoot || template, - }) + }), ); }); } else { @@ -34,7 +39,7 @@ export function array({ name, rule: { min, max, parameters, count }, template, c templateCurrentContext: template, root: root || result, templateRoot: templateRoot || template, - }) + }), ); } else { // 'data|+1': [{}, {}] @@ -63,7 +68,7 @@ export function array({ name, rule: { min, max, parameters, count }, template, c templateCurrentContext: template, root: root || result, templateRoot: templateRoot || template, - }) + }), ); }); }); diff --git a/src/mock/handle/boolean.js b/src/mock/handle/boolean.js index d601254e..4bc5075a 100644 --- a/src/mock/handle/boolean.js +++ b/src/mock/handle/boolean.js @@ -1,5 +1,5 @@ -import { bool } from "../random/index.js"; -export function boolean({ rule: { max, min, parameters }, template = "" }) { +import { bool } from '../random/index.js'; +export function boolean({ rule: { max, min, parameters }, template = '' }) { // 'prop|multiple': false, 当前值是相反值的概率倍数 // 'prop|probability-probability': false, 当前值与相反值的概率 return parameters ? bool(min, max, template) : template; diff --git a/src/mock/handle/function.js b/src/mock/handle/function.js index 5d32328b..62f339f4 100644 --- a/src/mock/handle/function.js +++ b/src/mock/handle/function.js @@ -1,5 +1,5 @@ function _function(options) { - let { + const { template, context: { currentContext }, } = options; diff --git a/src/mock/handle/gen.js b/src/mock/handle/gen.js index d8ba0720..4e42dc87 100644 --- a/src/mock/handle/gen.js +++ b/src/mock/handle/gen.js @@ -1,10 +1,10 @@ -import Constant from "../constant.js"; -import { type as Type } from "../util.js"; -import { parser as Parser } from "../parser.js"; -import * as typeset from "./index.js"; +import Constant from '../constant.js'; +import { type as Type } from '../util.js'; +import { parser as Parser } from '../parser.js'; +import * as typeset from './index.js'; let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 -export function gen(template, name = "", context = {}) { - var newContext = { +export function gen(template, name = '', context = {}) { + const newContext = { // 当前访问路径,只有属性名,不包括生成规则 path: context.path || [GID], templatePath: context.templatePath || [GID++], @@ -19,9 +19,9 @@ export function gen(template, name = "", context = {}) { }; // console.log('path:', context.path.join('.'), template) - var type = Type(template); - let func = typeset[type]; - var data; + const type = Type(template); + const func = typeset[type]; + let data; if (func) { data = func({ @@ -32,7 +32,7 @@ export function gen(template, name = "", context = {}) { // 属性名 + 生成规则 name, // 属性名 - parsedName: name ? ("" + name).replace(Constant.RE_KEY, "$1") : name, + parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, // 解析后的生成规则 rule: Parser(name), // 相关上下文 diff --git a/src/mock/handle/index.js b/src/mock/handle/index.js index 19fb23a3..3ec2511d 100644 --- a/src/mock/handle/index.js +++ b/src/mock/handle/index.js @@ -1,7 +1,7 @@ -export { array } from "./array.js"; -export { boolean } from "./boolean.js"; -export { function } from "./function.js"; -export { number } from "./number.js"; -export { object } from "./object.js"; -export { regexp } from "./regexp.js"; -export { string } from "./string.js"; +export { array } from './array.js'; +export { boolean } from './boolean.js'; +export { function } from './function.js'; +export { number } from './number.js'; +export { object } from './object.js'; +export { regexp } from './regexp.js'; +export { string } from './string.js'; diff --git a/src/mock/handle/number.js b/src/mock/handle/number.js index a0210abc..f9f51a26 100644 --- a/src/mock/handle/number.js +++ b/src/mock/handle/number.js @@ -1,6 +1,6 @@ -import { float } from "../random/basic/number.js"; -export function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = "" }) { - var result; +import { float } from '../random/basic/number.js'; +export function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { + let result; if (decimal) { // 'float1|.1-10': 10, // 'float2|1-100.1-10': 1, diff --git a/src/mock/handle/object.js b/src/mock/handle/object.js index 435bcf36..6a7d310a 100644 --- a/src/mock/handle/object.js +++ b/src/mock/handle/object.js @@ -1,18 +1,18 @@ -import { shuffle } from "../random/index.js"; -import Constant from "../constant.js"; -import { type as Type } from "../util.js"; -import { gen } from "./gen.js"; +import { shuffle } from '../random/index.js'; +import Constant from '../constant.js'; +import { type as Type } from '../util.js'; +import { gen } from './gen.js'; export function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - var result = {}, - keys = [], - fnKeys = []; + const result = {}; + let keys = []; + const fnKeys = []; // 'obj|min-max': {} /* jshint -W041 */ if (min != undefined) { keys = shuffle(Object.keys(template)).slice(0, count); keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); + const parsedKey = key.replace(Constant.RE_KEY, '$1'); result[parsedKey] = gen(template[key], key, { path: [...path, parsedKey], @@ -26,8 +26,8 @@ export function object({ template, rule: { min, count }, context: { path, templa } else { // 'obj': {} // #25 改变了非函数属性的顺序,查找起来不方便 - for (let key in template) { - (typeof template[key] === "function" ? fnKeys : keys).push(key); + for (const key in template) { + (typeof template[key] === 'function' ? fnKeys : keys).push(key); } keys = keys.concat(fnKeys); @@ -44,7 +44,7 @@ export function object({ template, rule: { min, count }, context: { path, templa */ keys.forEach((key) => { - let parsedKey = key.replace(Constant.RE_KEY, "$1"); + const parsedKey = key.replace(Constant.RE_KEY, '$1'); result[parsedKey] = gen(template[key], key, { path: [...path, parsedKey], templatePath: [...templatePath, key], @@ -54,8 +54,8 @@ export function object({ template, rule: { min, count }, context: { path, templa templateRoot: templateRoot || template, }); // 'id|+1': 1 - let inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && Type(template[key]) === "number") { + const inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && Type(template[key]) === 'number') { template[key] += parseInt(inc[2], 10); } }); diff --git a/src/mock/handle/path.js b/src/mock/handle/path.js index 23a9472e..fa1f43fe 100644 --- a/src/mock/handle/path.js +++ b/src/mock/handle/path.js @@ -1,10 +1,11 @@ +import { gen } from './gen'; function getValueByKeyPath(key, options) { - var originalKey = key; - var keyPathParts = splitPathToArray(key); - var absolutePathParts = []; + const originalKey = key; + const keyPathParts = splitPathToArray(key); + let absolutePathParts = []; // 绝对路径 - if (key.charAt(0) === "/") { + if (key.charAt(0) === '/') { absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); } else { // 相对路径 @@ -17,9 +18,9 @@ function getValueByKeyPath(key, options) { try { key = keyPathParts[keyPathParts.length - 1]; - var currentContext = options.context.root; - var templateCurrentContext = options.context.templateRoot; - for (var i = 1; i < absolutePathParts.length - 1; i++) { + let currentContext = options.context.root; + let templateCurrentContext = options.context.templateRoot; + for (let i = 1; i < absolutePathParts.length - 1; i++) { currentContext = currentContext[absolutePathParts[i]]; templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; } @@ -29,30 +30,32 @@ function getValueByKeyPath(key, options) { // 尚未计算,递归引用数据模板中的属性 if ( templateCurrentContext && - typeof templateCurrentContext === "object" && + typeof templateCurrentContext === 'object' && key in templateCurrentContext && originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 ) { // 先计算被引用的属性值 - templateCurrentContext[key] = Handler.gen(templateCurrentContext[key], key, { + templateCurrentContext[key] = gen(templateCurrentContext[key], key, { currentContext: currentContext, templateCurrentContext: templateCurrentContext, }); return templateCurrentContext[key]; } - } catch (err) {} + } catch (err) { + console.log(err); + } - return "@" + keyPathParts.join("/"); + return '@' + keyPathParts.join('/'); } // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js function normalizePath(pathParts) { - var newPathParts = []; - for (var i = 0; i < pathParts.length; i++) { + const newPathParts = []; + for (let i = 0; i < pathParts.length; i++) { switch (pathParts[i]) { - case "..": + case '..': newPathParts.pop(); break; - case ".": + case '.': break; default: newPathParts.push(pathParts[i]); @@ -61,7 +64,7 @@ function normalizePath(pathParts) { return newPathParts; } function splitPathToArray(path) { - var parts = path.split(/\/+/); + let parts = path.split(/\/+/); if (!parts[parts.length - 1]) parts = parts.slice(0, -1); if (!parts[0]) parts = parts.slice(1); return parts; diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js index 10ea5222..8501cc01 100644 --- a/src/mock/handle/placeholder.js +++ b/src/mock/handle/placeholder.js @@ -1,30 +1,30 @@ -import Constant from "../constant.js"; -import { type as Type } from "../util.js"; -import { pick } from "../random/index.js"; -import * as Random from "../random/index.js"; -import { gen } from "./gen.js"; -import { splitPathToArray, getValueByKeyPath } from "./path.js"; +import Constant from '../constant.js'; +import { type as Type } from '../util.js'; +import { pick } from '../random/index.js'; +import * as Random from '../random/index.js'; +import { gen } from './gen.js'; +import { splitPathToArray, getValueByKeyPath } from './path.js'; // 占位符即是字符串函数的意思 function placeholder(Placeholder, obj, templateContext, options) { // console.log(options.context.path) // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(""); - var [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); + Constant.RE_PLACEHOLDER.exec(''); + let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); - var lkey = key && key.toLowerCase(), - pathParts = splitPathToArray(key); + const lkey = key && key.toLowerCase(); + const pathParts = splitPathToArray(key); // 占位符优先引用数据模板中的属性 if (obj && key in obj) return obj[key]; // 绝对路径 or 相对路径 - if (key.charAt(0) === "/" || pathParts.length > 1) return getValueByKeyPath(key, options); + if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); // 递归引用数据模板中的属性 if ( templateContext && - typeof templateContext === "object" && + typeof templateContext === 'object' && key in templateContext && Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 ) { @@ -44,7 +44,7 @@ function placeholder(Placeholder, obj, templateContext, options) { if (params) { params = params.split(/\s*,\s*/).map((param) => { // 递归解析参数中的占位符 - Constant.RE_PLACEHOLDER.exec(""); + Constant.RE_PLACEHOLDER.exec(''); if (Constant.RE_PLACEHOLDER.test(param)) { return placeholder(param, obj, templateContext, options); } @@ -54,17 +54,19 @@ function placeholder(Placeholder, obj, templateContext, options) { params = []; } - var handle = Random[key] || Random[lkey]; + const handle = Random[key] || Random[lkey]; switch (Type(handle)) { - case "array": + case 'array': { // 自动从数组中取一个,例如 @areas return pick(handle); - case "function": + } + case 'function': { // 执行占位符方法(大多数情况) handle.options = options; - var re = handle.apply(Random, params) || ""; // 因为是在字符串中,所以默认为空字符串。 + const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 delete handle.options; return re; + } } } export { placeholder }; diff --git a/src/mock/handle/regexp.js b/src/mock/handle/regexp.js index 305d9b21..cbaa18f0 100644 --- a/src/mock/handle/regexp.js +++ b/src/mock/handle/regexp.js @@ -1,8 +1,8 @@ -import * as RE from "../regexp/index.js"; +import * as RE from '../regexp/index.js'; export function regexp({ rule: { count }, template: { source } }) { // 'name': /regexp/, // 'name|1-5': /regexp/, - let Source = count === undefined ? source : Array(count).fill(source).join(""); + const Source = count === undefined ? source : Array(count).fill(source).join(''); return RE.Handler.gen(RE.Parser.parse(Source)); } diff --git a/src/mock/handle/string.js b/src/mock/handle/string.js index b0fc182a..038d41b4 100644 --- a/src/mock/handle/string.js +++ b/src/mock/handle/string.js @@ -1,22 +1,22 @@ -import Constant from "../constant.js"; -import { isNumeric } from "../util.js"; -import { string as _string } from "../random/index.js"; -import { placeholder as Placeholder } from "./placeholder.js"; +import Constant from '../constant.js'; +import { isNumeric } from '../util.js'; +import { string as _string } from '../random/index.js'; +import { placeholder as Placeholder } from './placeholder.js'; export function string(options) { - let { + const { rule: { range, count }, context: { currentContext, templateCurrentContext }, - template = "", + template = '', } = options; - var result = ""; + let result = ''; if (template.length) { // 'foo': '★', count 为 undefined 时 // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(""); + result += count === undefined ? template : Array(count).fill(template).join(''); // 'email|1-10': '@EMAIL, ', - let placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ placeholders.some((ph, index) => { // 遇到转义斜杠,不需要解析占位符 if (/^\\/.test(ph)) { @@ -24,7 +24,7 @@ export function string(options) { return; } - let phed = Placeholder(ph, currentContext, templateCurrentContext, options); + const phed = Placeholder(ph, currentContext, templateCurrentContext, options); // 只有一个占位符,并且没有其他字符 if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { @@ -33,7 +33,7 @@ export function string(options) { return true; } if (/^(true|false)$/.test(phed)) { - result = phed === "true" ? true : phed === "false" ? false : phed; // 已经是布尔值 + result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 return true; } // result = phed; diff --git a/src/mock/handler.js b/src/mock/handler.js index 3164541a..abc58b45 100644 --- a/src/mock/handler.js +++ b/src/mock/handler.js @@ -1,14 +1,14 @@ -/* +/* ## Handler 处理数据模板。 - + * Handler.gen( template, name?, context? ) 入口方法。 * Data Template Definition, DTD - + 处理数据模板定义。 * Handler.array( options ) @@ -18,7 +18,7 @@ * Handler.string( options ) * Handler.function( options ) * Handler.regexp( options ) - + 处理路径(相对和绝对)。 * Handler.getValueByKeyPath( key, options ) @@ -31,9 +31,9 @@ */ -import { extend } from "./util.js"; -import * as Random from "./random/index.js"; -import { gen } from "./handle/gen.js"; +import { extend } from './util.js'; +import * as Random from './random/index.js'; +import { gen } from './handle/gen.js'; /* template 属性值(即数据模板) name 属性名 @@ -42,16 +42,16 @@ import { gen } from "./handle/gen.js"; Handle.gen(template, name, options) context - currentContext, templateCurrentContext, + currentContext, templateCurrentContext, path, templatePath root, templateRoot */ -var Handler = { +const Handler = { gen, extend, }; -import { array, object, number, boolean, string as _string, function as _function, regexp } from "./handle/index.js"; +import { array, object, number, boolean, string as _string, function as _function, regexp } from './handle/index.js'; Handler.extend({ array, object, @@ -62,8 +62,8 @@ Handler.extend({ regexp, }); -import { placeholder } from "./handle/placeholder.js"; -import { getValueByKeyPath, normalizePath, splitPathToArray } from "./handle/path.js"; +import { placeholder } from './handle/placeholder.js'; +import { getValueByKeyPath, normalizePath, splitPathToArray } from './handle/path.js'; Handler.extend({ _all: function () { return Object.keys(Random).reduce((col, key) => { diff --git a/src/mock/mock.js b/src/mock/mock.js new file mode 100644 index 00000000..38574263 --- /dev/null +++ b/src/mock/mock.js @@ -0,0 +1,34 @@ +import Handler from './mock/handler.js'; +import { _mocked } from './mock/_mocked.js'; +import { XHR } from './XHR.js'; +export function mock(...args) { + let rurl; + let rtype = 'get'; + let template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + break; + case 3: + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; + } + + // 拦截 XHR + XHR && window && (window.XMLHttpRequest = XHR); + + _mocked.$set({ + rurl, + rtype, + template, + }); + return null; +} diff --git a/src/mock/parser.js b/src/mock/parser.js index 52403db4..e8a4eed2 100644 --- a/src/mock/parser.js +++ b/src/mock/parser.js @@ -1,48 +1,48 @@ /* - ## Parser + ## Parser - 解析数据模板(属性名部分)。 + 解析数据模板(属性名部分)。 - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], + * Parser.parse( name ) - min: min, - max: max, - count : count, + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` */ -import Constant from "./constant.js"; -import { integer } from "./random/index.js"; +import Constant from './constant.js'; +import { integer } from './random/index.js'; /* jshint -W041 */ -export function parser(name = "") { - if (typeof name !== "string") name = name + ""; - var parameters = name.match(Constant.RE_KEY); +export function parser(name = '') { + if (typeof name !== 'string') name = name + ''; + const parameters = name.match(Constant.RE_KEY); - var range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - var min = range && range[1] && parseInt(range[1], 10); // || 1 - var max = range && range[2] && parseInt(range[2], 10); // || 1 + const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + const min = range && range[1] && parseInt(range[1], 10); // || 1 + const max = range && range[2] && parseInt(range[2], 10); // || 1 // repeat || min-max || 1 // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - var count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - var decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - var dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - var dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, // int || dmin-dmax || 0 - var dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - var result = { + const result = { // 1 name, 2 inc, 3 range, 4 decimal parameters, // 1 min, 2 max @@ -58,7 +58,7 @@ export function parser(name = "") { dcount, // dmin-dimax }; - let isReturn = Object.keys(result).some((key) => key !== undefined); + const isReturn = Object.keys(result).some((key) => key !== undefined); if (isReturn) return result; return {}; } diff --git a/src/mock/random/address.js b/src/mock/random/address.js index 3a8962e9..be386d06 100644 --- a/src/mock/random/address.js +++ b/src/mock/random/address.js @@ -1,10 +1,10 @@ /* ## Address */ -import DICT from "./address_dict.js"; -var REGION = ["东北", "华北", "华东", "华中", "华南", "西南", "西北"]; -import { pick } from "./helper.js"; -import { natural } from "./basic/number.js"; +import DICT from './address_dict.js'; +const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; +import { pick } from './helper.js'; +import { natural } from './basic/number.js'; // 随机生成一个大区。 function region() { @@ -16,23 +16,23 @@ function province() { } // 随机生成一个(中国)市。 function city(prefix) { - var province = pick(DICT); - var city = pick(province.children); - return prefix ? [province.name, city.name].join(" ") : city.name; + const province = pick(DICT); + const city = pick(province.children); + return prefix ? [province.name, city.name].join(' ') : city.name; } // 随机生成一个(中国)县。 function county(prefix) { - var province = pick(DICT); - var city = pick(province.children); - var county = pick(city.children) || { - name: "-", + const province = pick(DICT); + const city = pick(province.children); + const county = pick(city.children) || { + name: '-', }; - return prefix ? [province.name, city.name, county.name].join(" ") : county.name; + return prefix ? [province.name, city.name, county.name].join(' ') : county.name; } // 随机生成一个邮政编码(六位数字)。 function zip(len) { - var zip = ""; - for (var i = 0; i < (len || 6); i++) zip += natural(0, 9); + let zip = ''; + for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); return zip; } diff --git a/src/mock/random/address_ch.json b/src/mock/random/address_ch.json index b2e84422..2dba5fe5 100644 --- a/src/mock/random/address_ch.json +++ b/src/mock/random/address_ch.json @@ -2476,7 +2476,7 @@ "469034": "陵水黎族自治县", "469035": "保亭黎族苗族自治县", "469036": "琼中黎族苗族自治县", - + "500000": "重庆", "500100": "重庆市", "500101": "万州区", @@ -3995,4 +3995,4 @@ "820200": "离岛", "990000": "海外", "990100": "海外" -} \ No newline at end of file +} diff --git a/src/mock/random/address_dict.js b/src/mock/random/address_dict.js index 8be6e532..95a829a6 100644 --- a/src/mock/random/address_dict.js +++ b/src/mock/random/address_dict.js @@ -12,7 +12,7 @@ 华中 河南省 湖北省 湖南省 西南 重庆市 四川省 贵州省 云南省 西藏自治区 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 */ // DICT = { id : Name } @@ -20,7 +20,7 @@ // 11 表示 省级, 01 表示 市, 00 表示 区 // 大致是上面这样分类的 -import DICT from "./address_ch.json"; +import DICT from './address_ch.json'; // id pid/parentId name children @@ -29,8 +29,8 @@ function createTree(list) { const bugList = []; // 用于一次遍历后没有找到父级元素的元素 const { result, mapped } = list.reduce( (all, item) => { - let { mapped, result } = all; - let { id, pid } = item; + const { mapped, result } = all; + const { id, pid } = item; mapped[id] = item; // 记录这个点 if (pid === id) { @@ -40,7 +40,7 @@ function createTree(list) { } const hasParent = mapped.hasOwnProperty(pid); if (!hasParent) { - //父级尚未插入到mapped记录中 + // 父级尚未插入到mapped记录中 bugList.push(item); return { mapped, result }; } @@ -51,7 +51,7 @@ function createTree(list) { { mapped: {}, // 缓存已经记录过的数据 result: [], - } + }, ); bugList.forEach((item) => { const parent = mapped[item.pid]; @@ -63,10 +63,11 @@ const ids = Object.keys(DICT); // 转化数组内对象的表现形式 const fixed = Object.entries(DICT).map(([id, value]) => { - var pid = id.slice(2, 6) === "0000" ? id : id.slice(4, 6) === "00" ? id.slice(0, 2) + "0000" : id.slice(0, 4) + "00"; + let pid = + id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; if (!ids.includes(pid)) { // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + "0000"; + pid = id.slice(0, 2) + '0000'; } return { id, diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js index b75e0185..e7943f53 100644 --- a/src/mock/random/basic.js +++ b/src/mock/random/basic.js @@ -1,8 +1,8 @@ /* ## Basics */ -export * from "./basic/number.js"; -export * from "./basic/boolean.js"; -export * from "./basic/character.js"; -export * from "./basic/string.js"; -export * from "./basic/range.js"; +export * from './basic/number.js'; +export * from './basic/boolean.js'; +export * from './basic/character.js'; +export * from './basic/string.js'; +export * from './basic/range.js'; diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js index 89fececc..a92482c5 100644 --- a/src/mock/random/basic/boolean.js +++ b/src/mock/random/basic/boolean.js @@ -1,6 +1,6 @@ -import { random } from "lodash-es"; +import { random } from 'lodash-es'; const boolean = function (min, max, cur = false) { - //! cur:boolean 是划分概率的一个启动符号 + // ! cur:boolean 是划分概率的一个启动符号 // if (cur) { // min = isNumber(min) ? parseInt(min, 10) : 1; // max = isNumber(max) ? parseInt(max, 10) : 1; @@ -9,7 +9,6 @@ const boolean = function (min, max, cur = false) { if (cur) { return random(0, min + max) > min ? !cur : cur; } - debugger; return random(10, -10) > 0; }; export { boolean, boolean as bool }; diff --git a/src/mock/random/basic/character.js b/src/mock/random/basic/character.js index aae8dd7d..02ac9c7a 100644 --- a/src/mock/random/basic/character.js +++ b/src/mock/random/basic/character.js @@ -1,14 +1,14 @@ -import { sample } from "lodash-es"; +import { sample } from 'lodash-es'; const pools = { - lower: "abcdefghijklmnopqrstuvwxyz", - upper: "ABCDEFGHIJKLMNOPQRSTUVWXYZ", - number: "0123456789", - symbol: "!@#$%^&*()[]", + lower: 'abcdefghijklmnopqrstuvwxyz', + upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + number: '0123456789', + symbol: '!@#$%^&*()[]', }; pools.alpha = pools.lower + pools.upper; pools.default = pools.lower + pools.upper + pools.number + pools.symbol; -const character = function (pool = "default") { +const character = function (pool = 'default') { if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { pool = pools[pool.toLowerCase()]; } diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index 10bec7fc..eb13bf51 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -1,10 +1,10 @@ -import { random } from "lodash-es"; +import { random } from 'lodash-es'; const isNumber = function (el) { - return typeof el === "number" && !isNaN(el); + return typeof el === 'number' && !isNaN(el); }; const numberGate = function (input) { if (isNumber(input)) return input; - let res = parseInt(input); + const res = parseInt(input); return isNumber(res) ? res : undefined; }; // 返回一个随机的整数。 @@ -28,7 +28,7 @@ const float = function (min, max, dmin, dmax) { dmax = numberGate(dmax) || 17; if (dmin < 1) dmin = 1; if (dmax > 17) dmax = 17; - let dcount = random(dmin, dmax, false); + const dcount = random(dmin, dmax, false); return parseFloat(random(min, max, true).toFixed(dcount)); }; export { integer, isNumber, random, natural, integer as int, float }; diff --git a/src/mock/random/basic/range.js b/src/mock/random/basic/range.js index 5ec2c10c..9d3c6d9e 100644 --- a/src/mock/random/basic/range.js +++ b/src/mock/random/basic/range.js @@ -14,4 +14,4 @@ // return start + index * step; // }); // }; -export { range } from "lodash-es"; +export { range } from 'lodash-es'; diff --git a/src/mock/random/basic/string.js b/src/mock/random/basic/string.js index bc621c79..1441f3cc 100644 --- a/src/mock/random/basic/string.js +++ b/src/mock/random/basic/string.js @@ -1,8 +1,11 @@ -import { natural } from "./number.js"; -import { times } from "lodash-es"; -import { character } from "./character.js"; +import { natural } from './number.js'; +import { times } from 'lodash-es'; +import { character } from './character.js'; const string = function (...args) { - var len, pool, min, max; + let len; + let pool; + let min; + let max; switch (args.length) { case 0: // () len = natural(3, 7); @@ -12,7 +15,7 @@ const string = function (...args) { break; case 2: // ( pool, length ) - if (typeof arguments[0] === "string") { + if (typeof args[0] === 'string') { [pool, len] = args; } else { // ( min, max ) @@ -26,6 +29,6 @@ const string = function (...args) { len = natural(min, max); break; } - return times(len, () => character(pool)).join(""); + return times(len, () => character(pool)).join(''); }; export { string, string as str }; diff --git a/src/mock/random/brandColors.json b/src/mock/random/brandColors.json index a190b124..446b8f88 100644 --- a/src/mock/random/brandColors.json +++ b/src/mock/random/brandColors.json @@ -1 +1,150 @@ -{"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33","Addvocate":"#ff6138","Adobe":"#ff0000","Aim":"#fcd20b","Amazon":"#e47911","Android":"#a4c639","Angie's List":"#7fbb00","AOL":"#0060a3","Atlassian":"#003366","Behance":"#053eff","Big Cartel":"#97b538","bitly":"#ee6123","Blogger":"#fc4f08","Boeing":"#0039a6","Booking.com":"#003580","Carbonmade":"#613854","Cheddar":"#ff7243","Code School":"#3d4944","Delicious":"#205cc0","Dell":"#3287c1","Designmoo":"#e54a4f","Deviantart":"#4e6252","Designer News":"#2d72da","Devour":"#fd0001","DEWALT":"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132","Dribbble":"#ea4c89","Dropbox":"#3d9ae8","Drupal":"#0c76ab","Dunked":"#2a323a","eBay":"#89c507","Ember":"#f05e1b","Engadget":"#00bdf6","Envato":"#528036","Etsy":"#eb6d20","Evernote":"#5ba525","Fab.com":"#dd0017","Facebook":"#3b5998","Firefox":"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084","Forrst":"#5b9a68","Foursquare":"#25a0ca","Garmin":"#007cc3","GetGlue":"#2d75a2","Gimmebar":"#f70078","GitHub":"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39","Grooveshark":"#f77f00","Groupon":"#82b548","Hacker News":"#ff6600","HelloWallet":"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5","HootSuite":"#003366","Houzz":"#73ba37","HTML5":"#ec6231","IKEA":"#ffcc33","IMDb":"#f3ce13","Instagram":"#3f729b","Intel":"#0071c5","Intuit":"#365ebf","Kickstarter":"#76cc1e","kippt":"#e03500","Kodery":"#00af81","LastFM":"#c3000d","LinkedIn":"#0e76a8","Livestream":"#cf0005","Lumo":"#576396","Mixpanel":"#a086d3","Meetup":"#e51937","Nokia":"#183693","NVIDIA":"#76b900","Opera":"#cc0f16","Path":"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf","Pinboard":"#0000e6","Pinterest":"#c8232c","PlayStation":"#665cbe","Pocket":"#ee4056","Prezi":"#318bff","Pusha":"#0f71b4","Quora":"#a82400","QUOTE.fm":"#66ceff","Rdio":"#008fd5","Readability":"#9c0000","Red Hat":"#cc0000","Resource":"#7eb400","Rockpack":"#0ba6ab","Roon":"#62b0d9","RSS":"#ee802f","Salesforce":"#1798c1","Samsung":"#0c4da2","Shopify":"#96bf48","Skype":"#00aff0","Snagajob":"#f47a20","Softonic":"#008ace","SoundCloud":"#ff7700","Space Box":"#f86960","Spotify":"#81b71a","Sprint":"#fee100","Squarespace":"#121212","StackOverflow":"#ef8236","Staples":"#cc0000","Status Chart":"#d7584f","Stripe":"#008cdd","StudyBlue":"#00afe1","StumbleUpon":"#f74425","T-Mobile":"#ea0a8e","Technorati":"#40a800","The Next Web":"#ef4423","Treehouse":"#5cb868","Trulia":"#5eab1f","Tumblr":"#34526f","Twitch.tv":"#6441a5","Twitter":"#00acee","TYPO3":"#ff8700","Ubuntu":"#dd4814","Ustream":"#3388ff","Verizon":"#ef1d1d","Vimeo":"#86c9ef","Vine":"#00a478","Virb":"#06afd8","Virgin Media":"#cc0000","Wooga":"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646","Wunderlist":"#2b88d9","XBOX":"#9bc848","XING":"#126567","Yahoo!":"#720e9e","Yandex":"#ffcc00","Yelp":"#c41200","YouTube":"#c4302b","Zalongo":"#5498dc","Zendesk":"#78a300","Zerply":"#9dcc7a","Zootool":"#5e8b1d"} \ No newline at end of file +{ + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + "Addvocate": "#ff6138", + "Adobe": "#ff0000", + "Aim": "#fcd20b", + "Amazon": "#e47911", + "Android": "#a4c639", + "Angie's List": "#7fbb00", + "AOL": "#0060a3", + "Atlassian": "#003366", + "Behance": "#053eff", + "Big Cartel": "#97b538", + "bitly": "#ee6123", + "Blogger": "#fc4f08", + "Boeing": "#0039a6", + "Booking.com": "#003580", + "Carbonmade": "#613854", + "Cheddar": "#ff7243", + "Code School": "#3d4944", + "Delicious": "#205cc0", + "Dell": "#3287c1", + "Designmoo": "#e54a4f", + "Deviantart": "#4e6252", + "Designer News": "#2d72da", + "Devour": "#fd0001", + "DEWALT": "#febd17", + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + "Dribbble": "#ea4c89", + "Dropbox": "#3d9ae8", + "Drupal": "#0c76ab", + "Dunked": "#2a323a", + "eBay": "#89c507", + "Ember": "#f05e1b", + "Engadget": "#00bdf6", + "Envato": "#528036", + "Etsy": "#eb6d20", + "Evernote": "#5ba525", + "Fab.com": "#dd0017", + "Facebook": "#3b5998", + "Firefox": "#e66000", + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + "Forrst": "#5b9a68", + "Foursquare": "#25a0ca", + "Garmin": "#007cc3", + "GetGlue": "#2d75a2", + "Gimmebar": "#f70078", + "GitHub": "#171515", + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + "Grooveshark": "#f77f00", + "Groupon": "#82b548", + "Hacker News": "#ff6600", + "HelloWallet": "#0085ca", + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + "HootSuite": "#003366", + "Houzz": "#73ba37", + "HTML5": "#ec6231", + "IKEA": "#ffcc33", + "IMDb": "#f3ce13", + "Instagram": "#3f729b", + "Intel": "#0071c5", + "Intuit": "#365ebf", + "Kickstarter": "#76cc1e", + "kippt": "#e03500", + "Kodery": "#00af81", + "LastFM": "#c3000d", + "LinkedIn": "#0e76a8", + "Livestream": "#cf0005", + "Lumo": "#576396", + "Mixpanel": "#a086d3", + "Meetup": "#e51937", + "Nokia": "#183693", + "NVIDIA": "#76b900", + "Opera": "#cc0f16", + "Path": "#e41f11", + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + "Pinboard": "#0000e6", + "Pinterest": "#c8232c", + "PlayStation": "#665cbe", + "Pocket": "#ee4056", + "Prezi": "#318bff", + "Pusha": "#0f71b4", + "Quora": "#a82400", + "QUOTE.fm": "#66ceff", + "Rdio": "#008fd5", + "Readability": "#9c0000", + "Red Hat": "#cc0000", + "Resource": "#7eb400", + "Rockpack": "#0ba6ab", + "Roon": "#62b0d9", + "RSS": "#ee802f", + "Salesforce": "#1798c1", + "Samsung": "#0c4da2", + "Shopify": "#96bf48", + "Skype": "#00aff0", + "Snagajob": "#f47a20", + "Softonic": "#008ace", + "SoundCloud": "#ff7700", + "Space Box": "#f86960", + "Spotify": "#81b71a", + "Sprint": "#fee100", + "Squarespace": "#121212", + "StackOverflow": "#ef8236", + "Staples": "#cc0000", + "Status Chart": "#d7584f", + "Stripe": "#008cdd", + "StudyBlue": "#00afe1", + "StumbleUpon": "#f74425", + "T-Mobile": "#ea0a8e", + "Technorati": "#40a800", + "The Next Web": "#ef4423", + "Treehouse": "#5cb868", + "Trulia": "#5eab1f", + "Tumblr": "#34526f", + "Twitch.tv": "#6441a5", + "Twitter": "#00acee", + "TYPO3": "#ff8700", + "Ubuntu": "#dd4814", + "Ustream": "#3388ff", + "Verizon": "#ef1d1d", + "Vimeo": "#86c9ef", + "Vine": "#00a478", + "Virb": "#06afd8", + "Virgin Media": "#cc0000", + "Wooga": "#5b009c", + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + "Wunderlist": "#2b88d9", + "XBOX": "#9bc848", + "XING": "#126567", + "Yahoo!": "#720e9e", + "Yandex": "#ffcc00", + "Yelp": "#c41200", + "YouTube": "#c4302b", + "Zalongo": "#5498dc", + "Zendesk": "#78a300", + "Zerply": "#9dcc7a", + "Zootool": "#5e8b1d" +} diff --git a/src/mock/random/color.js b/src/mock/random/color.js index 570a2583..413e0700 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -9,7 +9,7 @@ var bg_colour = Math.floor(Math.random() * 16777215).toString(16); bg_colour = "#" + ("000000" + bg_colour).slice(-6); document.bgColor = bg_colour; - + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. https://github.com/devongovett/color-generator @@ -29,7 +29,7 @@ http://tool.c7sky.com/webcolor 网页设计常用色彩搭配表 - + https://github.com/One-com/one-color An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. API 很赞 @@ -61,7 +61,7 @@ color += letters[Math.floor(Math.random() * 16)] } return color - + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 // _brainlessColor() var color = Math.floor( @@ -71,20 +71,20 @@ color = "#" + ("000000" + color).slice(-6) return color.toUpperCase() */ -import Color from "color"; //使用 color 这个库进行颜色转换 -import DICT from "./color/color_dict.js"; -import { pick } from "./helper.js"; -import RandomColor from "./color/color_dict_cn.json"; +import Color from 'color'; // 使用 color 这个库进行颜色转换 +import DICT from './color/color_dict.js'; +import { pick } from './helper.js'; +import RandomColor from './color/color_dict_cn.json'; let _hue; function _goldenRatioColor(saturation, value) { - let _goldenRatio = 0.618033988749895; + const _goldenRatio = 0.618033988749895; _hue = _hue || Math.random(); _hue += _goldenRatio; _hue %= 1; - if (typeof saturation !== "number") saturation = 0.5; - if (typeof value !== "number") value = 0.95; + if (typeof saturation !== 'number') saturation = 0.5; + if (typeof value !== 'number') value = 0.95; return Color.hsv(_hue * 360, saturation * 100, value * 100); } @@ -99,24 +99,24 @@ function color(name) { // #DAC0DE function hex() { - var hsv = _goldenRatioColor(); + const hsv = _goldenRatioColor(); return hsv.hex(); } // rgb(128,255,255) function rgb() { - var hsv = _goldenRatioColor(); + const hsv = _goldenRatioColor(); return hsv.hsv().string(); } // rgba(128,255,255,0.3) function rgba() { - var hsv = _goldenRatioColor(); + const hsv = _goldenRatioColor(); return hsv.alpha(Math.random().toFixed(2)).hsv().string(); } // hsl(300,80%,90%) function hsl() { - var hsv = _goldenRatioColor(); + const hsv = _goldenRatioColor(); return hsv.hsl().string(); } export { color, hex, rgb, rgba, hsl, _goldenRatioColor }; diff --git a/src/mock/random/color/color_dict.js b/src/mock/random/color/color_dict.js index 01b5e66d..c47a8da3 100644 --- a/src/mock/random/color/color_dict.js +++ b/src/mock/random/color/color_dict.js @@ -6,71 +6,71 @@ export default { // name value nicer navy: { - value: "#000080", - nicer: "#001F3F", + value: '#000080', + nicer: '#001F3F', }, blue: { - value: "#0000ff", - nicer: "#0074D9", + value: '#0000ff', + nicer: '#0074D9', }, aqua: { - value: "#00ffff", - nicer: "#7FDBFF", + value: '#00ffff', + nicer: '#7FDBFF', }, teal: { - value: "#008080", - nicer: "#39CCCC", + value: '#008080', + nicer: '#39CCCC', }, olive: { - value: "#008000", - nicer: "#3D9970", + value: '#008000', + nicer: '#3D9970', }, green: { - value: "#008000", - nicer: "#2ECC40", + value: '#008000', + nicer: '#2ECC40', }, lime: { - value: "#00ff00", - nicer: "#01FF70", + value: '#00ff00', + nicer: '#01FF70', }, yellow: { - value: "#ffff00", - nicer: "#FFDC00", + value: '#ffff00', + nicer: '#FFDC00', }, orange: { - value: "#ffa500", - nicer: "#FF851B", + value: '#ffa500', + nicer: '#FF851B', }, red: { - value: "#ff0000", - nicer: "#FF4136", + value: '#ff0000', + nicer: '#FF4136', }, maroon: { - value: "#800000", - nicer: "#85144B", + value: '#800000', + nicer: '#85144B', }, fuchsia: { - value: "#ff00ff", - nicer: "#F012BE", + value: '#ff00ff', + nicer: '#F012BE', }, purple: { - value: "#800080", - nicer: "#B10DC9", + value: '#800080', + nicer: '#B10DC9', }, silver: { - value: "#c0c0c0", - nicer: "#DDDDDD", + value: '#c0c0c0', + nicer: '#DDDDDD', }, gray: { - value: "#808080", - nicer: "#AAAAAA", + value: '#808080', + nicer: '#AAAAAA', }, black: { - value: "#000000", - nicer: "#111111", + value: '#000000', + nicer: '#111111', }, white: { - value: "#FFFFFF", - nicer: "#FFFFFF", + value: '#FFFFFF', + nicer: '#FFFFFF', }, }; diff --git a/src/mock/random/color/color_dict_cn.json b/src/mock/random/color/color_dict_cn.json index 811471a8..5b5bee39 100644 --- a/src/mock/random/color/color_dict_cn.json +++ b/src/mock/random/color/color_dict_cn.json @@ -1 +1,528 @@ -[{"hex":"#5c2223","name":"暗玉紫"},{"hex":"#eea2a4","name":"牡丹粉红"},{"hex":"#5a191b","name":"栗紫"},{"hex":"#f07c82","name":"香叶红"},{"hex":"#5a1216","name":"葡萄酱紫"},{"hex":"#ed5a65","name":"艳红"},{"hex":"#c04851","name":"玉红"},{"hex":"#ee3f4d","name":"茶花红"},{"hex":"#c02c38","name":"高粱红"},{"hex":"#a7535a","name":"满江红"},{"hex":"#e3b4b8","name":"鼠鼻红"},{"hex":"#f0a1a8","name":"合欢红"},{"hex":"#f1939c","name":"春梅红"},{"hex":"#a61b29","name":"苋菜红"},{"hex":"#894e54","name":"烟红"},{"hex":"#c45a65","name":"莓红"},{"hex":"#d11a2d","name":"鹅冠红"},{"hex":"#c21f30","name":"枫叶红"},{"hex":"#de1c31","name":"唐菖蒲红"},{"hex":"#7c1823","name":"枣红"},{"hex":"#541e24","name":"猪肝紫"},{"hex":"#4c1f24","name":"葡萄紫"},{"hex":"#82202b","name":"暗紫苑红"},{"hex":"#82111f","name":"殷红"},{"hex":"#ef475d","name":"草茉莉红"},{"hex":"#4d1018","name":"酱紫"},{"hex":"#ed556a","name":"山茶红"},{"hex":"#7a7374","name":"锌灰"},{"hex":"#f03752","name":"海棠红"},{"hex":"#e6d2d5","name":"蓟粉红"},{"hex":"#f0c9cf","name":"石蕊红"},{"hex":"#ee2746","name":"淡曙红"},{"hex":"#2b1216","name":"李紫"},{"hex":"#ee4863","name":"石竹红"},{"hex":"#e77c8e","name":"淡茜红"},{"hex":"#500a16","name":"金鱼紫"},{"hex":"#c27c88","name":"山黎豆红"},{"hex":"#73575c","name":"鼠背灰"},{"hex":"#ee4866","name":"淡蕊香红"},{"hex":"#621624","name":"甘蔗紫"},{"hex":"#ce5777","name":"月季红"},{"hex":"#cc163a","name":"尖晶玉红"},{"hex":"#f1c4cd","name":"水红"},{"hex":"#eeb8c3","name":"姜红"},{"hex":"#856d72","name":"芦灰"},{"hex":"#2d0c13","name":"茄皮紫"},{"hex":"#36282b","name":"苍蝇灰"},{"hex":"#bf3553","name":"锦葵红"},{"hex":"#ec9bad","name":"粉团花红"},{"hex":"#63071c","name":"石竹紫"},{"hex":"#30161c","name":"卵石紫"},{"hex":"#eea6b7","name":"晶红"},{"hex":"#e9ccd3","name":"芝兰紫"},{"hex":"#eba0b3","name":"芍药耕红"},{"hex":"#4f383e","name":"暮云灰"},{"hex":"#ed9db2","name":"豇豆红"},{"hex":"#ec8aa4","name":"报春红"},{"hex":"#ec7696","name":"淡绛红"},{"hex":"#ea7293","name":"凤仙花红"},{"hex":"#ef82a0","name":"霞光红"},{"hex":"#ec2c64","name":"喜蛋红"},{"hex":"#eb507e","name":"夹竹桃红"},{"hex":"#eb3c70","name":"松叶牡丹红"},{"hex":"#ea517f","name":"莲瓣红"},{"hex":"#de7897","name":"白芨红"},{"hex":"#b598a1","name":"隐红灰"},{"hex":"#ed2f6a","name":"榲桲红"},{"hex":"#c5708b","name":"酢酱草红"},{"hex":"#33141e","name":"火鹅紫"},{"hex":"#621d34","name":"鹞冠紫"},{"hex":"#ef3473","name":"品红"},{"hex":"#382129","name":"磨石紫"},{"hex":"#310f1b","name":"墨紫"},{"hex":"#381924","name":"檀紫"},{"hex":"#e16c96","name":"初荷红"},{"hex":"#951c48","name":"菜头紫"},{"hex":"#62102e","name":"葡萄酒红"},{"hex":"#e0c8d1","name":"淡青紫"},{"hex":"#d13c74","name":"菠根红"},{"hex":"#4b1e2f","name":"海象紫"},{"hex":"#ec4e8a","name":"兔眼红"},{"hex":"#de3f7c","name":"嫩菱红"},{"hex":"#a8456b","name":"洋葱紫"},{"hex":"#ce5e8a","name":"吊钟花红"},{"hex":"#461629","name":"绀紫"},{"hex":"#ee2c79","name":"紫荆红"},{"hex":"#ef498b","name":"扁豆花红"},{"hex":"#ede3e7","name":"马鞭草紫"},{"hex":"#ec2d7a","name":"藏花红"},{"hex":"#482936","name":"斑鸠灰"},{"hex":"#440e25","name":"古铜紫"},{"hex":"#d2568c","name":"丹紫红"},{"hex":"#e9d7df","name":"丁香淡紫"},{"hex":"#d2357d","name":"玫瑰红"},{"hex":"#36292f","name":"古鼎灰"},{"hex":"#d276a3","name":"菱锰红"},{"hex":"#c06f98","name":"樱草紫"},{"hex":"#cc5595","name":"龙须红"},{"hex":"#c35691","name":"电气石红"},{"hex":"#ba2f7b","name":"玫瑰紫"},{"hex":"#9b1e64","name":"苋菜紫"},{"hex":"#5d3f51","name":"紫灰"},{"hex":"#4e2a40","name":"龙睛鱼紫"},{"hex":"#bc84a8","name":"青蛤壳紫"},{"hex":"#c08eaf","name":"萝兰紫"},{"hex":"#411c35","name":"荸荠紫"},{"hex":"#ad6598","name":"豆蔻紫"},{"hex":"#a35c8f","name":"扁豆紫"},{"hex":"#681752","name":"牵牛紫"},{"hex":"#894276","name":"芓紫"},{"hex":"#7e2065","name":"葛巾紫"},{"hex":"#8b2671","name":"青莲"},{"hex":"#983680","name":"芥花紫"},{"hex":"#c8adc4","name":"凤信紫"},{"hex":"#1c0d1a","name":"深牵牛紫"},{"hex":"#7e1671","name":"魏紫"},{"hex":"#1e131d","name":"乌梅紫"},{"hex":"#813c85","name":"桔梗紫"},{"hex":"#d1c2d3","name":"淡牵牛紫"},{"hex":"#3e3841","name":"剑锋紫"},{"hex":"#815c94","name":"蕈紫"},{"hex":"#806d9e","name":"槿紫"},{"hex":"#e2e1e4","name":"芡食白"},{"hex":"#322f3b","name":"龙葵紫"},{"hex":"#8076a3","name":"藤萝紫"},{"hex":"#35333c","name":"沙鱼灰"},{"hex":"#22202e","name":"暗龙胆紫"},{"hex":"#131124","name":"暗蓝紫"},{"hex":"#302f4b","name":"野葡萄紫"},{"hex":"#525288","name":"野菊紫"},{"hex":"#2f2f35","name":"水牛灰"},{"hex":"#ccccd6","name":"远山紫"},{"hex":"#74759b","name":"螺甸紫"},{"hex":"#1f2040","name":"晶石紫"},{"hex":"#2e317c","name":"满天星紫"},{"hex":"#a7a8bd","name":"淡蓝紫"},{"hex":"#61649f","name":"山梗紫"},{"hex":"#2d2e36","name":"牛角灰"},{"hex":"#5e616d","name":"鱼尾灰"},{"hex":"#47484c","name":"瓦罐灰"},{"hex":"#0f1423","name":"钢蓝"},{"hex":"#131824","name":"燕颔蓝"},{"hex":"#475164","name":"鲸鱼灰"},{"hex":"#2b333e","name":"青灰"},{"hex":"#1c2938","name":"鸽蓝"},{"hex":"#101f30","name":"暗蓝"},{"hex":"#142334","name":"钢青"},{"hex":"#15559a","name":"海涛蓝"},{"hex":"#0f59a4","name":"飞燕草蓝"},{"hex":"#1661ab","name":"靛青"},{"hex":"#3170a7","name":"安安蓝"},{"hex":"#346c9c","name":"海军蓝"},{"hex":"#2775b6","name":"景泰蓝"},{"hex":"#2b73af","name":"品蓝"},{"hex":"#2474b5","name":"尼罗蓝"},{"hex":"#4e7ca1","name":"蝶翅蓝"},{"hex":"#2376b7","name":"花青"},{"hex":"#144a74","name":"鷃蓝"},{"hex":"#93b5cf","name":"星蓝"},{"hex":"#2177b8","name":"虹蓝"},{"hex":"#126bae","name":"柏林蓝"},{"hex":"#1772b4","name":"群青"},{"hex":"#baccd9","name":"云水蓝"},{"hex":"#619ac3","name":"羽扇豆蓝"},{"hex":"#495c69","name":"战舰灰"},{"hex":"#8fb2c9","name":"晴山蓝"},{"hex":"#5698c3","name":"睛蓝"},{"hex":"#11659a","name":"搪磁蓝"},{"hex":"#2983bb","name":"潮蓝"},{"hex":"#1677b3","name":"天蓝"},{"hex":"#c4cbcf","name":"大理石灰"},{"hex":"#1177b0","name":"牵牛花蓝"},{"hex":"#2486b9","name":"宝石蓝"},{"hex":"#5e7987","name":"淡蓝灰"},{"hex":"#74787a","name":"嫩灰"},{"hex":"#cdd1d3","name":"银鱼白"},{"hex":"#1781b5","name":"釉蓝"},{"hex":"#66a9c9","name":"涧石蓝"},{"hex":"#d0dfe6","name":"远天蓝"},{"hex":"#2f90b9","name":"云山蓝"},{"hex":"#8abcd1","name":"秋波蓝"},{"hex":"#c3d7df","name":"井天蓝"},{"hex":"#158bb8","name":"鸢尾蓝"},{"hex":"#d8e3e7","name":"云峰白"},{"hex":"#b2bbbe","name":"星灰"},{"hex":"#1a94bc","name":"钴蓝"},{"hex":"#5cb3cc","name":"碧青"},{"hex":"#134857","name":"苍蓝"},{"hex":"#132c33","name":"深灰蓝"},{"hex":"#21373d","name":"灰蓝"},{"hex":"#b0d5df","name":"湖水蓝"},{"hex":"#22a2c3","name":"海青"},{"hex":"#474b4c","name":"黄昏灰"},{"hex":"#63bbd0","name":"霁青"},{"hex":"#126e82","name":"玉鈫蓝"},{"hex":"#0f95b0","name":"胆矾蓝"},{"hex":"#1491a8","name":"樫鸟蓝"},{"hex":"#c7d2d4","name":"鸥蓝"},{"hex":"#1e9eb3","name":"翠蓝"},{"hex":"#3b818c","name":"蜻蜓蓝"},{"hex":"#0eb0c9","name":"孔雀蓝"},{"hex":"#29b7cb","name":"蔚蓝"},{"hex":"#51c4d3","name":"瀑布蓝"},{"hex":"#7cabb1","name":"闪蓝"},{"hex":"#10aec2","name":"甸子蓝"},{"hex":"#648e93","name":"晚波蓝"},{"hex":"#93d5dc","name":"清水蓝"},{"hex":"#617172","name":"夏云灰"},{"hex":"#c6e6e8","name":"海天蓝"},{"hex":"#869d9d","name":"虾壳青"},{"hex":"#57c3c2","name":"石绿"},{"hex":"#c4d7d6","name":"穹灰"},{"hex":"#12aa9c","name":"美蝶绿"},{"hex":"#737c7b","name":"垩灰"},{"hex":"#12a182","name":"蓝绿"},{"hex":"#1ba784","name":"竹绿"},{"hex":"#428675","name":"亚丁绿"},{"hex":"#c0c4c3","name":"月影白"},{"hex":"#248067","name":"海王绿"},{"hex":"#1a3b32","name":"深海绿"},{"hex":"#314a43","name":"绿灰"},{"hex":"#2c9678","name":"青矾绿"},{"hex":"#223e36","name":"苍绿"},{"hex":"#497568","name":"飞泉绿"},{"hex":"#141e1b","name":"莽丛绿"},{"hex":"#69a794","name":"梧枝绿"},{"hex":"#2bae85","name":"铜绿"},{"hex":"#9abeaf","name":"草原远绿"},{"hex":"#45b787","name":"蛙绿"},{"hex":"#92b3a5","name":"浪花绿"},{"hex":"#1f2623","name":"苷蓝绿"},{"hex":"#83cbac","name":"粉绿"},{"hex":"#70887d","name":"淡绿灰"},{"hex":"#55bb8a","name":"麦苗绿"},{"hex":"#20a162","name":"翠绿"},{"hex":"#40a070","name":"葱绿"},{"hex":"#1a6840","name":"荷叶绿"},{"hex":"#61ac85","name":"淡绿"},{"hex":"#68b88e","name":"田园绿"},{"hex":"#a4cab6","name":"玉簪绿"},{"hex":"#3c9566","name":"蟾绿"},{"hex":"#5dbe8a","name":"蔻梢绿"},{"hex":"#207f4c","name":"薄荷绿"},{"hex":"#eef7f2","name":"月白"},{"hex":"#579572","name":"蛋白石绿"},{"hex":"#b9dec9","name":"竹篁绿"},{"hex":"#229453","name":"孔雀绿"},{"hex":"#20894d","name":"宫殿绿"},{"hex":"#15231b","name":"云杉绿"},{"hex":"#66c18c","name":"毛绿"},{"hex":"#a4aca7","name":"冰山蓝"},{"hex":"#8a988e","name":"明灰"},{"hex":"#9eccab","name":"明绿"},{"hex":"#83a78d","name":"松霜绿"},{"hex":"#485b4d","name":"白屈菜绿"},{"hex":"#5d655f","name":"狼烟灰"},{"hex":"#6e8b74","name":"瓦松绿"},{"hex":"#2b312c","name":"槲寄生绿"},{"hex":"#c6dfc8","name":"淡翠绿"},{"hex":"#41b349","name":"玉髓绿"},{"hex":"#43b244","name":"鲜绿"},{"hex":"#253d24","name":"油绿"},{"hex":"#41ae3c","name":"宝石绿"},{"hex":"#add5a2","name":"嘉陵水绿"},{"hex":"#5e665b","name":"田螺绿"},{"hex":"#8cc269","name":"水绿"},{"hex":"#5bae23","name":"鹦鹉绿"},{"hex":"#dfecd5","name":"艾背绿"},{"hex":"#cad3c3","name":"艾绿"},{"hex":"#9fa39a","name":"镍灰"},{"hex":"#b2cf87","name":"橄榄石绿"},{"hex":"#96c24e","name":"芽绿"},{"hex":"#f0f5e5","name":"嫩菊绿"},{"hex":"#b7d07a","name":"芦苇绿"},{"hex":"#d0deaa","name":"姚黄"},{"hex":"#373834","name":"蒽油绿"},{"hex":"#bacf65","name":"苹果绿"},{"hex":"#e2e7bf","name":"海沬绿"},{"hex":"#bec936","name":"橄榄黄绿"},{"hex":"#d2d97a","name":"槐花黄绿"},{"hex":"#e2d849","name":"蝶黄"},{"hex":"#fffef8","name":"象牙白"},{"hex":"#5e5314","name":"橄榄绿"},{"hex":"#fffef9","name":"雪白"},{"hex":"#ad9e5f","name":"淡灰绿"},{"hex":"#fed71a","name":"佛手黄"},{"hex":"#f9f4dc","name":"乳白"},{"hex":"#e4bf11","name":"香蕉黄"},{"hex":"#d2b116","name":"新禾绿"},{"hex":"#fbda41","name":"油菜花黄"},{"hex":"#eed045","name":"秋葵黄"},{"hex":"#f1ca17","name":"柚黄"},{"hex":"#d2b42c","name":"草黄"},{"hex":"#f2ce2b","name":"硫华黄"},{"hex":"#e2c027","name":"姜黄"},{"hex":"#645822","name":"潭水绿"},{"hex":"#fcd217","name":"金瓜黄"},{"hex":"#f8df70","name":"麦秆黄"},{"hex":"#dfc243","name":"蒿黄"},{"hex":"#f8df72","name":"茉莉黄"},{"hex":"#ffd111","name":"藤黄"},{"hex":"#ddc871","name":"芒果黄"},{"hex":"#fffefa","name":"海参灰"},{"hex":"#867018","name":"碧螺春绿"},{"hex":"#887322","name":"苔绿"},{"hex":"#fcd337","name":"柠檬黄"},{"hex":"#8e804b","name":"草灰绿"},{"hex":"#fecc11","name":"向日葵黄"},{"hex":"#fccb16","name":"素馨黄"},{"hex":"#ffc90c","name":"乳鸭黄"},{"hex":"#b7ae8f","name":"月灰"},{"hex":"#f8d86a","name":"葵扇黄"},{"hex":"#fbcd31","name":"大豆黄"},{"hex":"#fcc307","name":"金盏黄"},{"hex":"#e9ddb6","name":"菊蕾白"},{"hex":"#fcc515","name":"黄连黄"},{"hex":"#f7e8aa","name":"杏仁黄"},{"hex":"#e8b004","name":"谷黄"},{"hex":"#f9c116","name":"木瓜黄"},{"hex":"#f9d770","name":"淡茧黄"},{"hex":"#fbc82f","name":"雅梨黄"},{"hex":"#f1f0ed","name":"银白"},{"hex":"#5b4913","name":"棕榈绿"},{"hex":"#f6c430","name":"鹦鹉冠黄"},{"hex":"#b78d12","name":"枯绿"},{"hex":"#f9bd10","name":"浅烙黄"},{"hex":"#f9d367","name":"淡密黄"},{"hex":"#d9a40e","name":"芥黄"},{"hex":"#ebb10d","name":"栀子黄"},{"hex":"#584717","name":"暗海水绿"},{"hex":"#f7de98","name":"篾黄"},{"hex":"#f9f1db","name":"蚌肉白"},{"hex":"#f4ce69","name":"炒米黄"},{"hex":"#feba07","name":"琥珀黄"},{"hex":"#8a6913","name":"灰绿"},{"hex":"#876818","name":"粽叶绿"},{"hex":"#b6a476","name":"尘灰"},{"hex":"#fcb70a","name":"鼬黄"},{"hex":"#f0d695","name":"象牙黄"},{"hex":"#87723e","name":"鲛青"},{"hex":"#f8e8c1","name":"豆汁黄"},{"hex":"#d6a01d","name":"土黄"},{"hex":"#f7da94","name":"香水玫瑰黄"},{"hex":"#eaad1a","name":"虎皮黄"},{"hex":"#fbb612","name":"鸡蛋黄"},{"hex":"#b5aa90","name":"银鼠灰"},{"hex":"#f7f4ed","name":"鱼肚白"},{"hex":"#f8bc31","name":"初熟杏黄"},{"hex":"#b78b26","name":"山鸡黄"},{"hex":"#e5d3aa","name":"莲子白"},{"hex":"#695e45","name":"蟹壳灰"},{"hex":"#e5b751","name":"沙石黄"},{"hex":"#f3bf4c","name":"甘草黄"},{"hex":"#685e48","name":"燕羽灰"},{"hex":"#fbb929","name":"鹅掌黄"},{"hex":"#f9d27d","name":"麦芽糖黄"},{"hex":"#e2c17c","name":"浅驼色"},{"hex":"#b4a992","name":"百灵鸟灰"},{"hex":"#f6dead","name":"酪黄"},{"hex":"#f2e6ce","name":"荔肉白"},{"hex":"#f8e0b0","name":"淡肉色"},{"hex":"#393733","name":"河豚灰"},{"hex":"#835e1d","name":"蜴蜊绿"},{"hex":"#f8f4ed","name":"汉白玉"},{"hex":"#fca104","name":"橙皮黄"},{"hex":"#815f25","name":"莱阳梨黄"},{"hex":"#fca106","name":"枇杷黄"},{"hex":"#ffa60f","name":"金叶黄"},{"hex":"#806332","name":"苍黄"},{"hex":"#fbf2e3","name":"粉白"},{"hex":"#fba414","name":"淡橘橙"},{"hex":"#e4dfd7","name":"珍珠灰"},{"hex":"#826b48","name":"龟背黄"},{"hex":"#dad4cb","name":"浅灰"},{"hex":"#bbb5ac","name":"铅灰"},{"hex":"#bbb5ac","name":"中灰"},{"hex":"#ff9900","name":"雄黄"},{"hex":"#fbb957","name":"蜜黄"},{"hex":"#dc9123","name":"风帆黄"},{"hex":"#c09351","name":"桂皮淡棕"},{"hex":"#f4a83a","name":"金莺黄"},{"hex":"#f7c173","name":"肉色"},{"hex":"#e7a23f","name":"凋叶棕"},{"hex":"#533c1b","name":"古铜绿"},{"hex":"#f9e8d0","name":"落英淡粉"},{"hex":"#de9e44","name":"软木黄"},{"hex":"#f9cb8b","name":"瓜瓤粉"},{"hex":"#f9a633","name":"榴萼黄"},{"hex":"#daa45a","name":"玳瑁黄"},{"hex":"#553b18","name":"焦茶绿"},{"hex":"#513c20","name":"蟹壳绿"},{"hex":"#986524","name":"山鸡褐"},{"hex":"#97846c","name":"猴毛灰"},{"hex":"#e3bd8d","name":"鹿角棕"},{"hex":"#4d4030","name":"淡松烟"},{"hex":"#fb8b05","name":"万寿菊黄"},{"hex":"#f8c387","name":"蛋壳黄"},{"hex":"#f28e16","name":"杏黄"},{"hex":"#503e2a","name":"橄榄灰"},{"hex":"#4a4035","name":"鹤灰"},{"hex":"#cfccc9","name":"玛瑙灰"},{"hex":"#c1b2a3","name":"淡银灰"},{"hex":"#867e76","name":"瓦灰"},{"hex":"#847c74","name":"夜灰"},{"hex":"#fc8c23","name":"北瓜黄"},{"hex":"#fbecde","name":"荷花白"},{"hex":"#4f4032","name":"松鼠灰"},{"hex":"#fbeee2","name":"淡米粉"},{"hex":"#81776e","name":"深灰"},{"hex":"#9a8878","name":"海鸥灰"},{"hex":"#5d3d21","name":"茶褐"},{"hex":"#66462a","name":"驼色"},{"hex":"#918072","name":"银灰"},{"hex":"#d99156","name":"鹿皮褐"},{"hex":"#c1651a","name":"槟榔综"},{"hex":"#d4c4b7","name":"晓灰"},{"hex":"#be7e4a","name":"淡赭"},{"hex":"#5c3719","name":"古铜褐"},{"hex":"#de7622","name":"麂棕"},{"hex":"#db8540","name":"醉瓜肉"},{"hex":"#80766e","name":"雁灰"},{"hex":"#f09c5a","name":"鲑鱼红"},{"hex":"#f97d1c","name":"橘橙"},{"hex":"#f26b1f","name":"金黄"},{"hex":"#f8b37f","name":"玫瑰粉"},{"hex":"#fa7e23","name":"美人焦橙"},{"hex":"#f9e9cd","name":"米色"},{"hex":"#b7a091","name":"蛛网灰"},{"hex":"#945833","name":"淡咖啡"},{"hex":"#f0945d","name":"海螺橙"},{"hex":"#964d22","name":"岩石棕"},{"hex":"#954416","name":"芒果棕"},{"hex":"#e16723","name":"陶瓷红"},{"hex":"#fc7930","name":"菠萝红"},{"hex":"#cf7543","name":"余烬红"},{"hex":"#f86b1d","name":"金莲花橙"},{"hex":"#cd6227","name":"火砖红"},{"hex":"#f6dcce","name":"初桃粉红"},{"hex":"#d85916","name":"铁棕"},{"hex":"#f7cfba","name":"介壳淡粉红"},{"hex":"#f27635","name":"蟹壳红"},{"hex":"#e46828","name":"金驼"},{"hex":"#fc6315","name":"燕颔红"},{"hex":"#b7511d","name":"淡可可棕"},{"hex":"#ea8958","name":"晨曦红"},{"hex":"#e8b49a","name":"玉粉红"},{"hex":"#fb9968","name":"野蔷薇红"},{"hex":"#edc3ae","name":"藕荷"},{"hex":"#363433","name":"长石灰"},{"hex":"#8b614d","name":"中红灰"},{"hex":"#aa6a4c","name":"火泥棕"},{"hex":"#a6522c","name":"绀红"},{"hex":"#fa5d19","name":"莓酱红"},{"hex":"#71361d","name":"丁香棕"},{"hex":"#b89485","name":"淡玫瑰灰"},{"hex":"#f68c60","name":"瓜瓤红"},{"hex":"#f6ad8f","name":"淡藏花红"},{"hex":"#732e12","name":"筍皮棕"},{"hex":"#f7cdbc","name":"润红"},{"hex":"#ef632b","name":"龙睛鱼红"},{"hex":"#8c4b31","name":"淡土黄"},{"hex":"#64483d","name":"珠母灰"},{"hex":"#f9723d","name":"芙蓉红"},{"hex":"#cf4813","name":"落霞红"},{"hex":"#ee8055","name":"法螺红"},{"hex":"#f8ebe6","name":"草珠红"},{"hex":"#753117","name":"咖啡"},{"hex":"#603d30","name":"中灰驼"},{"hex":"#883a1e","name":"椰壳棕"},{"hex":"#b14b28","name":"蟹蝥红"},{"hex":"#873d24","name":"淡豆沙"},{"hex":"#f6cec1","name":"淡桃红"},{"hex":"#5b423a","name":"淡铁灰"},{"hex":"#624941","name":"石板灰"},{"hex":"#673424","name":"淡栗棕"},{"hex":"#f43e06","name":"银朱"},{"hex":"#ef6f48","name":"草莓红"},{"hex":"#f4c7ba","name":"洋水仙红"},{"hex":"#ed5126","name":"朱红"},{"hex":"#f34718","name":"榴花红"},{"hex":"#f2481b","name":"柿红"},{"hex":"#652b1c","name":"可可棕"},{"hex":"#eea08c","name":"淡罂粟红"},{"hex":"#f04b22","name":"大红"},{"hex":"#692a1b","name":"柞叶棕"},{"hex":"#f1441d","name":"蜻蜓红"},{"hex":"#773d31","name":"橡树棕"},{"hex":"#eeaa9c","name":"颊红"},{"hex":"#f0ada0","name":"桃红"},{"hex":"#863020","name":"火岩棕"},{"hex":"#f2e7e5","name":"淡藤萝紫"},{"hex":"#862617","name":"赭石"},{"hex":"#f5391c","name":"铁水红"},{"hex":"#f03f24","name":"胭脂红"},{"hex":"#f33b1f","name":"极光红"},{"hex":"#f23e23","name":"红汞红"},{"hex":"#f13c22","name":"萝卜红"},{"hex":"#f05a46","name":"曲红"},{"hex":"#f17666","name":"谷鞘红"},{"hex":"#f15642","name":"苹果红"},{"hex":"#f25a47","name":"桂红"},{"hex":"#f2b9b2","name":"粉红"},{"hex":"#592620","name":"暗驼棕"},{"hex":"#de2a18","name":"夕阳红"},{"hex":"#ed3321","name":"樱桃红"},{"hex":"#f04a3a","name":"珊瑚红"},{"hex":"#482522","name":"火山棕"},{"hex":"#5c1e19","name":"栗棕"},{"hex":"#d42517","name":"鹤顶红"},{"hex":"#f19790","name":"舌红"},{"hex":"#ab372f","name":"鹅血石红"},{"hex":"#5a1f1b","name":"酱棕"},{"hex":"#ed3b2f","name":"鱼鳃红"},{"hex":"#bdaead","name":"芦穗灰"},{"hex":"#eb261a","name":"丽春红"},{"hex":"#ac1f18","name":"覆盆子红"},{"hex":"#483332","name":"海报灰"},{"hex":"#481e1c","name":"豆沙"},{"hex":"#f1908c","name":"榴子红"},{"hex":"#ec2b24","name":"秋海棠红"},{"hex":"#efafad","name":"无花果红"},{"hex":"#f2cac9","name":"淡绯"},{"hex":"#4b2e2b","name":"玫瑰灰"},{"hex":"#ed4845","name":"淡菽红"},{"hex":"#ed3333","name":"枸枢红"},{"hex":"#5d3131","name":"貂紫"}] \ No newline at end of file +[ + { "hex": "#5c2223", "name": "暗玉紫" }, + { "hex": "#eea2a4", "name": "牡丹粉红" }, + { "hex": "#5a191b", "name": "栗紫" }, + { "hex": "#f07c82", "name": "香叶红" }, + { "hex": "#5a1216", "name": "葡萄酱紫" }, + { "hex": "#ed5a65", "name": "艳红" }, + { "hex": "#c04851", "name": "玉红" }, + { "hex": "#ee3f4d", "name": "茶花红" }, + { "hex": "#c02c38", "name": "高粱红" }, + { "hex": "#a7535a", "name": "满江红" }, + { "hex": "#e3b4b8", "name": "鼠鼻红" }, + { "hex": "#f0a1a8", "name": "合欢红" }, + { "hex": "#f1939c", "name": "春梅红" }, + { "hex": "#a61b29", "name": "苋菜红" }, + { "hex": "#894e54", "name": "烟红" }, + { "hex": "#c45a65", "name": "莓红" }, + { "hex": "#d11a2d", "name": "鹅冠红" }, + { "hex": "#c21f30", "name": "枫叶红" }, + { "hex": "#de1c31", "name": "唐菖蒲红" }, + { "hex": "#7c1823", "name": "枣红" }, + { "hex": "#541e24", "name": "猪肝紫" }, + { "hex": "#4c1f24", "name": "葡萄紫" }, + { "hex": "#82202b", "name": "暗紫苑红" }, + { "hex": "#82111f", "name": "殷红" }, + { "hex": "#ef475d", "name": "草茉莉红" }, + { "hex": "#4d1018", "name": "酱紫" }, + { "hex": "#ed556a", "name": "山茶红" }, + { "hex": "#7a7374", "name": "锌灰" }, + { "hex": "#f03752", "name": "海棠红" }, + { "hex": "#e6d2d5", "name": "蓟粉红" }, + { "hex": "#f0c9cf", "name": "石蕊红" }, + { "hex": "#ee2746", "name": "淡曙红" }, + { "hex": "#2b1216", "name": "李紫" }, + { "hex": "#ee4863", "name": "石竹红" }, + { "hex": "#e77c8e", "name": "淡茜红" }, + { "hex": "#500a16", "name": "金鱼紫" }, + { "hex": "#c27c88", "name": "山黎豆红" }, + { "hex": "#73575c", "name": "鼠背灰" }, + { "hex": "#ee4866", "name": "淡蕊香红" }, + { "hex": "#621624", "name": "甘蔗紫" }, + { "hex": "#ce5777", "name": "月季红" }, + { "hex": "#cc163a", "name": "尖晶玉红" }, + { "hex": "#f1c4cd", "name": "水红" }, + { "hex": "#eeb8c3", "name": "姜红" }, + { "hex": "#856d72", "name": "芦灰" }, + { "hex": "#2d0c13", "name": "茄皮紫" }, + { "hex": "#36282b", "name": "苍蝇灰" }, + { "hex": "#bf3553", "name": "锦葵红" }, + { "hex": "#ec9bad", "name": "粉团花红" }, + { "hex": "#63071c", "name": "石竹紫" }, + { "hex": "#30161c", "name": "卵石紫" }, + { "hex": "#eea6b7", "name": "晶红" }, + { "hex": "#e9ccd3", "name": "芝兰紫" }, + { "hex": "#eba0b3", "name": "芍药耕红" }, + { "hex": "#4f383e", "name": "暮云灰" }, + { "hex": "#ed9db2", "name": "豇豆红" }, + { "hex": "#ec8aa4", "name": "报春红" }, + { "hex": "#ec7696", "name": "淡绛红" }, + { "hex": "#ea7293", "name": "凤仙花红" }, + { "hex": "#ef82a0", "name": "霞光红" }, + { "hex": "#ec2c64", "name": "喜蛋红" }, + { "hex": "#eb507e", "name": "夹竹桃红" }, + { "hex": "#eb3c70", "name": "松叶牡丹红" }, + { "hex": "#ea517f", "name": "莲瓣红" }, + { "hex": "#de7897", "name": "白芨红" }, + { "hex": "#b598a1", "name": "隐红灰" }, + { "hex": "#ed2f6a", "name": "榲桲红" }, + { "hex": "#c5708b", "name": "酢酱草红" }, + { "hex": "#33141e", "name": "火鹅紫" }, + { "hex": "#621d34", "name": "鹞冠紫" }, + { "hex": "#ef3473", "name": "品红" }, + { "hex": "#382129", "name": "磨石紫" }, + { "hex": "#310f1b", "name": "墨紫" }, + { "hex": "#381924", "name": "檀紫" }, + { "hex": "#e16c96", "name": "初荷红" }, + { "hex": "#951c48", "name": "菜头紫" }, + { "hex": "#62102e", "name": "葡萄酒红" }, + { "hex": "#e0c8d1", "name": "淡青紫" }, + { "hex": "#d13c74", "name": "菠根红" }, + { "hex": "#4b1e2f", "name": "海象紫" }, + { "hex": "#ec4e8a", "name": "兔眼红" }, + { "hex": "#de3f7c", "name": "嫩菱红" }, + { "hex": "#a8456b", "name": "洋葱紫" }, + { "hex": "#ce5e8a", "name": "吊钟花红" }, + { "hex": "#461629", "name": "绀紫" }, + { "hex": "#ee2c79", "name": "紫荆红" }, + { "hex": "#ef498b", "name": "扁豆花红" }, + { "hex": "#ede3e7", "name": "马鞭草紫" }, + { "hex": "#ec2d7a", "name": "藏花红" }, + { "hex": "#482936", "name": "斑鸠灰" }, + { "hex": "#440e25", "name": "古铜紫" }, + { "hex": "#d2568c", "name": "丹紫红" }, + { "hex": "#e9d7df", "name": "丁香淡紫" }, + { "hex": "#d2357d", "name": "玫瑰红" }, + { "hex": "#36292f", "name": "古鼎灰" }, + { "hex": "#d276a3", "name": "菱锰红" }, + { "hex": "#c06f98", "name": "樱草紫" }, + { "hex": "#cc5595", "name": "龙须红" }, + { "hex": "#c35691", "name": "电气石红" }, + { "hex": "#ba2f7b", "name": "玫瑰紫" }, + { "hex": "#9b1e64", "name": "苋菜紫" }, + { "hex": "#5d3f51", "name": "紫灰" }, + { "hex": "#4e2a40", "name": "龙睛鱼紫" }, + { "hex": "#bc84a8", "name": "青蛤壳紫" }, + { "hex": "#c08eaf", "name": "萝兰紫" }, + { "hex": "#411c35", "name": "荸荠紫" }, + { "hex": "#ad6598", "name": "豆蔻紫" }, + { "hex": "#a35c8f", "name": "扁豆紫" }, + { "hex": "#681752", "name": "牵牛紫" }, + { "hex": "#894276", "name": "芓紫" }, + { "hex": "#7e2065", "name": "葛巾紫" }, + { "hex": "#8b2671", "name": "青莲" }, + { "hex": "#983680", "name": "芥花紫" }, + { "hex": "#c8adc4", "name": "凤信紫" }, + { "hex": "#1c0d1a", "name": "深牵牛紫" }, + { "hex": "#7e1671", "name": "魏紫" }, + { "hex": "#1e131d", "name": "乌梅紫" }, + { "hex": "#813c85", "name": "桔梗紫" }, + { "hex": "#d1c2d3", "name": "淡牵牛紫" }, + { "hex": "#3e3841", "name": "剑锋紫" }, + { "hex": "#815c94", "name": "蕈紫" }, + { "hex": "#806d9e", "name": "槿紫" }, + { "hex": "#e2e1e4", "name": "芡食白" }, + { "hex": "#322f3b", "name": "龙葵紫" }, + { "hex": "#8076a3", "name": "藤萝紫" }, + { "hex": "#35333c", "name": "沙鱼灰" }, + { "hex": "#22202e", "name": "暗龙胆紫" }, + { "hex": "#131124", "name": "暗蓝紫" }, + { "hex": "#302f4b", "name": "野葡萄紫" }, + { "hex": "#525288", "name": "野菊紫" }, + { "hex": "#2f2f35", "name": "水牛灰" }, + { "hex": "#ccccd6", "name": "远山紫" }, + { "hex": "#74759b", "name": "螺甸紫" }, + { "hex": "#1f2040", "name": "晶石紫" }, + { "hex": "#2e317c", "name": "满天星紫" }, + { "hex": "#a7a8bd", "name": "淡蓝紫" }, + { "hex": "#61649f", "name": "山梗紫" }, + { "hex": "#2d2e36", "name": "牛角灰" }, + { "hex": "#5e616d", "name": "鱼尾灰" }, + { "hex": "#47484c", "name": "瓦罐灰" }, + { "hex": "#0f1423", "name": "钢蓝" }, + { "hex": "#131824", "name": "燕颔蓝" }, + { "hex": "#475164", "name": "鲸鱼灰" }, + { "hex": "#2b333e", "name": "青灰" }, + { "hex": "#1c2938", "name": "鸽蓝" }, + { "hex": "#101f30", "name": "暗蓝" }, + { "hex": "#142334", "name": "钢青" }, + { "hex": "#15559a", "name": "海涛蓝" }, + { "hex": "#0f59a4", "name": "飞燕草蓝" }, + { "hex": "#1661ab", "name": "靛青" }, + { "hex": "#3170a7", "name": "安安蓝" }, + { "hex": "#346c9c", "name": "海军蓝" }, + { "hex": "#2775b6", "name": "景泰蓝" }, + { "hex": "#2b73af", "name": "品蓝" }, + { "hex": "#2474b5", "name": "尼罗蓝" }, + { "hex": "#4e7ca1", "name": "蝶翅蓝" }, + { "hex": "#2376b7", "name": "花青" }, + { "hex": "#144a74", "name": "鷃蓝" }, + { "hex": "#93b5cf", "name": "星蓝" }, + { "hex": "#2177b8", "name": "虹蓝" }, + { "hex": "#126bae", "name": "柏林蓝" }, + { "hex": "#1772b4", "name": "群青" }, + { "hex": "#baccd9", "name": "云水蓝" }, + { "hex": "#619ac3", "name": "羽扇豆蓝" }, + { "hex": "#495c69", "name": "战舰灰" }, + { "hex": "#8fb2c9", "name": "晴山蓝" }, + { "hex": "#5698c3", "name": "睛蓝" }, + { "hex": "#11659a", "name": "搪磁蓝" }, + { "hex": "#2983bb", "name": "潮蓝" }, + { "hex": "#1677b3", "name": "天蓝" }, + { "hex": "#c4cbcf", "name": "大理石灰" }, + { "hex": "#1177b0", "name": "牵牛花蓝" }, + { "hex": "#2486b9", "name": "宝石蓝" }, + { "hex": "#5e7987", "name": "淡蓝灰" }, + { "hex": "#74787a", "name": "嫩灰" }, + { "hex": "#cdd1d3", "name": "银鱼白" }, + { "hex": "#1781b5", "name": "釉蓝" }, + { "hex": "#66a9c9", "name": "涧石蓝" }, + { "hex": "#d0dfe6", "name": "远天蓝" }, + { "hex": "#2f90b9", "name": "云山蓝" }, + { "hex": "#8abcd1", "name": "秋波蓝" }, + { "hex": "#c3d7df", "name": "井天蓝" }, + { "hex": "#158bb8", "name": "鸢尾蓝" }, + { "hex": "#d8e3e7", "name": "云峰白" }, + { "hex": "#b2bbbe", "name": "星灰" }, + { "hex": "#1a94bc", "name": "钴蓝" }, + { "hex": "#5cb3cc", "name": "碧青" }, + { "hex": "#134857", "name": "苍蓝" }, + { "hex": "#132c33", "name": "深灰蓝" }, + { "hex": "#21373d", "name": "灰蓝" }, + { "hex": "#b0d5df", "name": "湖水蓝" }, + { "hex": "#22a2c3", "name": "海青" }, + { "hex": "#474b4c", "name": "黄昏灰" }, + { "hex": "#63bbd0", "name": "霁青" }, + { "hex": "#126e82", "name": "玉鈫蓝" }, + { "hex": "#0f95b0", "name": "胆矾蓝" }, + { "hex": "#1491a8", "name": "樫鸟蓝" }, + { "hex": "#c7d2d4", "name": "鸥蓝" }, + { "hex": "#1e9eb3", "name": "翠蓝" }, + { "hex": "#3b818c", "name": "蜻蜓蓝" }, + { "hex": "#0eb0c9", "name": "孔雀蓝" }, + { "hex": "#29b7cb", "name": "蔚蓝" }, + { "hex": "#51c4d3", "name": "瀑布蓝" }, + { "hex": "#7cabb1", "name": "闪蓝" }, + { "hex": "#10aec2", "name": "甸子蓝" }, + { "hex": "#648e93", "name": "晚波蓝" }, + { "hex": "#93d5dc", "name": "清水蓝" }, + { "hex": "#617172", "name": "夏云灰" }, + { "hex": "#c6e6e8", "name": "海天蓝" }, + { "hex": "#869d9d", "name": "虾壳青" }, + { "hex": "#57c3c2", "name": "石绿" }, + { "hex": "#c4d7d6", "name": "穹灰" }, + { "hex": "#12aa9c", "name": "美蝶绿" }, + { "hex": "#737c7b", "name": "垩灰" }, + { "hex": "#12a182", "name": "蓝绿" }, + { "hex": "#1ba784", "name": "竹绿" }, + { "hex": "#428675", "name": "亚丁绿" }, + { "hex": "#c0c4c3", "name": "月影白" }, + { "hex": "#248067", "name": "海王绿" }, + { "hex": "#1a3b32", "name": "深海绿" }, + { "hex": "#314a43", "name": "绿灰" }, + { "hex": "#2c9678", "name": "青矾绿" }, + { "hex": "#223e36", "name": "苍绿" }, + { "hex": "#497568", "name": "飞泉绿" }, + { "hex": "#141e1b", "name": "莽丛绿" }, + { "hex": "#69a794", "name": "梧枝绿" }, + { "hex": "#2bae85", "name": "铜绿" }, + { "hex": "#9abeaf", "name": "草原远绿" }, + { "hex": "#45b787", "name": "蛙绿" }, + { "hex": "#92b3a5", "name": "浪花绿" }, + { "hex": "#1f2623", "name": "苷蓝绿" }, + { "hex": "#83cbac", "name": "粉绿" }, + { "hex": "#70887d", "name": "淡绿灰" }, + { "hex": "#55bb8a", "name": "麦苗绿" }, + { "hex": "#20a162", "name": "翠绿" }, + { "hex": "#40a070", "name": "葱绿" }, + { "hex": "#1a6840", "name": "荷叶绿" }, + { "hex": "#61ac85", "name": "淡绿" }, + { "hex": "#68b88e", "name": "田园绿" }, + { "hex": "#a4cab6", "name": "玉簪绿" }, + { "hex": "#3c9566", "name": "蟾绿" }, + { "hex": "#5dbe8a", "name": "蔻梢绿" }, + { "hex": "#207f4c", "name": "薄荷绿" }, + { "hex": "#eef7f2", "name": "月白" }, + { "hex": "#579572", "name": "蛋白石绿" }, + { "hex": "#b9dec9", "name": "竹篁绿" }, + { "hex": "#229453", "name": "孔雀绿" }, + { "hex": "#20894d", "name": "宫殿绿" }, + { "hex": "#15231b", "name": "云杉绿" }, + { "hex": "#66c18c", "name": "毛绿" }, + { "hex": "#a4aca7", "name": "冰山蓝" }, + { "hex": "#8a988e", "name": "明灰" }, + { "hex": "#9eccab", "name": "明绿" }, + { "hex": "#83a78d", "name": "松霜绿" }, + { "hex": "#485b4d", "name": "白屈菜绿" }, + { "hex": "#5d655f", "name": "狼烟灰" }, + { "hex": "#6e8b74", "name": "瓦松绿" }, + { "hex": "#2b312c", "name": "槲寄生绿" }, + { "hex": "#c6dfc8", "name": "淡翠绿" }, + { "hex": "#41b349", "name": "玉髓绿" }, + { "hex": "#43b244", "name": "鲜绿" }, + { "hex": "#253d24", "name": "油绿" }, + { "hex": "#41ae3c", "name": "宝石绿" }, + { "hex": "#add5a2", "name": "嘉陵水绿" }, + { "hex": "#5e665b", "name": "田螺绿" }, + { "hex": "#8cc269", "name": "水绿" }, + { "hex": "#5bae23", "name": "鹦鹉绿" }, + { "hex": "#dfecd5", "name": "艾背绿" }, + { "hex": "#cad3c3", "name": "艾绿" }, + { "hex": "#9fa39a", "name": "镍灰" }, + { "hex": "#b2cf87", "name": "橄榄石绿" }, + { "hex": "#96c24e", "name": "芽绿" }, + { "hex": "#f0f5e5", "name": "嫩菊绿" }, + { "hex": "#b7d07a", "name": "芦苇绿" }, + { "hex": "#d0deaa", "name": "姚黄" }, + { "hex": "#373834", "name": "蒽油绿" }, + { "hex": "#bacf65", "name": "苹果绿" }, + { "hex": "#e2e7bf", "name": "海沬绿" }, + { "hex": "#bec936", "name": "橄榄黄绿" }, + { "hex": "#d2d97a", "name": "槐花黄绿" }, + { "hex": "#e2d849", "name": "蝶黄" }, + { "hex": "#fffef8", "name": "象牙白" }, + { "hex": "#5e5314", "name": "橄榄绿" }, + { "hex": "#fffef9", "name": "雪白" }, + { "hex": "#ad9e5f", "name": "淡灰绿" }, + { "hex": "#fed71a", "name": "佛手黄" }, + { "hex": "#f9f4dc", "name": "乳白" }, + { "hex": "#e4bf11", "name": "香蕉黄" }, + { "hex": "#d2b116", "name": "新禾绿" }, + { "hex": "#fbda41", "name": "油菜花黄" }, + { "hex": "#eed045", "name": "秋葵黄" }, + { "hex": "#f1ca17", "name": "柚黄" }, + { "hex": "#d2b42c", "name": "草黄" }, + { "hex": "#f2ce2b", "name": "硫华黄" }, + { "hex": "#e2c027", "name": "姜黄" }, + { "hex": "#645822", "name": "潭水绿" }, + { "hex": "#fcd217", "name": "金瓜黄" }, + { "hex": "#f8df70", "name": "麦秆黄" }, + { "hex": "#dfc243", "name": "蒿黄" }, + { "hex": "#f8df72", "name": "茉莉黄" }, + { "hex": "#ffd111", "name": "藤黄" }, + { "hex": "#ddc871", "name": "芒果黄" }, + { "hex": "#fffefa", "name": "海参灰" }, + { "hex": "#867018", "name": "碧螺春绿" }, + { "hex": "#887322", "name": "苔绿" }, + { "hex": "#fcd337", "name": "柠檬黄" }, + { "hex": "#8e804b", "name": "草灰绿" }, + { "hex": "#fecc11", "name": "向日葵黄" }, + { "hex": "#fccb16", "name": "素馨黄" }, + { "hex": "#ffc90c", "name": "乳鸭黄" }, + { "hex": "#b7ae8f", "name": "月灰" }, + { "hex": "#f8d86a", "name": "葵扇黄" }, + { "hex": "#fbcd31", "name": "大豆黄" }, + { "hex": "#fcc307", "name": "金盏黄" }, + { "hex": "#e9ddb6", "name": "菊蕾白" }, + { "hex": "#fcc515", "name": "黄连黄" }, + { "hex": "#f7e8aa", "name": "杏仁黄" }, + { "hex": "#e8b004", "name": "谷黄" }, + { "hex": "#f9c116", "name": "木瓜黄" }, + { "hex": "#f9d770", "name": "淡茧黄" }, + { "hex": "#fbc82f", "name": "雅梨黄" }, + { "hex": "#f1f0ed", "name": "银白" }, + { "hex": "#5b4913", "name": "棕榈绿" }, + { "hex": "#f6c430", "name": "鹦鹉冠黄" }, + { "hex": "#b78d12", "name": "枯绿" }, + { "hex": "#f9bd10", "name": "浅烙黄" }, + { "hex": "#f9d367", "name": "淡密黄" }, + { "hex": "#d9a40e", "name": "芥黄" }, + { "hex": "#ebb10d", "name": "栀子黄" }, + { "hex": "#584717", "name": "暗海水绿" }, + { "hex": "#f7de98", "name": "篾黄" }, + { "hex": "#f9f1db", "name": "蚌肉白" }, + { "hex": "#f4ce69", "name": "炒米黄" }, + { "hex": "#feba07", "name": "琥珀黄" }, + { "hex": "#8a6913", "name": "灰绿" }, + { "hex": "#876818", "name": "粽叶绿" }, + { "hex": "#b6a476", "name": "尘灰" }, + { "hex": "#fcb70a", "name": "鼬黄" }, + { "hex": "#f0d695", "name": "象牙黄" }, + { "hex": "#87723e", "name": "鲛青" }, + { "hex": "#f8e8c1", "name": "豆汁黄" }, + { "hex": "#d6a01d", "name": "土黄" }, + { "hex": "#f7da94", "name": "香水玫瑰黄" }, + { "hex": "#eaad1a", "name": "虎皮黄" }, + { "hex": "#fbb612", "name": "鸡蛋黄" }, + { "hex": "#b5aa90", "name": "银鼠灰" }, + { "hex": "#f7f4ed", "name": "鱼肚白" }, + { "hex": "#f8bc31", "name": "初熟杏黄" }, + { "hex": "#b78b26", "name": "山鸡黄" }, + { "hex": "#e5d3aa", "name": "莲子白" }, + { "hex": "#695e45", "name": "蟹壳灰" }, + { "hex": "#e5b751", "name": "沙石黄" }, + { "hex": "#f3bf4c", "name": "甘草黄" }, + { "hex": "#685e48", "name": "燕羽灰" }, + { "hex": "#fbb929", "name": "鹅掌黄" }, + { "hex": "#f9d27d", "name": "麦芽糖黄" }, + { "hex": "#e2c17c", "name": "浅驼色" }, + { "hex": "#b4a992", "name": "百灵鸟灰" }, + { "hex": "#f6dead", "name": "酪黄" }, + { "hex": "#f2e6ce", "name": "荔肉白" }, + { "hex": "#f8e0b0", "name": "淡肉色" }, + { "hex": "#393733", "name": "河豚灰" }, + { "hex": "#835e1d", "name": "蜴蜊绿" }, + { "hex": "#f8f4ed", "name": "汉白玉" }, + { "hex": "#fca104", "name": "橙皮黄" }, + { "hex": "#815f25", "name": "莱阳梨黄" }, + { "hex": "#fca106", "name": "枇杷黄" }, + { "hex": "#ffa60f", "name": "金叶黄" }, + { "hex": "#806332", "name": "苍黄" }, + { "hex": "#fbf2e3", "name": "粉白" }, + { "hex": "#fba414", "name": "淡橘橙" }, + { "hex": "#e4dfd7", "name": "珍珠灰" }, + { "hex": "#826b48", "name": "龟背黄" }, + { "hex": "#dad4cb", "name": "浅灰" }, + { "hex": "#bbb5ac", "name": "铅灰" }, + { "hex": "#bbb5ac", "name": "中灰" }, + { "hex": "#ff9900", "name": "雄黄" }, + { "hex": "#fbb957", "name": "蜜黄" }, + { "hex": "#dc9123", "name": "风帆黄" }, + { "hex": "#c09351", "name": "桂皮淡棕" }, + { "hex": "#f4a83a", "name": "金莺黄" }, + { "hex": "#f7c173", "name": "肉色" }, + { "hex": "#e7a23f", "name": "凋叶棕" }, + { "hex": "#533c1b", "name": "古铜绿" }, + { "hex": "#f9e8d0", "name": "落英淡粉" }, + { "hex": "#de9e44", "name": "软木黄" }, + { "hex": "#f9cb8b", "name": "瓜瓤粉" }, + { "hex": "#f9a633", "name": "榴萼黄" }, + { "hex": "#daa45a", "name": "玳瑁黄" }, + { "hex": "#553b18", "name": "焦茶绿" }, + { "hex": "#513c20", "name": "蟹壳绿" }, + { "hex": "#986524", "name": "山鸡褐" }, + { "hex": "#97846c", "name": "猴毛灰" }, + { "hex": "#e3bd8d", "name": "鹿角棕" }, + { "hex": "#4d4030", "name": "淡松烟" }, + { "hex": "#fb8b05", "name": "万寿菊黄" }, + { "hex": "#f8c387", "name": "蛋壳黄" }, + { "hex": "#f28e16", "name": "杏黄" }, + { "hex": "#503e2a", "name": "橄榄灰" }, + { "hex": "#4a4035", "name": "鹤灰" }, + { "hex": "#cfccc9", "name": "玛瑙灰" }, + { "hex": "#c1b2a3", "name": "淡银灰" }, + { "hex": "#867e76", "name": "瓦灰" }, + { "hex": "#847c74", "name": "夜灰" }, + { "hex": "#fc8c23", "name": "北瓜黄" }, + { "hex": "#fbecde", "name": "荷花白" }, + { "hex": "#4f4032", "name": "松鼠灰" }, + { "hex": "#fbeee2", "name": "淡米粉" }, + { "hex": "#81776e", "name": "深灰" }, + { "hex": "#9a8878", "name": "海鸥灰" }, + { "hex": "#5d3d21", "name": "茶褐" }, + { "hex": "#66462a", "name": "驼色" }, + { "hex": "#918072", "name": "银灰" }, + { "hex": "#d99156", "name": "鹿皮褐" }, + { "hex": "#c1651a", "name": "槟榔综" }, + { "hex": "#d4c4b7", "name": "晓灰" }, + { "hex": "#be7e4a", "name": "淡赭" }, + { "hex": "#5c3719", "name": "古铜褐" }, + { "hex": "#de7622", "name": "麂棕" }, + { "hex": "#db8540", "name": "醉瓜肉" }, + { "hex": "#80766e", "name": "雁灰" }, + { "hex": "#f09c5a", "name": "鲑鱼红" }, + { "hex": "#f97d1c", "name": "橘橙" }, + { "hex": "#f26b1f", "name": "金黄" }, + { "hex": "#f8b37f", "name": "玫瑰粉" }, + { "hex": "#fa7e23", "name": "美人焦橙" }, + { "hex": "#f9e9cd", "name": "米色" }, + { "hex": "#b7a091", "name": "蛛网灰" }, + { "hex": "#945833", "name": "淡咖啡" }, + { "hex": "#f0945d", "name": "海螺橙" }, + { "hex": "#964d22", "name": "岩石棕" }, + { "hex": "#954416", "name": "芒果棕" }, + { "hex": "#e16723", "name": "陶瓷红" }, + { "hex": "#fc7930", "name": "菠萝红" }, + { "hex": "#cf7543", "name": "余烬红" }, + { "hex": "#f86b1d", "name": "金莲花橙" }, + { "hex": "#cd6227", "name": "火砖红" }, + { "hex": "#f6dcce", "name": "初桃粉红" }, + { "hex": "#d85916", "name": "铁棕" }, + { "hex": "#f7cfba", "name": "介壳淡粉红" }, + { "hex": "#f27635", "name": "蟹壳红" }, + { "hex": "#e46828", "name": "金驼" }, + { "hex": "#fc6315", "name": "燕颔红" }, + { "hex": "#b7511d", "name": "淡可可棕" }, + { "hex": "#ea8958", "name": "晨曦红" }, + { "hex": "#e8b49a", "name": "玉粉红" }, + { "hex": "#fb9968", "name": "野蔷薇红" }, + { "hex": "#edc3ae", "name": "藕荷" }, + { "hex": "#363433", "name": "长石灰" }, + { "hex": "#8b614d", "name": "中红灰" }, + { "hex": "#aa6a4c", "name": "火泥棕" }, + { "hex": "#a6522c", "name": "绀红" }, + { "hex": "#fa5d19", "name": "莓酱红" }, + { "hex": "#71361d", "name": "丁香棕" }, + { "hex": "#b89485", "name": "淡玫瑰灰" }, + { "hex": "#f68c60", "name": "瓜瓤红" }, + { "hex": "#f6ad8f", "name": "淡藏花红" }, + { "hex": "#732e12", "name": "筍皮棕" }, + { "hex": "#f7cdbc", "name": "润红" }, + { "hex": "#ef632b", "name": "龙睛鱼红" }, + { "hex": "#8c4b31", "name": "淡土黄" }, + { "hex": "#64483d", "name": "珠母灰" }, + { "hex": "#f9723d", "name": "芙蓉红" }, + { "hex": "#cf4813", "name": "落霞红" }, + { "hex": "#ee8055", "name": "法螺红" }, + { "hex": "#f8ebe6", "name": "草珠红" }, + { "hex": "#753117", "name": "咖啡" }, + { "hex": "#603d30", "name": "中灰驼" }, + { "hex": "#883a1e", "name": "椰壳棕" }, + { "hex": "#b14b28", "name": "蟹蝥红" }, + { "hex": "#873d24", "name": "淡豆沙" }, + { "hex": "#f6cec1", "name": "淡桃红" }, + { "hex": "#5b423a", "name": "淡铁灰" }, + { "hex": "#624941", "name": "石板灰" }, + { "hex": "#673424", "name": "淡栗棕" }, + { "hex": "#f43e06", "name": "银朱" }, + { "hex": "#ef6f48", "name": "草莓红" }, + { "hex": "#f4c7ba", "name": "洋水仙红" }, + { "hex": "#ed5126", "name": "朱红" }, + { "hex": "#f34718", "name": "榴花红" }, + { "hex": "#f2481b", "name": "柿红" }, + { "hex": "#652b1c", "name": "可可棕" }, + { "hex": "#eea08c", "name": "淡罂粟红" }, + { "hex": "#f04b22", "name": "大红" }, + { "hex": "#692a1b", "name": "柞叶棕" }, + { "hex": "#f1441d", "name": "蜻蜓红" }, + { "hex": "#773d31", "name": "橡树棕" }, + { "hex": "#eeaa9c", "name": "颊红" }, + { "hex": "#f0ada0", "name": "桃红" }, + { "hex": "#863020", "name": "火岩棕" }, + { "hex": "#f2e7e5", "name": "淡藤萝紫" }, + { "hex": "#862617", "name": "赭石" }, + { "hex": "#f5391c", "name": "铁水红" }, + { "hex": "#f03f24", "name": "胭脂红" }, + { "hex": "#f33b1f", "name": "极光红" }, + { "hex": "#f23e23", "name": "红汞红" }, + { "hex": "#f13c22", "name": "萝卜红" }, + { "hex": "#f05a46", "name": "曲红" }, + { "hex": "#f17666", "name": "谷鞘红" }, + { "hex": "#f15642", "name": "苹果红" }, + { "hex": "#f25a47", "name": "桂红" }, + { "hex": "#f2b9b2", "name": "粉红" }, + { "hex": "#592620", "name": "暗驼棕" }, + { "hex": "#de2a18", "name": "夕阳红" }, + { "hex": "#ed3321", "name": "樱桃红" }, + { "hex": "#f04a3a", "name": "珊瑚红" }, + { "hex": "#482522", "name": "火山棕" }, + { "hex": "#5c1e19", "name": "栗棕" }, + { "hex": "#d42517", "name": "鹤顶红" }, + { "hex": "#f19790", "name": "舌红" }, + { "hex": "#ab372f", "name": "鹅血石红" }, + { "hex": "#5a1f1b", "name": "酱棕" }, + { "hex": "#ed3b2f", "name": "鱼鳃红" }, + { "hex": "#bdaead", "name": "芦穗灰" }, + { "hex": "#eb261a", "name": "丽春红" }, + { "hex": "#ac1f18", "name": "覆盆子红" }, + { "hex": "#483332", "name": "海报灰" }, + { "hex": "#481e1c", "name": "豆沙" }, + { "hex": "#f1908c", "name": "榴子红" }, + { "hex": "#ec2b24", "name": "秋海棠红" }, + { "hex": "#efafad", "name": "无花果红" }, + { "hex": "#f2cac9", "name": "淡绯" }, + { "hex": "#4b2e2b", "name": "玫瑰灰" }, + { "hex": "#ed4845", "name": "淡菽红" }, + { "hex": "#ed3333", "name": "枸枢红" }, + { "hex": "#5d3131", "name": "貂紫" } +] diff --git a/src/mock/random/date.js b/src/mock/random/date.js index ea9e4c33..91a7903d 100644 --- a/src/mock/random/date.js +++ b/src/mock/random/date.js @@ -1,21 +1,22 @@ +/* eslint-disable no-fallthrough*/ /* ## Date */ -import { integer } from "./basic/number.js"; +import { integer } from './basic/number.js'; // 日期占位符集合。 -import _patternLetters from "./date/_patternLetters.js"; +import _patternLetters from './date/_patternLetters.js'; -const _rformat = new RegExp(`(${Object.keys(_patternLetters).join("|")})`, "g"); +const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); // 返回一个随机的日期字符串。 -function date(format = "yyyy-MM-dd") { +function date(format = 'yyyy-MM-dd') { return _formatDate(_randomDate(), format); } -function datetime(format = "yyyy-MM-dd HH:mm:ss") { +function datetime(format = 'yyyy-MM-dd HH:mm:ss') { return date(format); } -function time(format = "HH:mm:ss") { +function time(format = 'HH:mm:ss') { return date(format); } function now(unit, format) { @@ -24,33 +25,33 @@ function now(unit, format) { // now(format) if (!/year|month|day|hour|minute|second|week/.test(unit)) { format = unit; - unit = ""; + unit = ''; } } - unit = (unit || "").toLowerCase(); - format = format || "yyyy-MM-dd HH:mm:ss"; + unit = (unit || '').toLowerCase(); + format = format || 'yyyy-MM-dd HH:mm:ss'; - var date = new Date(); + const date = new Date(); /* jshint -W086 */ // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ switch (unit) { - case "year": + case 'year': date.setMonth(0); - case "month": + case 'month': date.setDate(1); - case "week": - case "day": + case 'week': + case 'day': date.setHours(0); - case "hour": + case 'hour': date.setMinutes(0); - case "minute": + case 'minute': date.setSeconds(0); - case "second": + case 'second': date.setMilliseconds(0); } switch (unit) { - case "week": + case 'week': date.setDate(date.getDate() - date.getDay()); } @@ -60,8 +61,12 @@ function now(unit, format) { function _formatDate(date, format) { return format.replace(_rformat, function creatNewSubString($0, flag) { // 这个函数用于捕获格式化日期的关键字,然后进行替换 - let targetPattern = _patternLetters[flag]; - return typeof targetPattern === "function" ? targetPattern(date) : targetPattern in _patternLetters ? creatNewSubString($0, targetPattern) : date[targetPattern](); + const targetPattern = _patternLetters[flag]; + return typeof targetPattern === 'function' + ? targetPattern(date) + : targetPattern in _patternLetters + ? creatNewSubString($0, targetPattern) + : date[targetPattern](); }); } diff --git a/src/mock/random/date/_patternLetters.js b/src/mock/random/date/_patternLetters.js index 799998bc..72280fb5 100644 --- a/src/mock/random/date/_patternLetters.js +++ b/src/mock/random/date/_patternLetters.js @@ -1,60 +1,60 @@ export default { - yyyy: "getFullYear", + yyyy: 'getFullYear', yy: function (date) { - return ("" + date.getFullYear()).slice(2); + return ('' + date.getFullYear()).slice(2); }, - y: "yy", + y: 'yy', MM: function (date) { - var m = date.getMonth() + 1; - return m < 10 ? "0" + m : m; + const m = date.getMonth() + 1; + return m < 10 ? '0' + m : m; }, M: function (date) { return date.getMonth() + 1; }, dd: function (date) { - var d = date.getDate(); - return d < 10 ? "0" + d : d; + const d = date.getDate(); + return d < 10 ? '0' + d : d; }, - d: "getDate", + d: 'getDate', HH: function (date) { - var h = date.getHours(); - return h < 10 ? "0" + h : h; + const h = date.getHours(); + return h < 10 ? '0' + h : h; }, - H: "getHours", + H: 'getHours', hh: function (date) { - var h = date.getHours() % 12; - return h < 10 ? "0" + h : h; + const h = date.getHours() % 12; + return h < 10 ? '0' + h : h; }, h: function (date) { return date.getHours() % 12; }, mm: function (date) { - var m = date.getMinutes(); - return m < 10 ? "0" + m : m; + const m = date.getMinutes(); + return m < 10 ? '0' + m : m; }, - m: "getMinutes", + m: 'getMinutes', ss: function (date) { - var s = date.getSeconds(); - return s < 10 ? "0" + s : s; + const s = date.getSeconds(); + return s < 10 ? '0' + s : s; }, - s: "getSeconds", + s: 'getSeconds', SS: function (date) { - var ms = date.getMilliseconds(); - return (ms < 10 && "00" + ms) || (ms < 100 && "0" + ms) || ms; + const ms = date.getMilliseconds(); + return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; }, - S: "getMilliseconds", + S: 'getMilliseconds', A: function (date) { - return date.getHours() < 12 ? "AM" : "PM"; + return date.getHours() < 12 ? 'AM' : 'PM'; }, a: function (date) { - return date.getHours() < 12 ? "am" : "pm"; + return date.getHours() < 12 ? 'am' : 'pm'; }, - T: "getTime", + T: 'getTime', }; diff --git a/src/mock/random/file.js b/src/mock/random/file.js index b5276b7c..80f0c040 100644 --- a/src/mock/random/file.js +++ b/src/mock/random/file.js @@ -1,11 +1,12 @@ // 用于生成 Blob 和 File 型数据的工具 -import { type } from "../util.js"; -import { word } from "./text/text_en.js"; +import { type } from '../util.js'; +import { word } from './text/text_en.js'; function prepare(anyData) { let prepared; switch (type(anyData)) { - case "array": + case 'array': prepared = anyData; + break; default: prepared = [anyData]; } @@ -14,6 +15,6 @@ function prepare(anyData) { export function genFile(anyData) { return new File(prepare(anyData), word()); } -export function genBlob() { +export function genBlob(anyData) { return new Blob(prepare(anyData)); } diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index afa29f35..aaeadc21 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -2,20 +2,22 @@ ## Helpers */ -import { shuffle as _shuffle, capitalize, sampleSize, random, sample } from "lodash-es"; +import { shuffle as _shuffle, capitalize, sampleSize, random, sample } from 'lodash-es'; const upper = function (str) { - return (str + "").toUpperCase(); + return (str + '').toUpperCase(); }; const lower = function (str) { - return (str + "").toLowerCase(); + return (str + '').toLowerCase(); }; // 从数组中随机选取一个元素,并返回。 // 更改 pick 函数 , 函数不进行重载 const pick = function (arr, ...args) { - let min, max, count; + let min; + let max; + let count; switch (args.length) { case 0: return sample(arr, 1); @@ -32,7 +34,7 @@ const pick = function (arr, ...args) { Given an array, scramble the order and return it. */ const shuffle = function (arr, min, max) { - let result = _shuffle(arr); + const result = _shuffle(arr); switch (arguments.length) { case 0: case 1: @@ -45,25 +47,25 @@ const shuffle = function (arr, min, max) { } }; /* - * Random.order(item, item) - * Random.order([item, item ...]) + * Random.order(item, item) + * Random.order([item, item ...]) - 顺序获取数组中的元素 + 顺序获取数组中的元素 - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - 不支持单独调用! - */ + 不支持单独调用! + */ const Cache = {}; const order = function (...array) { // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) if (array.length === 1) array = array[0]; // options.context.path/templatePath - var options = order.options; - var templatePath = options.context.templatePath.join("."); + const options = order.options; + const templatePath = options.context.templatePath.join('.'); - var cache = (Cache[templatePath] = Cache[templatePath] || { + const cache = (Cache[templatePath] = Cache[templatePath] || { index: 0, array: array, }); diff --git a/src/mock/random/image.js b/src/mock/random/image.js index d73246d0..51ea2a53 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -1,11 +1,11 @@ -/* global document */ +/* eslint-disable no-redeclare*/ /* ## Image */ -import size from "./image.json"; -import { pick } from "./helper.js"; -let { _adSize, _screenSize, _videoSize } = size; +import size from './image.json'; +import { pick } from './helper.js'; +const { _adSize, _screenSize, _videoSize } = size; /* BrandColors @@ -19,8 +19,8 @@ let { _adSize, _screenSize, _videoSize } = size; console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') }) */ -import _brandColors from "./brandColors.json"; -import { color, hex } from "./color"; +import _brandColors from './brandColors.json'; +import { hex } from './color'; const _brandNames = Object.keys(_brandColors); /* @@ -28,12 +28,16 @@ const _brandNames = Object.keys(_brandColors); 使用 api 替代图片源 http://fpoimg.com/ - 参考自 + 参考自 http://rensanning.iteye.com/blog/1933310 http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 */ function image(...args) { - let size, background, foreground, format, text; + let size; + let background; + let foreground; + let format; + let text; switch (arguments.length) { case 4: [size, background, foreground, text] = args; @@ -49,11 +53,13 @@ function image(...args) { if (!size) size = pick(_adSize); // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ""); - background = (background || hex()).replace(/^#/, ""); + foreground = (foreground || hex()).replace(/^#/, ''); + background = (background || hex()).replace(/^#/, ''); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? "/" + background : ""}${foreground ? "/" + foreground : ""}${format ? "." + format : ""}${text ? "&text=" + text : ""}`; + return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ + format ? '.' + format : '' + }${text ? '&text=' + text : ''}`; } /* 生成一段随机的 Base64 图片编码。 @@ -66,9 +72,9 @@ function image(...args) { }, */ function dataImage(size, text) { - var canvas; - if (typeof document !== "undefined") { - canvas = document.createElement("canvas"); + let canvas; + if (typeof document !== 'undefined') { + canvas = document.createElement('canvas'); } else { /* https://github.com/Automattic/node-canvas @@ -80,34 +86,34 @@ function dataImage(size, text) { PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 */ - var Canvas = module.require("canvas"); + const Canvas = module.require('canvas'); canvas = new Canvas(); } - var ctx = canvas && canvas.getContext && canvas.getContext("2d"); - if (!canvas || !ctx) return ""; + const ctx = canvas && canvas.getContext && canvas.getContext('2d'); + if (!canvas || !ctx) return ''; if (!size) size = pick(_adSize); text = text !== undefined ? text : size; - size = size.split("x"); + size = size.split('x'); - var width = parseInt(size[0], 10), - height = parseInt(size[1], 10), - background = _brandColors[pick(_brandNames)], - foreground = "#FFF", - text_height = 14, - font = "sans-serif"; + const width = parseInt(size[0], 10); + const height = parseInt(size[1], 10); + const background = _brandColors[pick(_brandNames)]; + const foreground = '#FFF'; + const textHeight = 14; + const font = 'sans-serif'; canvas.width = width; canvas.height = height; - ctx.textAlign = "center"; - ctx.textBaseline = "middle"; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; ctx.fillStyle = background; ctx.fillRect(0, 0, width, height); ctx.fillStyle = foreground; - ctx.font = "bold " + text_height + "px " + font; + ctx.font = 'bold ' + textHeight + 'px ' + font; ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL("image/png"); + return canvas.toDataURL('image/png'); } export { _adSize, _screenSize, _videoSize, image, image as img, _brandColors, _brandNames, dataImage }; diff --git a/src/mock/random/image.json b/src/mock/random/image.json index da2bab08..fac2daf1 100644 --- a/src/mock/random/image.json +++ b/src/mock/random/image.json @@ -1,7 +1,37 @@ { - "_adSize": ["300x250", "250x250", "240x400", "336x280", "180x150", "720x300", "468x60", "234x60", "88x31", "120x90", "120x60", "120x240", "125x125", "728x90", "160x600", "120x600", "300x600"], + "_adSize": [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" + ], - "_screenSize": ["320x200", "320x240", "640x480", "800x480", "800x480", "1024x600", "1024x768", "1280x800", "1440x900", "1920x1200", "2560x1600"], + "_screenSize": [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" + ], "_videoSize": ["720x480", "768x576", "1280x720", "1920x1080"] -} \ No newline at end of file +} diff --git a/src/mock/random/index.js b/src/mock/random/index.js index fbf943a7..be9aefb4 100644 --- a/src/mock/random/index.js +++ b/src/mock/random/index.js @@ -1,17 +1,17 @@ /* ## Mock.Random - + 工具类,用于生成各种随机数据。 */ -export * from "./basic.js"; -export * from "./color.js"; -export * from "./name.js"; -export * from "./helper.js"; -export * from "./misc.js"; -export * from "./text.js"; -export * from "./web.js"; -export * from "./date.js"; -export * from "./image.js"; -export * from "./address.js"; -export * from "./file.js"; +export * from './basic.js'; +export * from './color.js'; +export * from './name.js'; +export * from './helper.js'; +export * from './misc.js'; +export * from './text.js'; +export * from './web.js'; +export * from './date.js'; +export * from './image.js'; +export * from './address.js'; +export * from './file.js'; diff --git a/src/mock/random/misc.js b/src/mock/random/misc.js index 0b9c512d..7ceb5a43 100644 --- a/src/mock/random/misc.js +++ b/src/mock/random/misc.js @@ -1,13 +1,13 @@ /* ## Miscellaneous */ -import { v4 as uuid } from "uuid"; -import id from "./misc/id.js"; -import guid from "./misc/guid.js"; - +import { v4 as uuid } from 'uuid'; +import id from './misc/id.js'; +import guid from './misc/guid.js'; +import { natural } from '../random/basic/number'; /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 */ let key = 0; const increment = function (step) { @@ -17,21 +17,21 @@ const inc = increment; // Dice function d4() { - return this.natural(1, 4); + return natural(1, 4); } function d6() { - return this.natural(1, 6); + return natural(1, 6); } function d8() { - return this.natural(1, 8); + return natural(1, 8); } function d12() { - return this.natural(1, 12); + return natural(1, 12); } function d20() { - return this.natural(1, 20); + return natural(1, 20); } function d100() { - return this.natural(1, 100); + return natural(1, 100); } export { d4, d6, d8, d12, d20, d100, guid, uuid, id, increment, inc }; diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js index e1812a2f..f5f704bf 100644 --- a/src/mock/random/misc/guid.js +++ b/src/mock/random/misc/guid.js @@ -1,35 +1,35 @@ /* - 随机生成一个 GUID。 + 随机生成一个 GUID。 - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ -import { v4 as uuid } from "uuid"; + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ +import { v4 as uuid } from 'uuid'; export default function guid() { - return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, "-"); + return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); } diff --git a/src/mock/random/misc/id.js b/src/mock/random/misc/id.js index a52e7960..6bff5713 100644 --- a/src/mock/random/misc/id.js +++ b/src/mock/random/misc/id.js @@ -1,7 +1,7 @@ -import DICT from "../address_dict.js"; -import { pick } from "../helper.js"; -import { date } from "../date.js"; -import { string } from "../basic.js"; +import DICT from '../address_dict.js'; +import { pick } from '../helper.js'; +import { date } from '../date.js'; +import { string } from '../basic.js'; /* 随机生成一个 18 位身份证。 @@ -10,14 +10,14 @@ import { string } from "../basic.js"; [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) */ export default function id() { - var id, - sum = 0, - rank = ["7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2"], - last = ["1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"]; + let id; + let sum = 0; + const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; + const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; - id = pick(DICT).id + date("yyyyMMdd") + string("number", 3); + id = pick(DICT).id + date('yyyyMMdd') + string('number', 3); - for (var i = 0; i < id.length; i++) { + for (let i = 0; i < id.length; i++) { sum += id[i] * rank[i]; } id += last[sum % 11]; diff --git a/src/mock/random/name.js b/src/mock/random/name.js index 1fd1a9c6..32dd5fce 100644 --- a/src/mock/random/name.js +++ b/src/mock/random/name.js @@ -3,13 +3,13 @@ [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) */ -import Name from "./name.json"; -let { firstName, lastName, cfirstName, clastName } = Name; -import { pick } from "./helper.js"; +import Name from './name.json'; +const { firstName, lastName, cfirstName, clastName } = Name; +import { pick } from './helper.js'; // 随机生成一个常见的英文名。 function first() { - var names = firstName.male.concat(); + const names = firstName.male.concat(); return pick(names); } @@ -20,20 +20,20 @@ function last() { // 随机生成一个常见的英文姓名。 function name(middle) { - middle = middle ? ` ${first()} ` : " "; + middle = middle ? ` ${first()} ` : ' '; return `${first()}${middle}${last()}`; } /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) */ function cfirst() { return pick(cfirstName); } /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) */ function clast() { return pick(clastName); diff --git a/src/mock/random/name.json b/src/mock/random/name.json index 2527cfda..01ee464a 100644 --- a/src/mock/random/name.json +++ b/src/mock/random/name.json @@ -1,6 +1,6 @@ { - "firstName":{ - "male":[ + "firstName": { + "male": [ "James", "John", "Robert", @@ -35,7 +35,7 @@ "Scott", "Eric" ], - "female":[ + "female": [ "Mary", "Patricia", "Linda", @@ -70,7 +70,8 @@ "Amy", "Anna" ] - },"lastName":[ + }, + "lastName": [ "Smith", "Johnson", "Williams", @@ -103,7 +104,8 @@ "Hall", "Young", "Allen" - ],"cfirstName":[ + ], + "cfirstName": [ "王", "李", "张", @@ -205,7 +207,7 @@ "龚", "文" ], - "clastName":[ + "clastName": [ "伟", "芳", "娜", @@ -230,4 +232,4 @@ "刚", "桂英" ] -} \ No newline at end of file +} diff --git a/src/mock/random/text.js b/src/mock/random/text.js index 7dfb47be..28dcc97c 100644 --- a/src/mock/random/text.js +++ b/src/mock/random/text.js @@ -3,5 +3,5 @@ http://www.lipsum.com/ */ -export { paragraph, word, sentence, title } from "./text/text_en.js"; -export { ctitle, csentence, cparagraph, cword } from "./text/text-ch.js"; +export { paragraph, word, sentence, title } from './text/text_en.js'; +export { ctitle, csentence, cparagraph, cword } from './text/text-ch.js'; diff --git a/src/mock/random/text/range.js b/src/mock/random/text/range.js index 39041182..6dae8a8e 100644 --- a/src/mock/random/text/range.js +++ b/src/mock/random/text/range.js @@ -1,4 +1,4 @@ -import { natural } from "../basic.js"; +import { natural } from '../basic.js'; export default function range(defaultMin, defaultMax, min, max) { return min === undefined ? natural(defaultMin, defaultMax) // (min,max) diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js index 2215f836..56043e31 100644 --- a/src/mock/random/text/text-ch.js +++ b/src/mock/random/text/text-ch.js @@ -1,35 +1,35 @@ -import { natural } from "../basic.js"; -import { random, sampleSize, times } from "lodash-es"; +import { natural } from '../basic.js'; +import { random, sampleSize, times } from 'lodash-es'; function cparagraph(min = 3, max = 7) { - var len = random(min, max); - return times(len, () => csentence()).join("\n"); + const len = random(min, max); + return times(len, () => csentence()).join('\n'); } // 随机生成一个中文句子。 function csentence(min = 12, max = 18) { - var len = random(min, max); - return times(len, () => cword()).join("") + "。"; + const len = random(min, max); + return times(len, () => cword()).join('') + '。'; } // 随机生成一句中文标题。 function ctitle(min = 3, max = 7) { - var len = random(min, max); - return times(len, () => cword()).join(""); + const len = random(min, max); + return times(len, () => cword()).join(''); } // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm const DICT_HANZI = - "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞"; + '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; // 随机生成一个或多个汉字。 function cword(...args) { - var len = 1, - pool = DICT_HANZI, - min, - max; + let len = 1; + let pool = DICT_HANZI; + let min; + let max; switch (args.length) { case 0: // () break; case 1: // ( pool ) - if (typeof args[0] === "string") { + if (typeof args[0] === 'string') { [pool] = args; } else { // ( length ) @@ -38,7 +38,7 @@ function cword(...args) { break; case 2: // ( pool, length ) - if (typeof args[0] === "string") { + if (typeof args[0] === 'string') { [pool, len] = args; } else { // ( min, max ) @@ -53,7 +53,7 @@ function cword(...args) { break; } - return sampleSize(pool, len).join(""); + return sampleSize(pool, len).join(''); } export { ctitle, csentence, cparagraph, cword }; diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index 9374dce8..628ac189 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -1,28 +1,28 @@ -import { random, times } from "lodash-es"; -import { character } from "../basic.js"; -import { capitalize } from "../helper.js"; +import { random, times } from 'lodash-es'; +import { character } from '../basic.js'; +import { capitalize } from '../helper.js'; // 随机生成一个句子,第一个单词的首字母大写。 function sentence(min = 12, max = 18) { - var len = random(min, max); - let string = times(len, () => word()).join(""); - return capitalize(string) + "."; + const len = random(min, max); + const string = times(len, () => word()).join(''); + return capitalize(string) + '.'; } // 随机生成一个单词。 function word(min = 3, max = 10) { - var len = random(min, max); - return times(len, () => character("lower")).join(""); + const len = random(min, max); + return times(len, () => character('lower')).join(''); } // 随机生成一段文本。 function paragraph(min = 3, max = 7) { - var len = random(min, max); - return times(len, () => sentence()).join("\n"); + const len = random(min, max); + return times(len, () => sentence()).join('\n'); } // 随机生成一句标题,其中每个单词的首字母大写。 function title(min = 3, max = 7) { - var len = random(min, max); - return times(len, () => capitalize(word())).join(""); + const len = random(min, max); + return times(len, () => capitalize(word())).join(''); } export { word, paragraph, sentence, title }; diff --git a/src/mock/random/web.js b/src/mock/random/web.js index 7bc9c174..09c28a90 100644 --- a/src/mock/random/web.js +++ b/src/mock/random/web.js @@ -1,4 +1,4 @@ /* ## Web */ -export { protocol, domain, tld, email, ip, url } from "./web/web_func.js"; +export { protocol, domain, tld, email, ip, url } from './web/web_func.js'; diff --git a/src/mock/random/web/web_dict.js b/src/mock/random/web/web_dict.js index 578122b9..06182d70 100644 --- a/src/mock/random/web/web_dict.js +++ b/src/mock/random/web/web_dict.js @@ -1,15 +1,15 @@ // 协议簇 -const protocols = "http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "); -const tlds = // 域名后缀 -( - "com net org edu gov int mil cn " + +const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); +// 域名后缀 +const tlds = ( + 'com net org edu gov int mil cn ' + // 国内域名 - "com.cn net.cn gov.cn org.cn " + + 'com.cn net.cn gov.cn org.cn ' + // 中文国内域名 - "中国 中国互联.公司 中国互联.网络 " + + '中国 中国互联.公司 中国互联.网络 ' + // 新国际域名 - "tel biz cc tv info name hk mobi asia cd travel pro museum coop aero " + + 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + // 世界各国域名后缀 - "ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw" -).split(" "); + 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' +).split(' '); export { protocols, tlds }; diff --git a/src/mock/random/web/web_func.js b/src/mock/random/web/web_func.js index e81da8d0..845f4299 100644 --- a/src/mock/random/web/web_func.js +++ b/src/mock/random/web/web_func.js @@ -1,21 +1,21 @@ -import { pick } from "../helper.js"; -import { word } from "../text.js"; -import { protocols, tlds } from "./web_dict.js"; +import { pick } from '../helper.js'; +import { word } from '../text.js'; +import { protocols, tlds } from './web_dict.js'; /* 随机生成一个 URL。 [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers + wais Wide Area Information Servers */ export function url(Protocol, host) { return `${Protocol || protocol()}://${host || domain()}/${word()}`; @@ -40,14 +40,14 @@ export function tld() { return pick(tlds); } -import { character, natural } from "../basic.js"; +import { character, natural } from '../basic.js'; // 随机生成一个邮件地址。 export function email(domain) { - return `${character("lower")}.${word()}@${domain || word() + "." + tld()}`; + return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; } // 随机生成一个 IP 地址。 export function ip() { // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join("."); + return [...Array(4)].map(() => natural(0, 255)).join('.'); } diff --git a/src/mock/regexp/handler.js b/src/mock/regexp/handler.js index 282116b3..b02b8901 100644 --- a/src/mock/regexp/handler.js +++ b/src/mock/regexp/handler.js @@ -1,3 +1,4 @@ +/*eslint-disable*/ /* ## RegExp Handler @@ -53,17 +54,17 @@ null-character \o NUL 字符 */ -import * as Util from "../util.js"; -import { character, pick, boolean, integer } from "../random/index.js"; +import * as Util from '../util.js'; +import { character, pick, boolean, integer } from '../random/index.js'; /* - + */ -var Handler = { +const Handler = { extend: Util.extend, }; // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart -/*var ASCII_CONTROL_CODE_CHART = { +/* let ASCII_CONTROL_CODE_CHART = { '@': ['\u0000'], A: ['\u0001'], B: ['\u0002'], @@ -99,37 +100,37 @@ var Handler = { }*/ // ASCII printable code chart -// var LOWER = 'abcdefghijklmnopqrstuvwxyz' -// var UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -// var NUMBER = '0123456789' -// var SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' -var LOWER = ascii(97, 122); -var UPPER = ascii(65, 90); -var NUMBER = ascii(48, 57); -var OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) -var PRINTABLE = ascii(32, 126); -var SPACE = " \f\n\r\t\v\u00A0\u2028\u2029"; -var CHARACTER_CLASSES = { - "\\w": LOWER + UPPER + NUMBER + "_", // ascii(95, 95) - "\\W": OTHER.replace("_", ""), - "\\s": SPACE, - "\\S": (function () { - var result = PRINTABLE; - for (var i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ""); +// let LOWER = 'abcdefghijklmnopqrstuvwxyz' +// let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +// let NUMBER = '0123456789' +// let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' +const LOWER = ascii(97, 122); +const UPPER = ascii(65, 90); +const NUMBER = ascii(48, 57); +const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) +const PRINTABLE = ascii(32, 126); +const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; +const CHARACTER_CLASSES = { + '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) + '\\W': OTHER.replace('_', ''), + '\\s': SPACE, + '\\S': (function () { + let result = PRINTABLE; + for (let i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ''); } return result; })(), - "\\d": NUMBER, - "\\D": LOWER + UPPER + OTHER, + '\\d': NUMBER, + '\\D': LOWER + UPPER + OTHER, }; // 从 from 到 to 包含两个端点的字符串 function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(""); + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); } -// var ast = RegExpParser.parse(regexp.source) +// let ast = RegExpParser.parse(regexp.source) Handler.gen = function (node, result, cache) { cache = cache || { guid: 1, @@ -141,40 +142,40 @@ Handler.extend({ /* jshint unused:false */ token: function (node, result, cache) { switch (node.type) { - case "start": - case "end": - return ""; - case "any-character": + case 'start': + case 'end': + return ''; + case 'any-character': return character(); - case "backspace": - return ""; - case "word-boundary": // TODO - return ""; - case "non-word-boundary": // TODO + case 'backspace': + return ''; + case 'word-boundary': // TODO + return ''; + case 'non-word-boundary': // TODO break; - case "digit": - return pick(NUMBER.split("")); - case "non-digit": - return pick((LOWER + UPPER + OTHER).split("")); - case "form-feed": + case 'digit': + return pick(NUMBER.split('')); + case 'non-digit': + return pick((LOWER + UPPER + OTHER).split('')); + case 'form-feed': break; - case "line-feed": + case 'line-feed': return node.body || node.text; - case "carriage-return": + case 'carriage-return': break; - case "white-space": - return pick(SPACE.split("")); - case "non-white-space": - return pick((LOWER + UPPER + NUMBER).split("")); - case "tab": + case 'white-space': + return pick(SPACE.split('')); + case 'non-white-space': + return pick((LOWER + UPPER + NUMBER).split('')); + case 'tab': break; - case "vertical-tab": + case 'vertical-tab': break; - case "word": // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split("")); - case "non-word": // \W [^a-zA-Z0-9] - return pick(OTHER.replace("_", "").split("")); - case "null-character": + case 'word': // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split('')); + case 'non-word': // \W [^a-zA-Z0-9] + return pick(OTHER.replace('_', '').split('')); + case 'null-character': break; } return node.body || node.text; @@ -205,34 +206,34 @@ Handler.extend({ } */ match: function (node, result, cache) { - result = ""; + result = ''; // node.body [] - for (var i = 0; i < node.body.length; i++) { + for (let i = 0; i < node.body.length; i++) { result += this.gen(node.body[i], result, cache); } return result; }, // () - "capture-group": function (node, result, cache) { + 'capture-group': function (node, result, cache) { // node.body {} result = this.gen(node.body, result, cache); cache[cache.guid++] = result; return result; }, // (?:...) - "non-capture-group": function (node, result, cache) { + 'non-capture-group': function (node, result, cache) { // node.body {} return this.gen(node.body, result, cache); }, // (?=p) - "positive-lookahead": function (node, result, cache) { + 'positive-lookahead': function (node, result, cache) { // node.body return this.gen(node.body, result, cache); }, // (?!p) - "negative-lookahead": function (node, result, cache) { + 'negative-lookahead': function (node, result, cache) { // node.body - return ""; + return ''; }, /* { @@ -257,11 +258,11 @@ Handler.extend({ } */ quantified: function (node, result, cache) { - result = ""; + result = ''; // node.quantifier {} - var count = this.quantifier(node.quantifier); + const count = this.quantifier(node.quantifier); // node.body {} - for (var i = 0; i < count; i++) { + for (let i = 0; i < count; i++) { result += this.gen(node.body, result, cache); } return result; @@ -277,51 +278,52 @@ Handler.extend({ } */ quantifier: function (node, result, cache) { - var min = Math.max(node.min, 0); - var max = isFinite(node.max) ? node.max : min + integer(3, 7); + const min = Math.max(node.min, 0); + const max = isFinite(node.max) ? node.max : min + integer(3, 7); return integer(min, max); }, /* - + */ charset: function (node, result, cache) { // node.invert - if (node.invert) return this["invert-charset"](node, result, cache); + if (node.invert) return this['invert-charset'](node, result, cache); // node.body [] - var literal = pick(node.body); + const literal = pick(node.body); return this.gen(literal, result, cache); }, - "invert-charset": function (node, result, cache) { - var pool = PRINTABLE; - for (var i = 0, item; i < node.body.length; i++) { + 'invert-charset': function (node, result, cache) { + let pool = PRINTABLE; + for (let i = 0, item; i < node.body.length; i++) { item = node.body[i]; switch (item.type) { - case "literal": - pool = pool.replace(item.body, ""); + case 'literal': { + pool = pool.replace(item.body, ''); break; - case "range": - var min = this.gen(item.start, result, cache).charCodeAt(); - var max = this.gen(item.end, result, cache).charCodeAt(); - for (var ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ""); + } + case 'range': + const min = this.gen(item.start, result, cache).charCodeAt(); + const max = this.gen(item.end, result, cache).charCodeAt(); + for (let ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ''); } /* falls through */ default: - var characters = CHARACTER_CLASSES[item.text]; + const characters = CHARACTER_CLASSES[item.text]; if (characters) { - for (var iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ""); + for (let iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ''); } } } } - return pick(pool.split("")); + return pick(pool.split('')); }, range: function (node, result, cache) { // node.start, node.end - var min = this.gen(node.start, result, cache).charCodeAt(); - var max = this.gen(node.end, result, cache).charCodeAt(); + const min = this.gen(node.start, result, cache).charCodeAt(); + const max = this.gen(node.end, result, cache).charCodeAt(); return String.fromCharCode(integer(min, max)); }, literal: function (node, result, cache) { @@ -340,25 +342,25 @@ Handler.extend({ return String.fromCharCode(parseInt(node.code, 8)); }, // 反向引用 - "back-reference": function (node, result, cache) { - return cache[node.code] || ""; + 'back-reference': function (node, result, cache) { + return cache[node.code] || ''; }, /* http://en.wikipedia.org/wiki/C0_and_C1_control_codes */ CONTROL_CHARACTER_MAP: (function () { - var CONTROL_CHARACTER = "@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _".split(" "); - var CONTROL_CHARACTER_UNICODE = - "\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F".split( - " " + const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); + const CONTROL_CHARACTER_UNICODE = + '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( + ' ', ); - var map = {}; - for (var i = 0; i < CONTROL_CHARACTER.length; i++) { + const map = {}; + for (let i = 0; i < CONTROL_CHARACTER.length; i++) { map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; } return map; })(), - "control-character": function (node, result, cache) { + 'control-character': function (node, result, cache) { return this.CONTROL_CHARACTER_MAP[node.code]; }, }); diff --git a/src/mock/regexp/index.js b/src/mock/regexp/index.js index 99daad29..32fa6f9a 100644 --- a/src/mock/regexp/index.js +++ b/src/mock/regexp/index.js @@ -1,2 +1,2 @@ -export { Parser } from "./parser.js"; -export { Handler } from "./handler.js"; +export { Parser } from './parser.js'; +export { Handler } from './handler.js'; diff --git a/src/mock/regexp/parser.js b/src/mock/regexp/parser.js index 6735af53..84b2f40a 100644 --- a/src/mock/regexp/parser.js +++ b/src/mock/regexp/parser.js @@ -1,9 +1,10 @@ +/*eslint-disable*/ // https://github.com/nuysoft/regexp // forked from https://github.com/ForbesLindesay/regexp function parse(n) { - if ("string" != typeof n) { - var l = new TypeError("The regexp to parse must be represented as a string."); + if ('string' != typeof n) { + var l = new TypeError('The regexp to parse must be represented as a string.'); throw l; } return (index = 1), (cgs = {}), parser.parse(n); @@ -14,11 +15,11 @@ function Token(n) { } function Alternate(n, l) { - Token.call(this, "alternate"), (this.left = n), (this.right = l); + Token.call(this, 'alternate'), (this.left = n), (this.right = l); } function Match(n) { - Token.call(this, "match"), (this.body = n.filter(Boolean)); + Token.call(this, 'match'), (this.body = n.filter(Boolean)); } function Group(n, l) { @@ -26,47 +27,47 @@ function Group(n, l) { } function CaptureGroup(n) { - Group.call(this, "capture-group"), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); + Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); } function Quantified(n, l) { - Token.call(this, "quantified"), (this.body = n), (this.quantifier = l); + Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); } function Quantifier(n, l) { - Token.call(this, "quantifier"), (this.min = n), (this.max = l), (this.greedy = !0); + Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); } function CharSet(n, l) { - Token.call(this, "charset"), (this.invert = n), (this.body = l); + Token.call(this, 'charset'), (this.invert = n), (this.body = l); } function CharacterRange(n, l) { - Token.call(this, "range"), (this.start = n), (this.end = l); + Token.call(this, 'range'), (this.start = n), (this.end = l); } function Literal(n) { - Token.call(this, "literal"), (this.body = n), (this.escaped = this.body != this.text); + Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); } function Unicode(n) { - Token.call(this, "unicode"), (this.code = n.toUpperCase()); + Token.call(this, 'unicode'), (this.code = n.toUpperCase()); } function Hex(n) { - Token.call(this, "hex"), (this.code = n.toUpperCase()); + Token.call(this, 'hex'), (this.code = n.toUpperCase()); } function Octal(n) { - Token.call(this, "octal"), (this.code = n.toUpperCase()); + Token.call(this, 'octal'), (this.code = n.toUpperCase()); } function BackReference(n) { - Token.call(this, "back-reference"), (this.code = n.toUpperCase()); + Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); } function ControlCharacter(n) { - Token.call(this, "control-character"), (this.code = n.toUpperCase()); + Token.call(this, 'control-character'), (this.code = n.toUpperCase()); } var parser = (function () { @@ -83,30 +84,30 @@ var parser = (function () { return n.charCodeAt(0).toString(16).toUpperCase(); } return n - .replace(/\\/g, "\\\\") + .replace(/\\/g, '\\\\') .replace(/"/g, '\\"') - .replace(/\x08/g, "\\b") - .replace(/\t/g, "\\t") - .replace(/\n/g, "\\n") - .replace(/\f/g, "\\f") - .replace(/\r/g, "\\r") + .replace(/\x08/g, '\\b') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\f/g, '\\f') + .replace(/\r/g, '\\r') .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return "\\x0" + l(n); + return '\\x0' + l(n); }) .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return "\\x" + l(n); + return '\\x' + l(n); }) .replace(/[\u0180-\u0FFF]/g, function (n) { - return "\\u0" + l(n); + return '\\u0' + l(n); }) .replace(/[\u1080-\uFFFF]/g, function (n) { - return "\\u" + l(n); + return '\\u' + l(n); }); } var t, r; switch (n.length) { case 0: - t = "end of input"; + t = 'end of input'; break; case 1: @@ -114,11 +115,17 @@ var parser = (function () { break; default: - t = n.slice(0, -1).join(", ") + " or " + n[n.length - 1]; + t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; } - return (r = l ? '"' + u(l) + '"' : "end of input"), "Expected " + t + " but " + r + " found."; + return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; } - (this.expected = n), (this.found = l), (this.offset = u), (this.line = t), (this.column = r), (this.name = "SyntaxError"), (this.message = e(n, l)); + (this.expected = n), + (this.found = l), + (this.offset = u), + (this.line = t), + (this.column = r), + (this.name = 'SyntaxError'), + (this.message = e(n, l)); } function u(n) { function u() { @@ -132,9 +139,9 @@ var parser = (function () { var r, e; for (r = u; t > r; r++) (e = n.charAt(r)), - "\n" === e + '\n' === e ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : "\r" === e || "\u2028" === e || "\u2029" === e + : '\r' === e || '\u2028' === e || '\u2029' === e ? (l.line++, (l.column = 1), (l.seenCR = !0)) : (l.column++, (l.seenCR = !1)); } @@ -167,9 +174,13 @@ var parser = (function () { null !== u ? ((t = qt), 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) : ((qt = t), (t = il)), + null !== r + ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) + : ((qt = t), (t = il)), null === t && (t = al), - null !== t ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== t + ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il)), l ); @@ -178,9 +189,14 @@ var parser = (function () { var n, l, u, t, r; if (((n = qt), (l = f()), null === l && (l = al), null !== l)) if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) t.push(r), (r = h()), null === r && (r = a()); + for (t = [], r = h(), null === r && (r = a()); null !== r; ) + t.push(r), (r = h()), null === r && (r = a()); null !== t - ? ((r = s()), null === r && (r = al), null !== r ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) + ? ((r = s()), + null === r && (r = al), + null !== r + ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) : ((qt = n), (n = il)); } else (qt = n), (n = il); else (qt = n), (n = il); @@ -192,16 +208,36 @@ var parser = (function () { } function f() { var l, u; - return (l = qt), 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), null !== u && ((Lt = l), (u = wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), + null !== u && ((Lt = l), (u = wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function s() { var l, u; - return (l = qt), 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), null !== u && ((Lt = l), (u = gl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), + null !== u && ((Lt = l), (u = gl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function h() { var n, l, u; return ( - (n = qt), (l = a()), null !== l ? ((u = d()), null !== u ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), n + (n = qt), + (l = a()), + null !== l + ? ((u = d()), + null !== u + ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + n ); } function d() { @@ -210,7 +246,13 @@ var parser = (function () { Wt++, (n = qt), (l = p()), - null !== l ? ((u = k()), null === u && (u = al), null !== u ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) : ((qt = n), (n = il))) : ((qt = n), (n = il)), + null !== l + ? ((u = k()), + null === u && (u = al), + null !== u + ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), Wt--, null === n && ((l = null), 0 === Wt && e(kl)), n @@ -218,7 +260,14 @@ var parser = (function () { } function p() { var n; - return (n = v()), null === n && ((n = w()), null === n && ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), n; + return ( + (n = v()), + null === n && + ((n = w()), + null === n && + ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), + n + ); } function v() { var l, u, t, r, o, c; @@ -232,8 +281,12 @@ var parser = (function () { null !== r ? ((o = T()), null !== o - ? (125 === n.charCodeAt(qt) ? ((c = Fl), qt++) : ((c = null), 0 === Wt && e(Ql)), - null !== c ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + ? (125 === n.charCodeAt(qt) + ? ((c = Fl), qt++) + : ((c = null), 0 === Wt && e(Ql)), + null !== c + ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il))) : ((qt = l), (l = il))) : ((qt = l), (l = il))) @@ -250,7 +303,9 @@ var parser = (function () { ? ((t = T()), null !== t ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== r + ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il))) : ((qt = l), (l = il)), l @@ -265,7 +320,9 @@ var parser = (function () { ? ((t = T()), null !== t ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== r + ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il))) : ((qt = l), (l = il)), l @@ -273,15 +330,33 @@ var parser = (function () { } function C() { var l, u; - return (l = qt), 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), null !== u && ((Lt = l), (u = ql())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), + null !== u && ((Lt = l), (u = ql())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function g() { var l, u; - return (l = qt), 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), null !== u && ((Lt = l), (u = Dl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), + null !== u && ((Lt = l), (u = Dl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function b() { var l, u; - return (l = qt), 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), null !== u && ((Lt = l), (u = Wl())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), + null !== u && ((Lt = l), (u = Wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function k() { var l; @@ -289,8 +364,14 @@ var parser = (function () { } function T() { var l, u, t; - if (((l = qt), (u = []), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), null !== t)) - for (; null !== t; ) u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + if ( + ((l = qt), + (u = []), + zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), + null !== t) + ) + for (; null !== t; ) + u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); else u = il; return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; } @@ -304,7 +385,9 @@ var parser = (function () { null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), null !== t ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== r + ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il))) : ((qt = l), (l = il)), l @@ -312,14 +395,25 @@ var parser = (function () { } function y() { var n, l; - return (n = qt), (l = c()), null !== l && ((Lt = n), (l = Yl(l))), null === l ? ((qt = n), (n = l)) : (n = l), n; + return ( + (n = qt), + (l = c()), + null !== l && ((Lt = n), (l = Yl(l))), + null === l ? ((qt = n), (n = l)) : (n = l), + n + ); } function m() { var l, u, t; return ( (l = qt), n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), l ); } @@ -328,7 +422,12 @@ var parser = (function () { return ( (l = qt), n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), l ); } @@ -337,18 +436,35 @@ var parser = (function () { return ( (l = qt), n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u ? ((t = c()), null !== t ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), l ); } function Q() { var l, u, t, r, o; - if ((Wt++, (l = qt), 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), null !== u)) - if ((94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), null === t && (t = al), null !== t)) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) r.push(o), (o = S()), null === o && (o = U()); + if ( + (Wt++, + (l = qt), + 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), + null !== u) + ) + if ( + (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), + null === t && (t = al), + null !== t) + ) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) + r.push(o), (o = S()), null === o && (o = U()); null !== r ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== o + ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il)); } else (qt = l), (l = il); else (qt = l), (l = il); @@ -362,7 +478,12 @@ var parser = (function () { (u = U()), null !== u ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t ? ((r = U()), null !== r ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) : ((qt = l), (l = il))) + null !== t + ? ((r = U()), + null !== r + ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) : ((qt = l), (l = il)), Wt--, null === l && ((u = null), 0 === Wt && e(du)), @@ -376,7 +497,11 @@ var parser = (function () { function E() { var l, u; return ( - (l = qt), Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), null !== u && ((Lt = l), (u = bu(u))), null === u ? ((qt = l), (l = u)) : (l = u), l + (l = qt), + Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + l ); } function G() { @@ -409,7 +534,14 @@ var parser = (function () { ((n = X()), null === n && ((n = _()), - null === n && ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = tl()))))))))))))))))), n ); } @@ -419,7 +551,13 @@ var parser = (function () { } function j() { var l, u; - return (l = qt), 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), null !== u && ((Lt = l), (u = xu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), + null !== u && ((Lt = l), (u = xu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function $() { var l, u; @@ -469,65 +607,156 @@ var parser = (function () { null === n && ((n = _()), null === n && - ((n = nl()), null === n && ((n = ll()), null === n && ((n = ul()), null === n && (n = tl()))))))))))))))))))), + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = + tl()))))))))))))))))))), n ); } function L() { var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Su())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Su())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function M() { var l, u; - return (l = qt), n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), null !== u && ((Lt = l), (u = Uu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Uu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function D() { var l, u; - return (l = qt), n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), null !== u && ((Lt = l), (u = Bu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), + null !== u && ((Lt = l), (u = Bu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function H() { var l, u; - return (l = qt), n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), null !== u && ((Lt = l), (u = qu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), + null !== u && ((Lt = l), (u = qu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function O() { var l, u; - return (l = qt), n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), null !== u && ((Lt = l), (u = Du())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), + null !== u && ((Lt = l), (u = Du())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function W() { var l, u; - return (l = qt), n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), null !== u && ((Lt = l), (u = Wu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), + null !== u && ((Lt = l), (u = Wu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function z() { var l, u; - return (l = qt), n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), null !== u && ((Lt = l), (u = Ju())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), + null !== u && ((Lt = l), (u = Ju())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function I() { var l, u; - return (l = qt), n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), null !== u && ((Lt = l), (u = Pu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), + null !== u && ((Lt = l), (u = Pu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function J() { var l, u; - return (l = qt), n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), null !== u && ((Lt = l), (u = Yu())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), + null !== u && ((Lt = l), (u = Yu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function K() { var l, u; - return (l = qt), n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), null !== u && ((Lt = l), (u = nt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), + null !== u && ((Lt = l), (u = nt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function N() { var l, u; - return (l = qt), n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), null !== u && ((Lt = l), (u = tt())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), + null !== u && ((Lt = l), (u = tt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function P() { var l, u; - return (l = qt), n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), null !== u && ((Lt = l), (u = ot())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), + null !== u && ((Lt = l), (u = ot())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function V() { var l, u; - return (l = qt), n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), null !== u && ((Lt = l), (u = at())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), + null !== u && ((Lt = l), (u = at())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function X() { var l, u; - return (l = qt), n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), null !== u && ((Lt = l), (u = ht())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), + null !== u && ((Lt = l), (u = ht())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function Y() { var l, u, t; @@ -536,7 +765,9 @@ var parser = (function () { n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), null !== u ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== t + ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il)), l ); @@ -548,44 +779,88 @@ var parser = (function () { 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), null !== u ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== t + ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il)), l ); } function _() { var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u)) { - if (((t = []), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), null !== r)) - for (; null !== r; ) t.push(r), yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + if ( + ((l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u) + ) { + if ( + ((t = []), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); else t = il; - null !== t ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + null !== t + ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); } else (qt = l), (l = il); return l; } function nl() { var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + if ( + ((l = qt), + n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); else t = il; - null !== t ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + null !== t + ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); } else (qt = l), (l = il); return l; } function ll() { var l, u, t, r; - if (((l = qt), n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), null !== u)) { - if (((t = []), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), null !== r)) - for (; null !== r; ) t.push(r), St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + if ( + ((l = qt), + n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); else t = il; - null !== t ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il)); + null !== t + ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); } else (qt = l), (l = il); return l; } function ul() { var l, u; - return (l = qt), n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), null !== u && ((Lt = l), (u = $t())), null === u ? ((qt = l), (l = u)) : (l = u), l; + return ( + (l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u && ((Lt = l), (u = $t())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); } function tl() { var l, u, t; @@ -594,7 +869,9 @@ var parser = (function () { 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), null !== u ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) : ((qt = l), (l = il))) + null !== t + ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) : ((qt = l), (l = il)), l ); @@ -606,8 +883,8 @@ var parser = (function () { }, cl = c, il = null, - al = "", - fl = "|", + al = '', + fl = '|', sl = '"|"', hl = function (n, l) { return l ? new Alternate(n, l[1]) : n; @@ -615,33 +892,33 @@ var parser = (function () { dl = function (n, l, u) { return new Match([n].concat(l).concat([u])); }, - pl = "^", + pl = '^', vl = '"^"', wl = function () { - return new Token("start"); + return new Token('start'); }, - Al = "$", + Al = '$', Cl = '"$"', gl = function () { - return new Token("end"); + return new Token('end'); }, bl = function (n, l) { return new Quantified(n, l); }, - kl = "Quantifier", + kl = 'Quantifier', Tl = function (n, l) { return l && (n.greedy = !1), n; }, - xl = "{", + xl = '{', yl = '"{"', - ml = ",", + ml = ',', Rl = '","', - Fl = "}", + Fl = '}', Ql = '"}"', Sl = function (n, l) { return new Quantifier(n, l); }, - Ul = ",}", + Ul = ',}', El = '",}"', Gl = function (n) { return new Quantifier(n, 1 / 0); @@ -649,29 +926,29 @@ var parser = (function () { Bl = function (n) { return new Quantifier(n, n); }, - jl = "+", + jl = '+', $l = '"+"', ql = function () { return new Quantifier(1, 1 / 0); }, - Ll = "*", + Ll = '*', Ml = '"*"', Dl = function () { return new Quantifier(0, 1 / 0); }, - Hl = "?", + Hl = '?', Ol = '"?"', Wl = function () { return new Quantifier(0, 1); }, zl = /^[0-9]/, - Il = "[0-9]", + Il = '[0-9]', Jl = function (n) { - return +n.join(""); + return +n.join(''); }, - Kl = "(", + Kl = '(', Nl = '"("', - Pl = ")", + Pl = ')', Vl = '")"', Xl = function (n) { return n; @@ -679,151 +956,151 @@ var parser = (function () { Yl = function (n) { return new CaptureGroup(n); }, - Zl = "?:", + Zl = '?:', _l = '"?:"', nu = function (n) { - return new Group("non-capture-group", n); + return new Group('non-capture-group', n); }, - lu = "?=", + lu = '?=', uu = '"?="', tu = function (n) { - return new Group("positive-lookahead", n); + return new Group('positive-lookahead', n); }, - ru = "?!", + ru = '?!', eu = '"?!"', ou = function (n) { - return new Group("negative-lookahead", n); + return new Group('negative-lookahead', n); }, - cu = "CharacterSet", - iu = "[", + cu = 'CharacterSet', + iu = '[', au = '"["', - fu = "]", + fu = ']', su = '"]"', hu = function (n, l) { return new CharSet(!!n, l); }, - du = "CharacterRange", - pu = "-", + du = 'CharacterRange', + pu = '-', vu = '"-"', wu = function (n, l) { return new CharacterRange(n, l); }, - Au = "Character", + Au = 'Character', Cu = /^[^\\\]]/, - gu = "[^\\\\\\]]", + gu = '[^\\\\\\]]', bu = function (n) { return new Literal(n); }, - ku = ".", + ku = '.', Tu = '"."', xu = function () { - return new Token("any-character"); + return new Token('any-character'); }, - yu = "Literal", + yu = 'Literal', mu = /^[^|\\\/.[()?+*$\^]/, - Ru = "[^|\\\\\\/.[()?+*$\\^]", - Fu = "\\b", + Ru = '[^|\\\\\\/.[()?+*$\\^]', + Fu = '\\b', Qu = '"\\\\b"', Su = function () { - return new Token("backspace"); + return new Token('backspace'); }, Uu = function () { - return new Token("word-boundary"); + return new Token('word-boundary'); }, - Eu = "\\B", + Eu = '\\B', Gu = '"\\\\B"', Bu = function () { - return new Token("non-word-boundary"); + return new Token('non-word-boundary'); }, - ju = "\\d", + ju = '\\d', $u = '"\\\\d"', qu = function () { - return new Token("digit"); + return new Token('digit'); }, - Lu = "\\D", + Lu = '\\D', Mu = '"\\\\D"', Du = function () { - return new Token("non-digit"); + return new Token('non-digit'); }, - Hu = "\\f", + Hu = '\\f', Ou = '"\\\\f"', Wu = function () { - return new Token("form-feed"); + return new Token('form-feed'); }, - zu = "\\n", + zu = '\\n', Iu = '"\\\\n"', Ju = function () { - return new Token("line-feed"); + return new Token('line-feed'); }, - Ku = "\\r", + Ku = '\\r', Nu = '"\\\\r"', Pu = function () { - return new Token("carriage-return"); + return new Token('carriage-return'); }, - Vu = "\\s", + Vu = '\\s', Xu = '"\\\\s"', Yu = function () { - return new Token("white-space"); + return new Token('white-space'); }, - Zu = "\\S", + Zu = '\\S', _u = '"\\\\S"', nt = function () { - return new Token("non-white-space"); + return new Token('non-white-space'); }, - lt = "\\t", + lt = '\\t', ut = '"\\\\t"', tt = function () { - return new Token("tab"); + return new Token('tab'); }, - rt = "\\v", + rt = '\\v', et = '"\\\\v"', ot = function () { - return new Token("vertical-tab"); + return new Token('vertical-tab'); }, - ct = "\\w", + ct = '\\w', it = '"\\\\w"', at = function () { - return new Token("word"); + return new Token('word'); }, - ft = "\\W", + ft = '\\W', st = '"\\\\W"', ht = function () { - return new Token("non-word"); + return new Token('non-word'); }, - dt = "\\c", + dt = '\\c', pt = '"\\\\c"', - vt = "any character", + vt = 'any character', wt = function (n) { return new ControlCharacter(n); }, - At = "\\", + At = '\\', Ct = '"\\\\"', gt = /^[1-9]/, - bt = "[1-9]", + bt = '[1-9]', kt = function (n) { return new BackReference(n); }, - Tt = "\\0", + Tt = '\\0', xt = '"\\\\0"', yt = /^[0-7]/, - mt = "[0-7]", + mt = '[0-7]', Rt = function (n) { - return new Octal(n.join("")); + return new Octal(n.join('')); }, - Ft = "\\x", + Ft = '\\x', Qt = '"\\\\x"', St = /^[0-9a-fA-F]/, - Ut = "[0-9a-fA-F]", + Ut = '[0-9a-fA-F]', Et = function (n) { - return new Hex(n.join("")); + return new Hex(n.join('')); }, - Gt = "\\u", + Gt = '\\u', Bt = '"\\\\u"', jt = function (n) { - return new Unicode(n.join("")); + return new Unicode(n.join('')); }, $t = function () { - return new Token("null-character"); + return new Token('null-character'); }, qt = 0, Lt = 0, @@ -836,12 +1113,16 @@ var parser = (function () { Ht = 0, Ot = [], Wt = 0; - if ("startRule" in el) { - if (!(el.startRule in ol)) throw new Error("Can't start parsing from rule \"" + el.startRule + '".'); + if ('startRule' in el) { + if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); cl = ol[el.startRule]; } if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw (o(Ot), (Lt = Math.max(qt, Ht)), new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)); + throw ( + (o(Ot), + (Lt = Math.max(qt, Ht)), + new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) + ); } return ( n(l, Error), diff --git a/src/mock/schema/index.js b/src/mock/schema/index.js index 4e346b5b..22cba3fa 100644 --- a/src/mock/schema/index.js +++ b/src/mock/schema/index.js @@ -1 +1 @@ -export { toJSONSchema } from "./schema.js"; +export { toJSONSchema } from './schema.js'; diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index 7c538289..eda4e5b7 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -5,26 +5,26 @@ > [JSON Schema](http://json-schema.org/) */ -import Constant from "../constant.js"; -import { type } from "../util.js"; -import { parser } from "../parser.js"; +import Constant from '../constant.js'; +import { type } from '../util.js'; +import { parser } from '../parser.js'; function toJSONSchema(template, name, path = [] /* Internal Use Only */) { // type rule properties items - var result = { - name: typeof name === "string" ? name.replace(Constant.RE_KEY, "$1") : name, + const result = { + name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, template, type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } rule: parser.parse(name), path: path.slice(0), }; - result.path.push(name === undefined ? "ROOT" : result.name); + result.path.push(name === undefined ? 'ROOT' : result.name); switch (result.type) { - case "array": + case 'array': result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); break; - case "object": + case 'object': result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); break; } diff --git a/src/mock/util.js b/src/mock/util.js index 0b97615b..a5d6bf7e 100644 --- a/src/mock/util.js +++ b/src/mock/util.js @@ -1,11 +1,11 @@ /* ## Utilities */ -export { type } from "./utils/type.js"; -export { extend } from "./utils/extend.js"; -export { isObjectOrArray, isNumeric, isString, isObject, isArray, isRegExp, isFunction } from "./utils/type.js"; -export { each } from "./utils/each.js"; -export { heredoc } from "./utils/heredoc.js"; +export { type } from './utils/type.js'; +export { extend } from './utils/extend.js'; +export { isObjectOrArray, isNumeric, isString, isObject, isArray, isRegExp, isFunction } from './utils/type.js'; +export { each } from './utils/each.js'; +export { heredoc } from './utils/heredoc.js'; export function keys(obj) { return Object.keys(obj); } diff --git a/src/mock/utils/each.js b/src/mock/utils/each.js index bec8634a..455cc19e 100644 --- a/src/mock/utils/each.js +++ b/src/mock/utils/each.js @@ -1,8 +1,10 @@ +import { type } from '../utils/type'; export function each(obj, iterator, context) { // each - var i, key; - if (type(obj) === "number") { - //表示重复几次 + let i; + let key; + if (type(obj) === 'number') { + // 表示重复几次 [...Array(obj).keys()].forEach((index) => iterator(index, index)); } else if (obj.length === +obj.length) { for (i = 0; i < obj.length; i++) { diff --git a/src/mock/utils/extend.js b/src/mock/utils/extend.js index 3a19b763..cb323eda 100644 --- a/src/mock/utils/extend.js +++ b/src/mock/utils/extend.js @@ -38,7 +38,8 @@ // return target; // } -import { assignIn } from "lodash-es"; +/* eslint-disable no-invalid-this*/ +import { assignIn } from 'lodash-es'; export function extend(...args) { return assignIn(this, ...args); } diff --git a/src/mock/utils/heredoc.js b/src/mock/utils/heredoc.js index 465b5f6c..a3e5ce3d 100644 --- a/src/mock/utils/heredoc.js +++ b/src/mock/utils/heredoc.js @@ -10,13 +10,13 @@ var tpl = Mock.heredoc(function() { /*! {{email}}{{age}} - *\/ }) - + **相关阅读** * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 */ @@ -26,8 +26,8 @@ export function heredoc(fn) { // 3. 移除起始和末尾的空格 return fn .toString() - .replace(/^[^\/]+\/\*!?/, "") - .replace(/\*\/[^\/]+$/, "") - .replace(/^[\s\xA0]+/, "") - .replace(/[\s\xA0]+$/, ""); // .trim() + .replace(/^[^\/]+\/\*!?/, '') + .replace(/\*\/[^\/]+$/, '') + .replace(/^[\s\xA0]+/, '') + .replace(/[\s\xA0]+$/, ''); // .trim() } diff --git a/src/mock/utils/type.js b/src/mock/utils/type.js index d55b09e9..f9858df7 100644 --- a/src/mock/utils/type.js +++ b/src/mock/utils/type.js @@ -1,5 +1,5 @@ // 使用 lodash 提供的方式 -import { isObject, isArray } from "lodash-es"; +import { isObject, isArray } from 'lodash-es'; export function type(obj) { return obj === null || obj === undefined ? String(obj) @@ -16,4 +16,4 @@ export function isObjectOrArray(value) { export function isNumeric(value) { return !isNaN(parseFloat(value)) && isFinite(value); } -export { isString, isObject, isArray, isRegExp, isFunction } from "lodash-es"; +export { isString, isObject, isArray, isRegExp, isFunction } from 'lodash-es'; diff --git a/src/mock/valid/index.js b/src/mock/valid/index.js index ae37d164..05c4ecb2 100644 --- a/src/mock/valid/index.js +++ b/src/mock/valid/index.js @@ -1 +1 @@ -export { valid } from "./valid.js"; +export { valid } from './valid.js'; diff --git a/src/mock/valid/valid.js b/src/mock/valid/valid.js index 200d5a6a..02f27717 100644 --- a/src/mock/valid/valid.js +++ b/src/mock/valid/valid.js @@ -1,12 +1,13 @@ +/*eslint-disable*/ /* ## valid(template, data) 校验真实数据 data 是否与数据模板 template 匹配。 - + 实现思路: 1. 解析规则。 先把数据模板 template 解析为更方便机器解析的 JSON-Schame - name 属性名 + name 属性名 type 属性值类型 template 属性值模板 properties 对象属性数组 @@ -15,19 +16,21 @@ 2. 递归验证规则。 然后用 JSON-Schema 校验真实数据,校验项包括属性名、值类型、值、值生成规则。 - 提示信息 - https://github.com/fge/json-schema-validator/blob/master/src/main/resources/com/github/fge/jsonschema/validator/validation.properties + 提示信息 + https://github.com/fge/json-schema-validator/blob/master/src + /main/resources/com/github/fge/jsonschema/validator/validation.properties + [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) */ -import Constant from "../constant.js"; -import * as Util from "../util.js"; -import { toJSONSchema } from "../schema/schema.js"; +import Constant from '../constant.js'; +import * as Util from '../util.js'; +import { toJSONSchema } from '../schema/schema.js'; function valid(template, data) { - var schema = toJSONSchema(template); - var result = Diff.diff(schema, data); - for (var i = 0; i < result.length; i++) { + const schema = toJSONSchema(template); + const result = Diff.diff(schema, data); + for (let i = 0; i < result.length; i++) { // console.log(template, data) // console.warn(Assert.message(result[i])) } @@ -53,8 +56,8 @@ function valid(template, data) { +step 整数部分 小数部分 - boolean - string + boolean + string min-max count ## properties @@ -70,9 +73,9 @@ function valid(template, data) { `'name|count': [{}, {} ...]` 检测个数,继续递归 无生成规则:检测全部的元素个数,继续递归 */ -var Diff = { +const Diff = { diff: function diff(schema, data, name /* Internal Use Only */) { - var result = []; + const result = []; // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { @@ -85,21 +88,21 @@ var Diff = { }, /* jshint unused:false */ name: function (schema, data, name, result) { - var length = result.length; + const length = result.length; - Assert.equal("name", schema.path, name + "", schema.name + "", result); + Assert.equal('name', schema.path, name + '', schema.name + '', result); return result.length === length; }, type: function (schema, data, name, result) { - var length = result.length; + const length = result.length; switch (schema.type) { - case "string": + case 'string': // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; break; - case "array": + case 'array': if (schema.rule.parameters) { // name|count: array if (schema.rule.min !== undefined && schema.rule.max === undefined) { @@ -110,103 +113,103 @@ var Diff = { if (schema.rule.parameters[2]) return true; } break; - case "function": + case 'function': // 跳过 `'name': function`,因为函数可以返回任何类型的值。 return true; } - Assert.equal("type", schema.path, Util.type(data), schema.type, result); + Assert.equal('type', schema.path, Util.type(data), schema.type, result); return result.length === length; }, value: function (schema, data, name, result) { - var length = result.length; + const length = result.length; - var rule = schema.rule; - var templateType = schema.type; - if (templateType === "object" || templateType === "array" || templateType === "function") return true; + const rule = schema.rule; + const templateType = schema.type; + if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; // 无生成规则 if (!rule.parameters) { switch (templateType) { - case "regexp": - Assert.match("value", schema.path, data, schema.template, result); + case 'regexp': + Assert.match('value', schema.path, data, schema.template, result); return result.length === length; - case "string": + case 'string': // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; break; } - Assert.equal("value", schema.path, data, schema.template, result); + Assert.equal('value', schema.path, data, schema.template, result); return result.length === length; } // 有生成规则 - var actualRepeatCount; + let actualRepeatCount; switch (templateType) { - case "number": - var parts = (data + "").split("."); + case 'number': + const parts = (data + '').split('.'); parts[0] = +parts[0]; // 整数部分 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[0], Math.min(rule.min, rule.max), result); + Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo("value", schema.path, parts[0], Math.max(rule.min, rule.max), result); + Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); } // |count if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("value", schema.path, parts[0], rule.min, result, "[value] " + name); + Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); } // 小数部分 if (rule.decimal) { // |dmin-dmax if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo("value", schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo("value", schema.path, parts[1].length, rule.dmax, result); + Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); } // |dcount if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal("value", schema.path, parts[1].length, rule.dmin, result); + Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); } } break; - case "boolean": + case 'boolean': break; - case "string": + case 'string': // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, "g")); + actualRepeatCount = data.match(new RegExp(schema.template, 'g')); actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); } // |count if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); } break; - case "regexp": - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ""), "g")); + case 'regexp': + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo("repeat count", schema.path, actualRepeatCount, rule.max, result); + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); } // |count if (rule.min !== undefined && rule.max === undefined) { - Assert.equal("repeat count", schema.path, actualRepeatCount, rule.min, result); + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); } break; } @@ -214,86 +217,98 @@ var Diff = { return result.length === length; }, properties: function (schema, data, name, result) { - var length = result.length; + const length = result.length; - var rule = schema.rule; - var keys = Util.keys(data); + const rule = schema.rule; + const keys = Util.keys(data); if (!schema.properties) return; // 无生成规则 if (!schema.rule.parameters) { - Assert.equal("properties length", schema.path, keys.length, schema.properties.length, result); + Assert.equal('properties length', schema.path, keys.length, schema.properties.length, result); } else { // 有生成规则 // |min-max if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo("properties length", schema.path, keys.length, Math.min(rule.min, rule.max), result); - Assert.lessThanOrEqualTo("properties length", schema.path, keys.length, Math.max(rule.min, rule.max), result); + Assert.greaterThanOrEqualTo( + 'properties length', + schema.path, + keys.length, + Math.min(rule.min, rule.max), + result, + ); + Assert.lessThanOrEqualTo( + 'properties length', + schema.path, + keys.length, + Math.max(rule.min, rule.max), + result, + ); } // |count if (rule.min !== undefined && rule.max === undefined) { // |1, |>1 - if (rule.count !== 1) Assert.equal("properties length", schema.path, keys.length, rule.min, result); + if (rule.count !== 1) Assert.equal('properties length', schema.path, keys.length, rule.min, result); } } if (result.length !== length) return false; - for (var i = 0; i < keys.length; i++) { + for (let i = 0; i < keys.length; i++) { result.push.apply( result, this.diff( (function () { - var property; - Util.each(schema.properties, function (item /*, index*/) { + let property; + Util.each(schema.properties, function (item /* , index*/) { if (item.name === keys[i]) property = item; }); return property || schema.properties[i]; })(), data[keys[i]], - keys[i] - ) + keys[i], + ), ); } return result.length === length; }, items: function (schema, data, name, result) { - var length = result.length; + const length = result.length; if (!schema.items) return; - var rule = schema.rule; + const rule = schema.rule; // 无生成规则 if (!schema.rule.parameters) { - Assert.equal("items length", schema.path, data.length, schema.items.length, result); + Assert.equal('items length', schema.path, data.length, schema.items.length, result); } else { // 有生成规则 // |min-max if (rule.min !== undefined && rule.max !== undefined) { Assert.greaterThanOrEqualTo( - "items", + 'items', schema.path, data.length, Math.min(rule.min, rule.max) * schema.items.length, result, - "[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements" + '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', ); Assert.lessThanOrEqualTo( - "items", + 'items', schema.path, data.length, Math.max(rule.min, rule.max) * schema.items.length, result, - "[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements" + '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', ); } // |count if (rule.min !== undefined && rule.max === undefined) { // |1, |>1 if (rule.count === 1) return result.length === length; - else Assert.equal("items length", schema.path, data.length, rule.min * schema.items.length, result); + else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); } // |+inc if (rule.parameters[2]) return result.length === length; @@ -301,8 +316,11 @@ var Diff = { if (result.length !== length) return false; - for (var i = 0; i < data.length; i++) { - result.push.apply(result, this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length)); + for (let i = 0; i < data.length; i++) { + result.push.apply( + result, + this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), + ); } return result.length === length; @@ -311,9 +329,9 @@ var Diff = { /* 完善、友好的提示信息 - + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 + 路径 验证类型 描述 Expect path.name is less than or equal to expected, but path.name is actual. @@ -321,31 +339,31 @@ var Diff = { Expect path.name is greater than or equal to expected, but path.name is actual. */ -var Assert = { +const Assert = { message: function (item) { return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace("{utype}", item.type.toUpperCase()) - .replace("{ltype}", item.type.toLowerCase()) - .replace("{path}", (Util.isArray(item.path) && item.path.join(".")) || item.path) - .replace("{action}", item.action) - .replace("{expected}", item.expected) - .replace("{actual}", item.actual); + .replace('{utype}', item.type.toUpperCase()) + .replace('{ltype}', item.type.toLowerCase()) + .replace('{path}', (Util.isArray(item.path) && item.path.join('.')) || item.path) + .replace('{action}', item.action) + .replace('{expected}', item.expected) + .replace('{actual}', item.actual); }, equal: function (type, path, actual, expected, result, message) { if (actual === expected) return true; switch (type) { - case "type": + case 'type': // 正则模板 === 字符串最终值 - if (expected === "regexp" && actual === "string") return true; + if (expected === 'regexp' && actual === 'string') return true; break; } - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "is equal to", + action: 'is equal to', message: message, }; item.message = Assert.message(item); @@ -356,12 +374,12 @@ var Assert = { match: function (type, path, actual, expected, result, message) { if (expected.test(actual)) return true; - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "matches", + action: 'matches', message: message, }; item.message = Assert.message(item); @@ -370,12 +388,12 @@ var Assert = { }, notEqual: function (type, path, actual, expected, result, message) { if (actual !== expected) return true; - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "is not equal to", + action: 'is not equal to', message: message, }; item.message = Assert.message(item); @@ -384,12 +402,12 @@ var Assert = { }, greaterThan: function (type, path, actual, expected, result, message) { if (actual > expected) return true; - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "is greater than", + action: 'is greater than', message: message, }; item.message = Assert.message(item); @@ -398,12 +416,12 @@ var Assert = { }, lessThan: function (type, path, actual, expected, result, message) { if (actual < expected) return true; - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "is less to", + action: 'is less to', message: message, }; item.message = Assert.message(item); @@ -412,12 +430,12 @@ var Assert = { }, greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { if (actual >= expected) return true; - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "is greater than or equal to", + action: 'is greater than or equal to', message: message, }; item.message = Assert.message(item); @@ -426,12 +444,12 @@ var Assert = { }, lessThanOrEqualTo: function (type, path, actual, expected, result, message) { if (actual <= expected) return true; - var item = { + const item = { path: path, type: type, actual: actual, expected: expected, - action: "is less than or equal to", + action: 'is less than or equal to', message: message, }; item.message = Assert.message(item); diff --git a/src/mock/xhr/XMLHttpRequest/constant.js b/src/mock/xhr/XMLHttpRequest/constant.js index 596683c3..e408ffa6 100644 --- a/src/mock/xhr/XMLHttpRequest/constant.js +++ b/src/mock/xhr/XMLHttpRequest/constant.js @@ -1,43 +1,43 @@ export default { - 100: "Continue", - 101: "Switching Protocols", - 200: "OK", - 201: "Created", - 202: "Accepted", - 203: "Non-Authoritative Information", - 204: "No Content", - 205: "Reset Content", - 206: "Partial Content", - 300: "Multiple Choice", - 301: "Moved Permanently", - 302: "Found", - 303: "See Other", - 304: "Not Modified", - 305: "Use Proxy", - 307: "Temporary Redirect", - 400: "Bad Request", - 401: "Unauthorized", - 402: "Payment Required", - 403: "Forbidden", - 404: "Not Found", - 405: "Method Not Allowed", - 406: "Not Acceptable", - 407: "Proxy Authentication Required", - 408: "Request Timeout", - 409: "Conflict", - 410: "Gone", - 411: "Length Required", - 412: "Precondition Failed", - 413: "Request Entity Too Large", - 414: "Request-URI Too Long", - 415: "Unsupported Media Type", - 416: "Requested Range Not Satisfiable", - 417: "Expectation Failed", - 422: "Unprocessable Entity", - 500: "Internal Server Error", - 501: "Not Implemented", - 502: "Bad Gateway", - 503: "Service Unavailable", - 504: "Gateway Timeout", - 505: "HTTP Version Not Supported", + 100: 'Continue', + 101: 'Switching Protocols', + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 300: 'Multiple Choice', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 307: 'Temporary Redirect', + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 422: 'Unprocessable Entity', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', }; diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 8ad14910..2377ab46 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -1,20 +1,19 @@ // 使用不完全覆盖的方式,使用继承方式继承所有的属性 // 只在 send 方式调用的时候对其进行数据返回 -import { array } from "../../handle/array.js"; -import { find, convert } from "../ajax-tools.js"; -import HTTP_STATUS_CODES from "./constant.js"; +import { find, convert } from '../ajax-tools.js'; +import HTTP_STATUS_CODES from './constant.js'; -let SEND = XMLHttpRequest.prototype.send; +const SEND = XMLHttpRequest.prototype.send; const OPEN = XMLHttpRequest.prototype.open; -//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 +// ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 // 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, // 也不可以在 XHR 实例上定义 // 这样的话会导致无法接收到数据 // 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 const defineGetAndSet = function (what) { - const array = ["readyState", "status", "response", "responseText", "statusText"]; + const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; Object.defineProperties( what, array.reduce((col, cur) => { @@ -27,12 +26,12 @@ const defineGetAndSet = function (what) { }, }; return col; - }, {}) + }, {}), ); }; class MockXMLHttpRequest extends XMLHttpRequest { - constructor() { - super(...arguments); + constructor(...args) { + super(...args); } _send = SEND; _open = OPEN; @@ -47,7 +46,7 @@ class MockXMLHttpRequest extends XMLHttpRequest { this.$template = find({ url: this.$url, type: this.$type }); if (this.$template) { defineGetAndSet(this); - this.dispatchEvent(new Event("loadstart")); + this.dispatchEvent(new Event('loadstart')); setTimeout(this.$done.bind(this), this.timeout || 100); return null; @@ -59,26 +58,26 @@ class MockXMLHttpRequest extends XMLHttpRequest { return this.$mock; } set mock(value) { - if (typeof value === "boolean") this.$mock = value; + if (typeof value === 'boolean') this.$mock = value; } $Mock = { // 原生属性的 getter 和 setter readyState: 0, status: 200, - response: "", - responseText: "", - statusText: "", + response: '', + responseText: '', + statusText: '', }; - $type = "get"; - $url = ""; + $type = 'get'; + $url = ''; $mock = true; $template = null; $done() { this.readyState = this.HEADERS_RECEIVED; - this.dispatchEvent(new Event("readystatechange")); + this.dispatchEvent(new Event('readystatechange')); this.readyState = this.LOADING; - this.dispatchEvent(new Event("readystatechange")); + this.dispatchEvent(new Event('readystatechange')); this.status = 200; this.statusText = HTTP_STATUS_CODES[200]; @@ -86,9 +85,9 @@ class MockXMLHttpRequest extends XMLHttpRequest { this.response = data; this.responseText = this.response; this.readyState = this.DONE; - this.dispatchEvent(new Event("readystatechange")); - this.dispatchEvent(new Event("load")); - this.dispatchEvent(new Event("loadend")); + this.dispatchEvent(new Event('readystatechange')); + this.dispatchEvent(new Event('load')); + this.dispatchEvent(new Event('loadend')); } } export { MockXMLHttpRequest }; diff --git a/src/mock/xhr/ajax-tools.js b/src/mock/xhr/ajax-tools.js index 6b0cde31..9ed0fbd5 100644 --- a/src/mock/xhr/ajax-tools.js +++ b/src/mock/xhr/ajax-tools.js @@ -1,13 +1,13 @@ -import { type as Type, isFunction } from "../util.js"; -import { gen } from "../handle/gen.js"; // 从模板生成数据 -import { _mocked } from "../_mocked.js"; +import { type as Type, isFunction } from '../util.js'; +import { gen } from '../handle/gen.js'; // 从模板生成数据 +import { _mocked } from '../_mocked.js'; // 查找与请求参数匹配的数据模板:URL,Type function find({ url, type }) { type = type.toLowerCase(); - for (var sUrlType in _mocked) { - var item = _mocked[sUrlType]; - let { rurl, rtype } = item; + for (const sUrlType in _mocked) { + const item = _mocked[sUrlType]; + const { rurl, rtype } = item; if (match(rurl, url) && match(rtype, type)) { // console.log('[mock]', url, '>', item.rurl) return item; @@ -18,9 +18,9 @@ function find({ url, type }) { function match(expected, actual) { switch (Type(expected)) { - case "string": + case 'string': return expected === actual; - case "regexp": + case 'regexp': return expected.test(actual); default: return false; diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index 86ee214e..fd049aae 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -1,36 +1,35 @@ -var realFetch = window&&window.fetch; +const realFetch = window && window.fetch; function mockFetch() { // 代理 fetch 的初始化函数 - if (window.fetch && !window.fetch.hasOwnProperty("$mock")) { + if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { window.fetch = fakeFetch; window.fetch.$mock = true; - console.warn("fetch 已经被代理"); + console.warn('fetch 已经被代理'); } } // 假的 fetch 函数 -import { _mocked } from "../../_mocked.js"; -import { find, convert } from "../ajax-tools.js"; +import { find, convert } from '../ajax-tools.js'; // 假的 Response 对象 // import fakeResponse from "./src/response.js"; -import fakeResponse from "./src/response.js"; +import fakeResponse from './src/response.js'; async function fakeFetch(url, options = {}) { if (window.fetch.$mock === true) { // 只有在 $mock 标记为 true 时才进行代理 - let result = find({ + const result = find({ url, - type: (options.method || "get").toLowerCase(), + type: (options.method || 'get').toLowerCase(), }); if (result) { const data = convert(result, {}); - console.warn("mock代理中"); + console.warn('mock代理中'); return new fakeResponse(data, options); } } - console.warn("未使用 mockjs"); + console.warn('未使用 mockjs'); return realFetch(url, options); } export { fakeFetch, mockFetch }; diff --git a/src/mock/xhr/fetch/src/INTERNALS.js b/src/mock/xhr/fetch/src/INTERNALS.js index 339aeef7..88cf2959 100644 --- a/src/mock/xhr/fetch/src/INTERNALS.js +++ b/src/mock/xhr/fetch/src/INTERNALS.js @@ -1,2 +1,2 @@ -export const BODY = Symbol("Body internals"); -export const RESPONSE = Symbol("Response internals"); +export const BODY = Symbol('Body internals'); +export const RESPONSE = Symbol('Response internals'); diff --git a/src/mock/xhr/fetch/src/body.js b/src/mock/xhr/fetch/src/body.js index 5841500d..16bfd944 100644 --- a/src/mock/xhr/fetch/src/body.js +++ b/src/mock/xhr/fetch/src/body.js @@ -4,10 +4,10 @@ * Body interface provides common methods for Request and Response */ -import { isURLSearchParameters } from "./utils/is.js"; -import { BODY as INTERNALS } from "./INTERNALS.js"; +import { isURLSearchParameters } from './utils/is.js'; +import { BODY as INTERNALS } from './INTERNALS.js'; -import { consumeBody } from "./body/consumeBody.js"; +import { consumeBody } from './body/consumeBody.js'; /** * Body mixin * @@ -75,7 +75,7 @@ export default class Body { */ async json() { const text = await this.text(); - return JSON.parse(text || "{}"); + return JSON.parse(text || '{}'); } /** diff --git a/src/mock/xhr/fetch/src/body/consumeBody.js b/src/mock/xhr/fetch/src/body/consumeBody.js index 4b930659..2e4fe00f 100644 --- a/src/mock/xhr/fetch/src/body/consumeBody.js +++ b/src/mock/xhr/fetch/src/body/consumeBody.js @@ -18,7 +18,7 @@ export async function consumeBody(data) { } if (data.body instanceof FormData) { - return new Blob([Object.fromEntries(a.entries())]); + return new Blob([Object.fromEntries(data.body.entries())]); } return data.body; } diff --git a/src/mock/xhr/fetch/src/body/exactContentType.js b/src/mock/xhr/fetch/src/body/exactContentType.js index 2d38a113..802875dc 100644 --- a/src/mock/xhr/fetch/src/body/exactContentType.js +++ b/src/mock/xhr/fetch/src/body/exactContentType.js @@ -1,4 +1,5 @@ -import { isURLSearchParameters } from "../utils/is.js"; +import { isURLSearchParameters } from '../utils/is.js'; +import { BODY as INTERNALS } from '../INTERNALS'; /** * Performs the operation "extract a `Content-Type` value from |object|" as * specified in the specification: @@ -7,7 +8,7 @@ import { isURLSearchParameters } from "../utils/is.js"; * This function assumes that instance.body is present. * * @param {any} body Any options.body input - * @returns {string | null} + * @return {string | null} */ export const extractContentType = (body, request) => { // Body is null or undefined @@ -16,13 +17,13 @@ export const extractContentType = (body, request) => { } // Body is string - if (typeof body === "string") { - return "text/plain;charset=UTF-8"; + if (typeof body === 'string') { + return 'text/plain;charset=UTF-8'; } // Body is a URLSearchParams if (isURLSearchParameters(body)) { - return "application/x-www-form-urlencoded;charset=UTF-8"; + return 'application/x-www-form-urlencoded;charset=UTF-8'; } // Body is blob @@ -35,5 +36,5 @@ export const extractContentType = (body, request) => { } // Body constructor defaults other things to string - return "text/plain;charset=UTF-8"; + return 'text/plain;charset=UTF-8'; }; diff --git a/src/mock/xhr/fetch/src/response.js b/src/mock/xhr/fetch/src/response.js index a14fd946..1df22caf 100644 --- a/src/mock/xhr/fetch/src/response.js +++ b/src/mock/xhr/fetch/src/response.js @@ -4,10 +4,10 @@ * Response class provides content decoding */ -import Body from "./body.js"; -import { extractContentType } from "./body/exactContentType.js"; -import { isRedirect } from "./utils/is-redirect.js"; -import { RESPONSE as INTERNALS } from "./INTERNALS.js"; +import Body from './body.js'; +import { extractContentType } from './body/exactContentType.js'; +import { isRedirect } from './utils/is-redirect.js'; +import { RESPONSE as INTERNALS } from './INTERNALS.js'; /** * Response class * @@ -20,17 +20,17 @@ export default class fakeResponse extends Body { super(body, options); const status = options.status != null ? options.status : 200; const headers = new Headers(options.headers); - if (body !== null && !headers.has("Content-Type")) { + if (body !== null && !headers.has('Content-Type')) { const contentType = extractContentType(body); if (contentType) { - headers.append("Content-Type", contentType); + headers.append('Content-Type', contentType); } } this[INTERNALS] = { - type: "default", + type: 'default', url: options.url, status, - statusText: options.statusText || "", + statusText: options.statusText || '', headers, counter: options.counter, }; @@ -41,7 +41,7 @@ export default class fakeResponse extends Body { } get url() { - return this[INTERNALS].url || ""; + return this[INTERNALS].url || ''; } get status() { @@ -74,8 +74,8 @@ export default class fakeResponse extends Body { */ clone() { // Don't allow cloning a used body - if (bodyUsed) { - throw new Error("cannot clone body after it is used"); + if (this.bodyUsed) { + throw new Error('cannot clone body after it is used'); } return new Response(this.body, { type: this.type, @@ -92,7 +92,7 @@ export default class fakeResponse extends Body { /** * @param {string} url The URL that the new response is to originate from. * @param {number} status An optional status code for the response (e.g., 302.) - * @returns {Response} A Response object. + * @return {Response} A Response object. */ static redirect(url, status = 302) { if (!isRedirect(status)) { @@ -108,13 +108,13 @@ export default class fakeResponse extends Body { } static error() { - const response = new Response(null, { status: 0, statusText: "" }); - response[INTERNALS].type = "error"; + const response = new Response(null, { status: 0, statusText: '' }); + response[INTERNALS].type = 'error'; return response; } get [Symbol.toStringTag]() { - return "Response"; + return 'Response'; } } diff --git a/src/mock/xhr/fetch/src/utils/is-redirect.js b/src/mock/xhr/fetch/src/utils/is-redirect.js index d1347f00..1ffb222b 100644 --- a/src/mock/xhr/fetch/src/utils/is-redirect.js +++ b/src/mock/xhr/fetch/src/utils/is-redirect.js @@ -6,6 +6,6 @@ const redirectStatus = new Set([301, 302, 303, 307, 308]); * @param {number} code - Status code * @return {boolean} */ -export const isRedirect = code => { - return redirectStatus.has(code); +export const isRedirect = (code) => { + return redirectStatus.has(code); }; diff --git a/src/mock/xhr/fetch/src/utils/is.js b/src/mock/xhr/fetch/src/utils/is.js index 7a035885..082e303f 100644 --- a/src/mock/xhr/fetch/src/utils/is.js +++ b/src/mock/xhr/fetch/src/utils/is.js @@ -7,14 +7,14 @@ */ export const isURLSearchParameters = (object) => { return ( - typeof object === "object" && - typeof object.append === "function" && - typeof object.delete === "function" && - typeof object.get === "function" && - typeof object.getAll === "function" && - typeof object.has === "function" && - typeof object.set === "function" && - typeof object.sort === "function" && - object[Symbol.toStringTag] === "URLSearchParams" // 获取类名的方式哦 + typeof object === 'object' && + typeof object.append === 'function' && + typeof object.delete === 'function' && + typeof object.get === 'function' && + typeof object.getAll === 'function' && + typeof object.has === 'function' && + typeof object.set === 'function' && + typeof object.sort === 'function' && + object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 ); }; diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index 9c96008b..a1762e51 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1,6 +1,6 @@ // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 // -import { mockFetch } from "./fetch/fetch.js"; -typeof window !== "undefined" && mockFetch(); // 浏览器直接使用即可 +import { mockFetch } from './fetch/fetch.js'; +typeof window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 -export { MockXMLHttpRequest } from "./XMLHttpRequest/xhr.js"; +export { MockXMLHttpRequest } from './XMLHttpRequest/xhr.js'; diff --git a/yarn.lock b/yarn.lock index 4139b419..fd0229fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,20 @@ # yarn lockfile v1 +"@babel/code-frame@7.12.11": + version "7.12.11" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" + integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== + dependencies: + "@babel/highlight" "^7.10.4" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" + integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== + dependencies: + "@babel/highlight" "^7.14.5" + "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" @@ -14,20 +28,25 @@ resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== -"@babel/core@^7.14.3": - version "7.14.3" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.3.tgz#5395e30405f0776067fbd9cf0884f15bfb770a38" - integrity sha512-jB5AmTKOCSJIZ72sd78ECEhuPiDMKlQdDI/4QRI6lzYATx5SSogS1oQA2AoPecRCknm30gHi2l+QVvNUu3wZAg== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.3" - "@babel/helper-compilation-targets" "^7.13.16" - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helpers" "^7.14.0" - "@babel/parser" "^7.14.3" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" +"@babel/compat-data@^7.14.5": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" + integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== + +"@babel/core@^7.14.6": + version "7.14.6" + resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" + integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-compilation-targets" "^7.14.5" + "@babel/helper-module-transforms" "^7.14.5" + "@babel/helpers" "^7.14.6" + "@babel/parser" "^7.14.6" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" @@ -35,7 +54,7 @@ semver "^6.3.0" source-map "^0.5.0" -"@babel/generator@^7.14.2", "@babel/generator@^7.14.3": +"@babel/generator@^7.14.2": version "7.14.3" resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== @@ -44,6 +63,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" + integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== + dependencies: + "@babel/types" "^7.14.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" @@ -59,7 +87,7 @@ "@babel/helper-explode-assignable-expression" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.13.16", "@babel/helper-compilation-targets@^7.14.4": +"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.4": version "7.14.4" resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== @@ -69,6 +97,16 @@ browserslist "^4.16.6" semver "^6.3.0" +"@babel/helper-compilation-targets@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" + integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== + dependencies: + "@babel/compat-data" "^7.14.5" + "@babel/helper-validator-option" "^7.14.5" + browserslist "^4.16.6" + semver "^6.3.0" + "@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": version "7.14.4" resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" @@ -119,6 +157,15 @@ "@babel/template" "^7.12.13" "@babel/types" "^7.14.2" +"@babel/helper-function-name@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" + integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== + dependencies: + "@babel/helper-get-function-arity" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-get-function-arity@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" @@ -126,6 +173,13 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-get-function-arity@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" + integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-hoist-variables@^7.13.0": version "7.13.16" resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" @@ -134,6 +188,13 @@ "@babel/traverse" "^7.13.15" "@babel/types" "^7.13.16" +"@babel/helper-hoist-variables@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" + integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-member-expression-to-functions@^7.13.12": version "7.13.12" resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" @@ -141,6 +202,13 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-member-expression-to-functions@^7.14.5": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" + integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": version "7.13.12" resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" @@ -148,6 +216,13 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-module-imports@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" + integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": version "7.14.2" resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" @@ -162,6 +237,20 @@ "@babel/traverse" "^7.14.2" "@babel/types" "^7.14.2" +"@babel/helper-module-transforms@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" + integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== + dependencies: + "@babel/helper-module-imports" "^7.14.5" + "@babel/helper-replace-supers" "^7.14.5" + "@babel/helper-simple-access" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/helper-validator-identifier" "^7.14.5" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-optimise-call-expression@^7.12.13": version "7.12.13" resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" @@ -169,6 +258,13 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-optimise-call-expression@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" + integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.13.0" resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" @@ -193,6 +289,16 @@ "@babel/traverse" "^7.14.2" "@babel/types" "^7.14.4" +"@babel/helper-replace-supers@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" + integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.14.5" + "@babel/helper-optimise-call-expression" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + "@babel/helper-simple-access@^7.13.12": version "7.13.12" resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" @@ -200,6 +306,13 @@ dependencies: "@babel/types" "^7.13.12" +"@babel/helper-simple-access@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" + integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-skip-transparent-expression-wrappers@^7.12.1": version "7.12.1" resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" @@ -214,16 +327,33 @@ dependencies: "@babel/types" "^7.12.13" +"@babel/helper-split-export-declaration@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" + integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== + dependencies: + "@babel/types" "^7.14.5" + "@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": version "7.14.0" resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== +"@babel/helper-validator-identifier@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" + integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== + "@babel/helper-validator-option@^7.12.17": version "7.12.17" resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== +"@babel/helper-validator-option@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" + integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== + "@babel/helper-wrap-function@^7.13.0": version "7.13.0" resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" @@ -234,14 +364,23 @@ "@babel/traverse" "^7.13.0" "@babel/types" "^7.13.0" -"@babel/helpers@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.0.tgz#ea9b6be9478a13d6f961dbb5f36bf75e2f3b8f62" - integrity sha512-+ufuXprtQ1D1iZTO/K9+EBRn+qPWMJjZSw/S0KlFrxCw4tkrzv9grgpDHkY9MeQTjTY8i2sp7Jep8DfU6tN9Mg== +"@babel/helpers@^7.14.6": + version "7.14.6" + resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" + integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== dependencies: - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.0" - "@babel/types" "^7.14.0" + "@babel/template" "^7.14.5" + "@babel/traverse" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" + integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + chalk "^2.0.0" + js-tokens "^4.0.0" "@babel/highlight@^7.12.13": version "7.14.0" @@ -252,11 +391,16 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.13", "@babel/parser@^7.14.2", "@babel/parser@^7.14.3": +"@babel/parser@^7.12.13", "@babel/parser@^7.14.2": version "7.14.4" resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== +"@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.7.0": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" + integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": version "7.13.12" resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" @@ -846,7 +990,16 @@ "@babel/parser" "^7.12.13" "@babel/types" "^7.12.13" -"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.0", "@babel/traverse@^7.14.2": +"@babel/template@^7.14.5": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" + integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/parser" "^7.14.5" + "@babel/types" "^7.14.5" + +"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.2": version "7.14.2" resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== @@ -860,7 +1013,22 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.0", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.4.4": +"@babel/traverse@^7.14.5", "@babel/traverse@^7.7.0": + version "7.14.7" + resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" + integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== + dependencies: + "@babel/code-frame" "^7.14.5" + "@babel/generator" "^7.14.5" + "@babel/helper-function-name" "^7.14.5" + "@babel/helper-hoist-variables" "^7.14.5" + "@babel/helper-split-export-declaration" "^7.14.5" + "@babel/parser" "^7.14.7" + "@babel/types" "^7.14.5" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.4.4": version "7.14.4" resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== @@ -868,6 +1036,29 @@ "@babel/helper-validator-identifier" "^7.14.0" to-fast-properties "^2.0.0" +"@babel/types@^7.14.5", "@babel/types@^7.7.0": + version "7.14.5" + resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" + integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== + dependencies: + "@babel/helper-validator-identifier" "^7.14.5" + to-fast-properties "^2.0.0" + +"@eslint/eslintrc@^0.4.2": + version "0.4.2" + resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" + integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== + dependencies: + ajv "^6.12.4" + debug "^4.1.1" + espree "^7.3.0" + globals "^13.9.0" + ignore "^4.0.6" + import-fresh "^3.2.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + strip-json-comments "^3.1.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -969,6 +1160,16 @@ dependencies: "@types/node" "*" +acorn-jsx@^5.3.1: + version "5.3.1" + resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" + integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + +acorn@^7.4.0: + version "7.4.1" + resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + aggregate-error@^3.0.0: version "3.1.0" resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" @@ -977,6 +1178,36 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@^6.10.0, ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.1: + version "8.6.0" + resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" + integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -984,6 +1215,13 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + anymatch@~3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" @@ -992,6 +1230,13 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + array-find-index@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -1002,6 +1247,23 @@ array-union@^2.1.0: resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +babel-eslint@^10.1.0: + version "10.1.0" + resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" + integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.7.0" + "@babel/traverse" "^7.7.0" + "@babel/types" "^7.7.0" + eslint-visitor-keys "^1.0.0" + resolve "^1.12.0" + babel-plugin-dynamic-import-node@^2.3.3: version "2.3.3" resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" @@ -1087,6 +1349,11 @@ call-bind@^1.0.0: function-bind "^1.1.1" get-intrinsic "^1.0.2" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + caniuse-lite@^1.0.30001219: version "1.0.30001236" resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" @@ -1101,6 +1368,14 @@ chalk@^2.0.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^4.0.0: + version "4.1.1" + resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" + integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chokidar@^3.5.0: version "3.5.1" resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" @@ -1128,12 +1403,19 @@ color-convert@^1.9.0, color-convert@^1.9.1: dependencies: color-name "1.1.3" +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + color-name@1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= -color-name@^1.0.0: +color-name@^1.0.0, color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== @@ -1194,13 +1476,27 @@ core-js@^3.1.3: resolved "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c" integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA== -debug@^4.1.0, debug@^4.1.1: +cross-spawn@^7.0.2: + version "7.0.3" + resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== dependencies: ms "2.1.2" +deep-is@^0.1.3: + version "0.1.3" + resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + define-properties@^1.1.3: version "1.1.3" resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -1229,11 +1525,30 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + electron-to-chromium@^1.3.723: version "1.3.750" resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz#7e5ef6f478316b0bd656af5942fe502610e97eaf" integrity sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A== +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.5: + version "2.3.6" + resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -1244,6 +1559,136 @@ escape-string-regexp@^1.0.5: resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-config-google@^0.14.0: + version "0.14.0" + resolved "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" + integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== + +eslint-config-prettier@^8.3.0: + version "8.3.0" + resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" + integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== + +eslint-plugin-prettier@^3.4.0: + version "3.4.0" + resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" + integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== + dependencies: + prettier-linter-helpers "^1.0.0" + +eslint-scope@^5.1.1: + version "5.1.1" + resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: + version "1.3.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint-visitor-keys@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== + +eslint@^7.29.0: + version "7.29.0" + resolved "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" + integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== + dependencies: + "@babel/code-frame" "7.12.11" + "@eslint/eslintrc" "^0.4.2" + ajv "^6.10.0" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.0.1" + doctrine "^3.0.0" + enquirer "^2.3.5" + escape-string-regexp "^4.0.0" + eslint-scope "^5.1.1" + eslint-utils "^2.1.0" + eslint-visitor-keys "^2.0.0" + espree "^7.3.1" + esquery "^1.4.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.1.2" + globals "^13.6.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.0.4" + natural-compare "^1.4.0" + optionator "^0.9.1" + progress "^2.0.0" + regexpp "^3.1.0" + semver "^7.2.1" + strip-ansi "^6.0.0" + strip-json-comments "^3.1.0" + table "^6.0.9" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^7.3.0, espree@^7.3.1: + version "7.3.1" + resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" + integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== + dependencies: + acorn "^7.4.0" + acorn-jsx "^5.3.1" + eslint-visitor-keys "^1.3.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" + integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" + integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + estree-walker@^0.6.1: version "0.6.1" resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" @@ -1259,6 +1704,16 @@ esutils@^2.0.2: resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-diff@^1.1.2: + version "1.2.0" + resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + fast-glob@^3.0.0, fast-glob@^3.0.3: version "3.2.5" resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" @@ -1271,6 +1726,16 @@ fast-glob@^3.0.0, fast-glob@^3.0.3: micromatch "^4.0.2" picomatch "^2.2.1" +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fastq@^1.6.0: version "1.11.0" resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -1278,6 +1743,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1285,6 +1757,19 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +flat-cache@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" + integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== + dependencies: + flatted "^3.1.0" + rimraf "^3.0.2" + +flatted@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" + integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1300,6 +1785,11 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1314,7 +1804,7 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.1" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -1338,6 +1828,13 @@ globals@^11.1.0: resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^13.6.0, globals@^13.9.0: + version "13.9.0" + resolved "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" + integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== + dependencies: + type-fest "^0.20.2" + globby@^10.0.1: version "10.0.2" resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -1379,11 +1876,29 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + ignore@^5.1.1: version "5.1.8" resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== +import-fresh@^3.0.0, import-fresh@^3.2.1: + version "3.3.0" + resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + indent-string@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" @@ -1426,7 +1941,12 @@ is-extglob@^2.1.1: resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-glob@^4.0.1, is-glob@~4.0.1: +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== @@ -1460,6 +1980,11 @@ is-reference@^1.1.2: dependencies: "@types/estree" "*" +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + jest-worker@^26.2.1: version "26.6.2" resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" @@ -1474,6 +1999,14 @@ js-tokens@^4.0.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -1484,6 +2017,21 @@ jsesc@~0.5.0: resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json5@^2.1.2: version "2.2.0" resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -1491,6 +2039,14 @@ json5@^2.1.2: dependencies: minimist "^1.2.5" +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + livereload-js@^3.3.1: version "3.3.2" resolved "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz#c88b009c6e466b15b91faa26fd7c99d620e12651" @@ -1511,16 +2067,38 @@ lodash-es@^4.17.21: resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + lodash@4.17.21, lodash@^4.17.11: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + magic-string@0.25.7, magic-string@^0.25.2, magic-string@^0.25.7: version "0.25.7" resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" @@ -1586,6 +2164,11 @@ ms@2.1.2: resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + node-releases@^1.1.71: version "1.1.73" resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" @@ -1623,6 +2206,18 @@ opener@1: resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== +optionator@^0.9.1: + version "0.9.1" + resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" + integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.3" + "opts@>= 1.2.0": version "2.0.2" resolved "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz#a17e189fbbfee171da559edd8a42423bc5993ce1" @@ -1640,11 +2235,23 @@ package-name-regex@2.0.1: resolved "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.1.tgz#69e5e5412a7d5367d3cb965da6c4e480e5e9ffa4" integrity sha512-U+K6/cuwHwr/8pUQrpNpKOIFSdS/EluTRSmtn92mug1UiPcff4t9AHs36e2xXJtpEtRfbg+JOj3Y/GLX+mzT6w== +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.6: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -1660,6 +2267,33 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^2.3.2: + version "2.3.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -1703,6 +2337,11 @@ regenerator-transform@^0.14.2: dependencies: "@babel/runtime" "^7.8.4" +regexpp@^3.1.0: + version "3.2.0" + resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== + regexpu-core@^4.7.1: version "4.7.1" resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" @@ -1727,7 +2366,17 @@ regjsparser@^0.6.4: dependencies: jsesc "~0.5.0" -resolve@^1.11.0, resolve@^1.11.1, resolve@^1.14.2: +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.14.2: version "1.20.0" resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -1740,7 +2389,7 @@ reusify@^1.0.4: resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0: +rimraf@^3.0.0, rimraf@^3.0.2: version "3.0.2" resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -1874,6 +2523,13 @@ semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^7.2.1: + version "7.3.5" + resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" + integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -1881,6 +2537,18 @@ serialize-javascript@^4.0.0: dependencies: randombytes "^2.1.0" +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" @@ -1893,6 +2561,15 @@ slash@^3.0.0: resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + source-map-support@~0.5.19: version "0.5.19" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -1969,6 +2646,32 @@ spdx-satisfies@5.0.1: spdx-expression-parse "^3.0.0" spdx-ranges "^2.0.0" +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +string-width@^4.2.0: + version "4.2.2" + resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" + integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -1976,13 +2679,25 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.2.0" resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" +table@^6.0.9: + version "6.7.1" + resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== + dependencies: + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.0" + strip-ansi "^6.0.0" + terser@^5.0.0: version "5.7.0" resolved "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" @@ -1992,6 +2707,11 @@ terser@^5.0.0: source-map "~0.7.2" source-map-support "~0.5.19" +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -2004,6 +2724,18 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -2027,11 +2759,35 @@ unicode-property-aliases-ecmascript@^1.0.4: resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + uuid@^8.3.2: version "8.3.2" resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== +v8-compile-cache@^2.0.3: + version "2.3.0" + resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" + integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.3: + version "1.2.3" + resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wrappy@1: version "1.0.2" resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -2041,3 +2797,8 @@ ws@^7.4.3: version "7.4.6" resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 98ade7cdda72a611ab305f88c8b41b5354305467 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 18:56:43 +0800 Subject: [PATCH 34/65] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=8B=B1?= =?UTF-8?q?=E6=96=87=E5=8F=A5=E5=AD=90=E6=B2=A1=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 15457 +++++++++++++++++++++++++++++- dist/mock.cjs.js | 15 +- dist/mock.esm.js | 15 +- dist/mock.js | 15398 +++++++++++++++++++++++++++++ src/mock.js | 2 +- src/mock/XHR.js | 2 +- src/mock/mock.js | 4 +- src/mock/random/text/text_en.js | 2 +- test/index.html | 6 +- 9 files changed, 30806 insertions(+), 95 deletions(-) create mode 100644 dist/mock.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 394d7138..ff7e908a 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,64 +1,15403 @@ -/** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++J>=800)return arguments[0]}else J=0;return W.apply(void 0,arguments)}),X=/^(?:0|[1-9]\d*)$/;function Z(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&X.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ue(e){return null!=e&&oe(e.length)&&!T(e)}function le(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?ue(t)&&Z(n,t.length):"string"==r&&n in t)&&ee(t[n],e)}var ie=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ie)}function he(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=qe.length>3&&"function"==typeof a?(r--,a):void 0,o&&le(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function rn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Fe(e))}var an=Ce&&Ce.isRegExp,on=an?we(an):function(e){return f(e)&&"[object RegExp]"==s(e)},un=Math.floor,ln=Math.random;function cn(e,n){return e+un(ln()*(n-e+1))}var hn=parseFloat,sn=Math.min,fn=Math.random;function mn(e,n,t){if(t&&"boolean"!=typeof t&&le(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=O(e),void 0===n?(n=e,e=0):n=O(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=fn();return sn(e+a*(n-e+hn("1e-"+((a+"").length-1))),n)}return cn(e,n)}var dn=Math.ceil,pn=Math.max;var bn,xn=function(e,n,t){return t&&"number"!=typeof t&&le(e,n,t)&&(n=t=void 0),e=O(e),void 0===n?(n=e,e=0):n=O(n),function(e,n,t,r){for(var a=-1,o=pn(dn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=On,a=Sn(e,On);e-=On;for(var o=he(a,n="function"==typeof(t=n)?t:R);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=mn(t,r,!1);return parseFloat(mn(e,n,!0).toFixed(a))},Bn=function(e,n,t=!1){ -//! cur:boolean 是划分概率的一个启动符号 -return t?mn(0,e+n)>e?!t:t:mn(10,-10)>0},Un={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Un.alpha=Un.lower+Un.upper,Un.default=Un.lower+Un.upper+Un.number+Un.symbol;const Gn=function(e="default"){return Un.hasOwnProperty(e.toLocaleLowerCase())&&(e=Un[e.toLowerCase()]),yn(e)},Wn=function(...e){var n,t,r,a;switch(e.length){case 0:n=Nn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=Nn(r,a));break;case 3:[t,r,a]=e,n=Nn(r,a)}return Rn(n,(()=>Gn(t))).join("")};function Jn(e,n){return e(n={exports:{}},n.exports),n.exports}var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Jn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Vn=Jn((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Kn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Yn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Yn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Yn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Yn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Vn.to,Vn.get;var Xn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Zn=Jn((function(e){var n={};for(var t in Xn)Xn.hasOwnProperty(t)&&(n[Xn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Xn)if(Xn.hasOwnProperty(l)){var i=Xn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Qn(e){var n=function(){for(var e={},n=Object.keys(Zn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var rt=tt,at=[].slice,ot=["keyword","gray","hex"],ut={};Object.keys(rt).forEach((function(e){ut[at.call(rt[e].labels).sort().join("")]=e}));var lt={};function it(e,n){if(!(this instanceof it))return new it(e,n);if(n&&n in ot&&(n=null),n&&!(n in rt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof it)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Vn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=rt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=rt[this.model].channels;var o=at.call(e,0,r);this.color=ft(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ut))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ut[l];var i=rt[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return it.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return it.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(rt).forEach((function(e){if(-1===ot.indexOf(e)){var n=rt[e].channels;it.prototype[e]=function(){if(this.model===e)return new it(this);if(arguments.length)return new it(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new it(st(rt[this.model][e].raw(this.color)).concat(t),e)},it[e]=function(t){return"number"==typeof t&&(t=ft(at.call(arguments),n)),new it(t,e)}}}));var mt=it,dt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const pt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,Mn(e,a);case 2:return[t,r]=n,Mn(e,mn(t,r))}},bt=function(e,n,t){let r=En(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},xt={},gt=function(...e){1===e.length&&(e=e[0]);var n=gt.options.context.templatePath.join("."),t=xt[n]=xt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var vt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function wt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),mt.hsv(360*yt,100*e,100*n)}function kt(){return wt().hex()}var At={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:Mt,lastName:Ct,cfirstName:jt,clastName:Et}=At;function Ot(){var e=Mt.male.concat();return pt(e)}function St(){return pt(Ct)}function Rt(){return pt(jt)}function Tt(){return pt(Et)}var Ft,_t=new Uint8Array(16);function Dt(){if(!Ft&&!(Ft="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ft(_t)}var qt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&qt.test(e)}for(var Pt=[],zt=0;zt<256;++zt)Pt.push((zt+256).toString(16).substr(1));function Lt(e,n,t){var r=(e=e||{}).random||(e.rng||Dt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Pt[e[n+0]]+Pt[e[n+1]]+Pt[e[n+2]]+Pt[e[n+3]]+"-"+Pt[e[n+4]]+Pt[e[n+5]]+"-"+Pt[e[n+6]]+Pt[e[n+7]]+"-"+Pt[e[n+8]]+Pt[e[n+9]]+"-"+Pt[e[n+10]]+Pt[e[n+11]]+Pt[e[n+12]]+Pt[e[n+13]]+Pt[e[n+14]]+Pt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Ht={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Nt=Object.keys(Ht),It=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Ht).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Nt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Bt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ut=new RegExp(`(${Object.keys(Bt).join("|")})`,"g");function Gt(e="yyyy-MM-dd"){return Wt(Jt(),e)}function Wt(e,n){return n.replace(Ut,(function n(t,r){let a=Bt[r];return"function"==typeof a?a(e):a in Bt?n(t,a):e[a]()}))}function Jt(e=new Date(0),n=new Date){return new Date(Hn(e.getTime(),n.getTime()))}let Kt=0;const Yt=function(e){return Kt+=+e||1},Vt=Yt;function Xt(e=12,n=18){return nn(Rn(mn(e,n),(()=>Zt())).join(""))+"."}function Zt(e=3,n=10){return Rn(mn(e,n),(()=>Gn("lower"))).join("")}function Qt(e=12,n=18){return Rn(mn(e,n),(()=>er())).join("")+"。"}function er(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Nn(n,t));break;case 3:[a,n,t]=e,r=Nn(n,t)}return Mn(a,r).join("")}const nr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),tr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function rr(){return pt(nr)}function ar(e){return`${Zt()}.${e||or()}`}function or(){return pt(tr)}var ur={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},lr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:ir,_screenSize:cr,_videoSize:hr}=ur;const sr=Object.keys(lr);function fr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=pt(ir)),r=(r||kt()).replace(/^#/,""),t=(t||kt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var mr=["东北","华北","华东","华中","华南","西南","西北"];function dr(e){let n;switch(Tn(e)){case"array":n=e;default:n=[e]}return n}var pr=Object.freeze({__proto__:null,integer:Hn,isNumber:zn,random:mn,natural:Nn,int:Hn,float:In,boolean:Bn,bool:Bn,character:Gn,char:Gn,string:Wn,str:Wn,range:xn,color:function(e){return e||dt[e]?dt[e].nicer:pt(vt).hex},hex:kt,rgb:function(){return wt().hsv().string()},rgba:function(){return wt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return wt().hsl().string()},_goldenRatioColor:wt,first:Ot,last:St,name:function(e){return e=e?` ${Ot()} `:" ",`${Ot()}${e}${St()}`},cfirst:Rt,clast:Tt,cname:function(){return Rt()+Tt()},capitalize:nn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:pt,shuffle:bt,order:gt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return Lt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Lt,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=pt(It).id+Gt("yyyyMMdd")+Wn("number",3);for(var r=0;rXt())).join("\n")},word:Zt,sentence:Xt,title:function(e=3,n=7){return Rn(mn(e,n),(()=>nn(Zt()))).join("")},ctitle:function(e=3,n=7){return Rn(mn(e,n),(()=>er())).join("")},csentence:Qt,cparagraph:function(e=3,n=7){return Rn(mn(e,n),(()=>Qt())).join("\n")},cword:er,protocol:rr,domain:ar,tld:or,email:function(e){return`${Gn("lower")}.${Zt()}@${e||Zt()+"."+or()}`},ip:function(){return[...Array(4)].map((()=>Nn(0,255))).join(".")},url:function(e,n){return`${e||rr()}://${n||ar()}/${Zt()}`},_patternLetters:Bt,_rformat:Ut,_formatDate:Wt,_randomDate:Jt,time:function(e="HH:mm:ss"){return Gt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Gt(e)},date:Gt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Wt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Jt(e,n).getTime():Jt().getTime()},_adSize:ir,_screenSize:cr,_videoSize:hr,image:fr,img:fr,_brandColors:lr,_brandNames:sr,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=pt(ir)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=lr[pt(sr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return pt(mr)},province:function(){return pt(It).name},city:function(e){var n=pt(It),t=pt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=pt(It),t=pt(n.children),r=pt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=Nn(0,9);return n},genFile:function(e){return new File(dr(e),Zt())},genBlob:function(){return new Blob(dr(anyData))}}),br={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function xr(e=""){"string"!=typeof e&&(e+="");var n=e.match(br.RE_KEY),t=n&&n[3]&&n[3].match(br.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Hn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(br.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Hn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function gr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=pt(oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=oa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(oa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(oa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function vr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Bn(n,e,r):r}function yr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function wr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=In(n,t,r,a)})):u=n&&!a[2]?t:o,u}function kr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=bt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(br.RE_KEY,"$1");l[t]=oa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(br.RE_KEY);i&&i[2]&&"number"===Tn(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function Ar(e){this.type=e,this.offset=Ar.offset(),this.text=Ar.text()}function Mr(e,n){Ar.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){Ar.call(this,"match"),this.body=e.filter(Boolean)}function jr(e,n){Ar.call(this,e),this.body=n}function Er(e){jr.call(this,"capture-group"),this.index=Hr[this.offset]||(Hr[this.offset]=Lr++),this.body=e}function Or(e,n){Ar.call(this,"quantified"),this.body=e,this.quantifier=n}function Sr(e,n){Ar.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Rr(e,n){Ar.call(this,"charset"),this.invert=e,this.body=n}function Tr(e,n){Ar.call(this,"range"),this.start=e,this.end=n}function Fr(e){Ar.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function _r(e){Ar.call(this,"unicode"),this.code=e.toUpperCase()}function Dr(e){Ar.call(this,"hex"),this.code=e.toUpperCase()}function qr(e){Ar.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){Ar.call(this,"back-reference"),this.code=e.toUpperCase()}function Pr(e){Ar.call(this,"control-character"),this.code=e.toUpperCase()}var zr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t){if(r=[],Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new Mr(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new Ar("start")},xe="$",ge='"$"',ve=function(){return new Ar("end")},ye=function(e,n){return new Or(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ce=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Sr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Sr(e,1/0)},_e=function(e){return new Sr(e,e)},De="+",qe='"+"',$e=function(){return new Sr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Sr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Sr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Er(e)},Ze="?:",Qe='"?:"',en=function(e){return new jr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new jr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new jr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Rr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Tr(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Fr(e)},kn=".",An='"."',Mn=function(){return new Ar("any-character")},Cn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new Ar("backspace")},Tn=function(){return new Ar("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new Ar("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new Ar("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new Ar("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new Ar("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new Ar("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new Ar("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new Ar("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new Ar("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new Ar("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new Ar("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new Ar("word")},st="\\W",ft='"\\\\W"',mt=function(){return new Ar("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Pr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Mt='"\\\\0"',Ct=/^[0-7]/,jt="[0-7]",Et=function(e){return new qr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Dr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new _r(e.join(""))},$t=function(){return new Ar("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(Ar.offset=r,Ar.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Nr.gen=function(e,n,t){return t=t||{guid:1},Nr[e.type]?Nr[e.type](e,n,t):Nr.token(e,n,t)},Nr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Gn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return pt(Ur.split(""));case"non-digit":return pt((Ir+Br+Gr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return pt(Jr.split(""));case"non-white-space":return pt((Ir+Br+Ur).split(""));case"tab":case"vertical-tab":break;case"word":return pt((Ir+Br+Ur).split(""));case"non-word":return pt(Gr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Bn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Qr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Zr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=oa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in pr)&&!(u in pr))return e;o=o?o.split(/\s*,\s*/).map((e=>(br.RE_PLACEHOLDER.exec(""),br.RE_PLACEHOLDER.test(e)?na(e,n,t,r):e))):[];var i=pr[a]||pr[u];switch(Tn(i)){case"array":return pt(i);case"function":i.options=r;var c=i.apply(pr,o)||"";return delete i.options,c}}function ta(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(br.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=na(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Fn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Wn(t):o;return u}var ra=Object.freeze({__proto__:null,array:gr,boolean:vr,function:yr,number:wr,object:kr,regexp:Xr,string:ta});let aa=1;function oa(e,n="",t={}){var r={path:t.path||[aa],templatePath:t.templatePath||[aa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Tn(e);let o=ra[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(br.RE_KEY,"$1"):n,rule:xr(n),context:r}),r.root||(r.root=u),u):e}var ua={gen:oa,extend:_n};function la(e,n,t=[]){var r={name:"string"==typeof n?n.replace(br.RE_KEY,"$1"):n,template:e,type:Tn(e),rule:xr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>la(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>la(e,n,r.path)))}return r}function ia(e,n){for(var t=la(e),r=ca.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:na,getValueByKeyPath:Zr,normalizePath:Qr,splitPathToArray:ea});var ca={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return ha.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(br.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ha.equal("type",e.path,Tn(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return ha.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(br.RE_PLACEHOLDER))return r.length===o}return ha.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),ha.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&ha.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(ha.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),ha.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&ha.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(ha.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),ha.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&ha.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ha.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ha.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ha.equal("properties length",e.path,u.length,o.min,r)):ha.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ha.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ha.message(u),a.push(u),!1}};ia.Diff=ca,ia.Assert=ha;const sa={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function fa({url:e,type:n}){for(var t in n=n.toLowerCase(),sa){var r=sa[t];let{rurl:a,rtype:o}=r;if(ma(a,e)&&ma(o,n))return r}return!1}function ma(e,n){switch(Tn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function da({template:e},n){return T(e)?e(n):oa(e)}const pa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ba=Symbol("Body internals"),xa=Symbol("Response internals");async function ga(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class va{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):pa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ba]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ba].body}get bodyUsed(){return this[ba].disturbed}async arrayBuffer(){return(await ga(this[ba])).arrayBuffer()}async blob(){return ga(this[ba])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await ga(this[ba])).text()}}Object.defineProperties(va.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]);class wa extends va{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":pa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[xa]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[xa].type}get url(){return this[xa].url||""}get status(){return this[xa].status}get ok(){return this[xa].status>=200&&this[xa].status<300}get redirected(){return this[xa].counter>0}get statusText(){return this[xa].statusText}get headers(){return this[xa].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[xa].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var ka=window&&window.fetch;async function Aa(e,n={}){if(!0===window.fetch.$mock){let t=fa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=da(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),ka(e,n)}var Ma="OK";let Ca=XMLHttpRequest.prototype.send;const ja=XMLHttpRequest.prototype.open; -//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class Ea extends XMLHttpRequest{constructor(){super(...arguments)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=fa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=da(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Oa;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=Aa,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Oa=Ea) -/*! + +(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); +var Mock = (function () { + 'use strict'; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Built-in value references. */ + var Symbol$1 = root.Symbol; + + /** Used for built-in method references. */ + var objectProto$8 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString$1 = objectProto$8.toString; + + /** Built-in value references. */ + var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto$7 = Object.prototype; + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto$7.toString; + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** `Object#toString` result references. */ + var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + + /** Built-in value references. */ + var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** `Object#toString` result references. */ + var symbolTag = '[object Symbol]'; + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** Used as references for various `Number` constants. */ + var INFINITY$1 = 1 / 0; + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; + } + + /** Used to match a single whitespace character. */ + var reWhitespace = /\s/; + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ + function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; + } + + /** Used to match leading whitespace. */ + var reTrimStart = /^\s+/; + + /** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ + function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** Used as references for various `Number` constants. */ + var NAN = 0 / 0; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Built-in method references without a dependency on `root`. */ + var freeParseInt = parseInt; + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** `Object#toString` result references. */ + var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** Used for built-in method references. */ + var funcProto$1 = Function.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString$1 = funcProto$1.toString; + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; + } + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used for built-in method references. */ + var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeNow = Date.now; + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function() { + return value; + }; + } + + var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} + }()); + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); + }; + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$2 = 9007199254740991; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$2 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** Used for built-in method references. */ + var objectProto$5 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMax$1 = Math.max; + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax$1(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER$1 = 9007199254740991; + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; + } + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** Used for built-in method references. */ + var objectProto$4 = Object.prototype; + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** `Object#toString` result references. */ + var argsTag$1 = '[object Arguments]'; + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; + } + + /** Used for built-in method references. */ + var objectProto$3 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + + /** Built-in value references. */ + var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); + }; + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + /** Detect free variable `exports`. */ + var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + + /** Built-in value references. */ + var Buffer = moduleExports$1 ? root.Buffer : undefined; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = + typedArrayTags[setTag] = typedArrayTags[stringTag$1] = + typedArrayTags[weakMapTag] = false; + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function(value) { + return func(value); + }; + } + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} + }()); + + /* Node.js helper references. */ + var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** Used for built-in method references. */ + var objectProto$2 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeKeys = overArg(Object.keys, Object); + + /** Used for built-in method references. */ + var objectProto$1 = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** Used for built-in method references. */ + var objectProto = Object.prototype; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); + }); + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsZWJ$1 = '\\u200d'; + + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ + function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; + } + + /** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ + var upperFirst = createCaseFirst('toUpperCase'); + + /** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ + function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** `Object#toString` result references. */ + var stringTag = '[object String]'; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); + } + + /** `Object#toString` result references. */ + var regexpTag = '[object RegExp]'; + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /* Node.js helper references. */ + var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeFloor = Math.floor, + nativeRandom$1 = Math.random; + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); + } + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin$1 = Math.min, + nativeRandom = Math.random; + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin$1(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeMax = Math.max; + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + var range = createRange(); + + /** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ + function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; + } + + /** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ + function baseSample(collection) { + return arraySample(values$1(collection)); + } + + /** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ + function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); + } + + /** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ + function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; + } + + /** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); + } + + /** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ + function baseSampleSize(collection, n) { + var array = values$1(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); + } + + /** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ + function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); + } + + /** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); + } + + /** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ + function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); + } + + /** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ + function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); + } + + /** Used as references for various `Number` constants. */ + var MAX_SAFE_INTEGER = 9007199254740991; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeMin = Math.min; + + /** + * Invokes the iteratee `n` times, returning an array of the results of + * each invocation. The iteratee is invoked with one argument; (index). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of results. + * @example + * + * _.times(3, String); + * // => ['0', '1', '2'] + * + * _.times(4, _.constant(0)); + * // => [0, 0, 0, 0] + */ + function times(n, iteratee) { + n = toInteger(n); + if (n < 1 || n > MAX_SAFE_INTEGER) { + return []; + } + var index = MAX_ARRAY_LENGTH, + length = nativeMin(n, MAX_ARRAY_LENGTH); + + iteratee = castFunction(iteratee); + n -= MAX_ARRAY_LENGTH; + + var result = baseTimes(length, iteratee); + while (++index < n) { + iteratee(index); + } + return result; + } + + // 使用 lodash 提供的方式 + function type(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); + } + + function isObjectOrArray(value) { + return isObject(value) || isArray(value); + } + + function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); + } + + // import { isObject, isArray } from "./type.js"; + function extend(...args) { + return assignIn(this, ...args); + } + + function each(obj, iterator, context) { + // each + let i; + let key; + if (type(obj) === 'number') { + // 表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } + } + + /* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 + */ + function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, '') + .replace(/\*\/[^\/]+$/, '') + .replace(/^[\s\xA0]+/, '') + .replace(/[\s\xA0]+$/, ''); // .trim() + } + + /* + ## Utilities + */ + function keys(obj) { + return Object.keys(obj); + } + function values(obj) { + return Object.values(obj); + } + function noop() {} + + var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc + }); + + const isNumber = function (el) { + return typeof el === 'number' && !isNaN(el); + }; + const numberGate = function (input) { + if (isNumber(input)) return input; + const res = parseInt(input); + return isNumber(res) ? res : undefined; + }; + // 返回一个随机的整数。 + const integer = function (min, max) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + return random(min, max, false); + }; + const natural = function (min, max) { + return Math.abs(integer(min, max)); + }; + + const float = function (min, max, dmin, dmax) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + dmin = numberGate(dmin) || 1; + dmax = numberGate(dmax) || 17; + if (dmin < 1) dmin = 1; + if (dmax > 17) dmax = 17; + const dcount = random(dmin, dmax, false); + return parseFloat(random(min, max, true).toFixed(dcount)); + }; + + const boolean$1 = function (min, max, cur = false) { + // ! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; + }; + + const pools = { + lower: 'abcdefghijklmnopqrstuvwxyz', + upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + number: '0123456789', + symbol: '!@#$%^&*()[]', + }; + pools.alpha = pools.lower + pools.upper; + pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + + const character = function (pool = 'default') { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return sample(pool); + }; + + const string$1 = function (...args) { + let len; + let pool; + let min; + let max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof args[0] === 'string') { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return times(len, () => character(pool)).join(''); + }; + + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; + } + + var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + + var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); + }; + + var simpleSwizzle = createCommonjsModule(function (module) { + + + + var concat = Array.prototype.concat; + var slice = Array.prototype.slice; + + var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; + }; + + swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; + }; + }); + + var colorString = createCommonjsModule(function (module) { + /* MIT license */ + + + + var reverseNames = {}; + + // create a list of reverse color names + for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } + } + + var cs = module.exports = { + to: {}, + get: {} + }; + + cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; + }; + + cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; + }; + + cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; + }; + + cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; + }; + + cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); + }; + + cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; + }; + + cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; + }; + + cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; + }; + + // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax + // (hwb have alpha optional & 1 is default value) + cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; + }; + + cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; + }; + + // helpers + function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); + } + + function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; + } + }); + colorString.to; + colorString.get; + + var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] + }; + + var conversions = createCommonjsModule(function (module) { + /* MIT license */ + + + // NOTE: conversions should only return primitive values (i.e. arrays, or + // values that give correct `typeof` results). + // do not use box values types (i.e. Number(), String(), etc.) + + var reverseKeywords = {}; + for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } + } + + var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} + }; + + // hide .channels and .labels properties + for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } + } + + convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; + }; + + convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; + }; + + convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; + }; + + convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; + }; + + /** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ + function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); + } + + convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; + }; + + convert.keyword.rgb = function (keyword) { + return colorName[keyword]; + }; + + convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; + }; + + convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; + }; + + convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; + }; + + convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } + }; + + convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; + }; + + // http://dev.w3.org/csswg/css-color/#hwb-to-rgb + convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; + }; + + convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; + }; + + convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; + }; + + convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; + }; + + convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; + }; + + convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; + }; + + convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; + }; + + convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); + }; + + convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; + }; + + convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; + }; + + convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; + }; + + convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; + }; + + convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; + }; + + convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; + }; + + convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; + }; + + convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; + }; + + convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; + }; + + convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; + }; + + convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; + }; + + convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; + }; + + convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; + }; + + convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; + }; + + convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; + }; + + convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; + }; + + convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; + }; + + convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; + }; + + convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; + }; + + convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; + }; + + convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; + }; + }); + conversions.rgb; + conversions.hsl; + conversions.hsv; + conversions.hwb; + conversions.cmyk; + conversions.xyz; + conversions.lab; + conversions.lch; + conversions.hex; + conversions.keyword; + conversions.ansi16; + conversions.ansi256; + conversions.hcg; + conversions.apple; + conversions.gray; + + /* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. + */ + + function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; + } + + // https://en.wikipedia.org/wiki/Breadth-first_search + function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; + } + + function link(from, to) { + return function (args) { + return to(from(args)); + }; + } + + function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; + } + + var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; + }; + + var convert$1 = {}; + + var models = Object.keys(conversions); + + function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; + } + + models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); + }); + + var colorConvert = convert$1; + + var _slice = [].slice; + + var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' + ]; + + var hashedModelKeys = {}; + Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; + }); + + var limiters = {}; + + function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } + } + + Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } + }; + + // model conversion methods and static constructors + Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } + + var channels = colorConvert[model].channels; + + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } + + if (arguments.length) { + return new Color(arguments, model); + } + + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; + }); + + function roundTo(num, places) { + return Number(num.toFixed(places)); + } + + function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; + } + + function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; + } + + function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; + } + + function assertArray(val) { + return Array.isArray(val) ? val : [val]; + } + + function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; + } + + var color$1 = Color; + + /* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) + */ + var DICT$1 = { + // name value nicer + navy: { + value: '#000080', + nicer: '#001F3F', + }, + blue: { + value: '#0000ff', + nicer: '#0074D9', + }, + aqua: { + value: '#00ffff', + nicer: '#7FDBFF', + }, + teal: { + value: '#008080', + nicer: '#39CCCC', + }, + olive: { + value: '#008000', + nicer: '#3D9970', + }, + green: { + value: '#008000', + nicer: '#2ECC40', + }, + lime: { + value: '#00ff00', + nicer: '#01FF70', + }, + yellow: { + value: '#ffff00', + nicer: '#FFDC00', + }, + orange: { + value: '#ffa500', + nicer: '#FF851B', + }, + red: { + value: '#ff0000', + nicer: '#FF4136', + }, + maroon: { + value: '#800000', + nicer: '#85144B', + }, + fuchsia: { + value: '#ff00ff', + nicer: '#F012BE', + }, + purple: { + value: '#800080', + nicer: '#B10DC9', + }, + silver: { + value: '#c0c0c0', + nicer: '#DDDDDD', + }, + gray: { + value: '#808080', + nicer: '#AAAAAA', + }, + black: { + value: '#000000', + nicer: '#111111', + }, + white: { + value: '#FFFFFF', + nicer: '#FFFFFF', + }, + }; + + /* + ## Helpers + */ + + const upper = function (str) { + return (str + '').toUpperCase(); + }; + + const lower = function (str) { + return (str + '').toLowerCase(); + }; + + // 从数组中随机选取一个元素,并返回。 + // 更改 pick 函数 , 函数不进行重载 + const pick = function (arr, ...args) { + let min; + let max; + let count; + switch (args.length) { + case 0: + return sample(arr); + case 1: + [count] = args; + return sampleSize(arr, count); + case 2: + [min, max] = args; + return sampleSize(arr, random(min, max)); + } + }; + /* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. + */ + const shuffle = function (arr, min, max) { + const result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(min, max); + } + }; + /* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ + const Cache = {}; + const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + const options = order.options; + const templatePath = options.context.templatePath.join('.'); + + const cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; + }; + + var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } + ]; + + /* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() + */ + + let _hue; + function _goldenRatioColor(saturation, value) { + const _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== 'number') saturation = 0.5; + if (typeof value !== 'number') value = 0.95; + + return color$1.hsv(_hue * 360, saturation * 100, value * 100); + } + + // 中国色 数据来自于 http://zhongguose.com + + // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 + function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return pick(RandomColor).hex; + } + + // #DAC0DE + function hex() { + const hsv = _goldenRatioColor(); + return hsv.hex(); + } + + // rgb(128,255,255) + function rgb() { + const hsv = _goldenRatioColor(); + return hsv.hsv().string(); + } + // rgba(128,255,255,0.3) + function rgba() { + const hsv = _goldenRatioColor(); + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); + } + + // hsl(300,80%,90%) + function hsl() { + const hsv = _goldenRatioColor(); + return hsv.hsl().string(); + } + + var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] + }; + var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" + ]; + var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" + ]; + var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" + ]; + var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 + }; + + /* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) + */ + const { firstName, lastName, cfirstName, clastName } = Name; + + // 随机生成一个常见的英文名。 + function first() { + const names = firstName.male.concat(); + return pick(names); + } + + // 随机生成一个常见的英文姓。 + function last() { + return pick(lastName); + } + + // 随机生成一个常见的英文姓名。 + function name(middle) { + middle = middle ? ` ${first()} ` : ' '; + return `${first()}${middle}${last()}`; + } + + /* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) + */ + function cfirst() { + return pick(cfirstName); + } /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) + */ + function clast() { + return pick(clastName); + } + // 随机生成一个常见的中文姓名。 + function cname() { + return cfirst() + clast(); + } + + // Unique ID creation requires a high quality random # generator. In the browser we therefore + // require the crypto API and do not support built-in fallback to lower quality random number + // generators (like Math.random()). + var getRandomValues; + var rnds8 = new Uint8Array(16); + function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); + } + + var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; + + function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); + } + + /** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + + var byteToHex = []; + + for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); + } + + function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; + } + + function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); + } + + var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" + }; + + /* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 + */ + + // id pid/parentId name children + + // 将扁平数组转化为树状 + function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + const { mapped, result } = all; + const { id, pid } = item; + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 + result.push(item); + return { mapped, result }; + } + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { + // 父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + }, + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; + } + const ids = Object.keys(DICT); + + // 转化数组内对象的表现形式 + const fixed = Object.entries(DICT).map(([id, value]) => { + let pid = + id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; + if (!ids.includes(pid)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + '0000'; + } + return { + id, + pid, + name: value, + }; + }); + + const DICT_FIXED = createTree(fixed); + + var _patternLetters = { + yyyy: 'getFullYear', + yy: function (date) { + return ('' + date.getFullYear()).slice(2); + }, + y: 'yy', + + MM: function (date) { + const m = date.getMonth() + 1; + return m < 10 ? '0' + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + const d = date.getDate(); + return d < 10 ? '0' + d : d; + }, + d: 'getDate', + + HH: function (date) { + const h = date.getHours(); + return h < 10 ? '0' + h : h; + }, + H: 'getHours', + hh: function (date) { + const h = date.getHours() % 12; + return h < 10 ? '0' + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + const m = date.getMinutes(); + return m < 10 ? '0' + m : m; + }, + m: 'getMinutes', + + ss: function (date) { + const s = date.getSeconds(); + return s < 10 ? '0' + s : s; + }, + s: 'getSeconds', + + SS: function (date) { + const ms = date.getMilliseconds(); + return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; + }, + S: 'getMilliseconds', + + A: function (date) { + return date.getHours() < 12 ? 'AM' : 'PM'; + }, + a: function (date) { + return date.getHours() < 12 ? 'am' : 'pm'; + }, + T: 'getTime', + }; + + /* eslint-disable no-fallthrough*/ + + const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); + + // 返回一个随机的日期字符串。 + function date(format = 'yyyy-MM-dd') { + return _formatDate(_randomDate(), format); + } + function datetime(format = 'yyyy-MM-dd HH:mm:ss') { + return date(format); + } + function time(format = 'HH:mm:ss') { + return date(format); + } + function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ''; + } + } + unit = (unit || '').toLowerCase(); + format = format || 'yyyy-MM-dd HH:mm:ss'; + + const date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case 'year': + date.setMonth(0); + case 'month': + date.setDate(1); + case 'week': + case 'day': + date.setHours(0); + case 'hour': + date.setMinutes(0); + case 'minute': + date.setSeconds(0); + case 'second': + date.setMilliseconds(0); + } + switch (unit) { + case 'week': + date.setDate(date.getDate() - date.getDay()); + } + + return _formatDate(date, format); + } + + function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + const targetPattern = _patternLetters[flag]; + return typeof targetPattern === 'function' + ? targetPattern(date) + : targetPattern in _patternLetters + ? creatNewSubString($0, targetPattern) + : date[targetPattern](); + }); + } + + function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); + } + + function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); + } + + /* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) + */ + function id() { + let id; + let sum = 0; + const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; + const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; + + id = pick(DICT_FIXED).id + date('yyyyMMdd') + string$1('number', 3); + + for (let i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; + } + + /* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ + function guid() { + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); + } + + /* + ## Miscellaneous + */ + /* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 + */ + let key = 0; + const increment = function (step) { + return (key += +step || 1); + }; + const inc = increment; + + // Dice + function d4() { + return natural(1, 4); + } + function d6() { + return natural(1, 6); + } + function d8() { + return natural(1, 8); + } + function d12() { + return natural(1, 12); + } + function d20() { + return natural(1, 20); + } + function d100() { + return natural(1, 100); + } + + // 随机生成一个句子,第一个单词的首字母大写。 + function sentence(min = 12, max = 18) { + const len = random(min, max); + const string = times(len, () => word()).join(' '); + return capitalize(string) + '.'; + } + + // 随机生成一个单词。 + function word(min = 3, max = 10) { + const len = random(min, max); + return times(len, () => character('lower')).join(''); + } + + // 随机生成一段文本。 + function paragraph(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => sentence()).join('\n'); + } + + // 随机生成一句标题,其中每个单词的首字母大写。 + function title(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => capitalize(word())).join(''); + } + + function cparagraph(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => csentence()).join('\n'); + } + + // 随机生成一个中文句子。 + function csentence(min = 12, max = 18) { + const len = random(min, max); + return times(len, () => cword()).join('') + '。'; + } + // 随机生成一句中文标题。 + function ctitle(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => cword()).join(''); + } + // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm + const DICT_HANZI = + '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; + // 随机生成一个或多个汉字。 + function cword(...args) { + let len = 1; + let pool = DICT_HANZI; + let min; + let max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === 'string') { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof args[0] === 'string') { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + + return sampleSize(pool, len).join(''); + } + + // 协议簇 + const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); + // 域名后缀 + const tlds = ( + 'com net org edu gov int mil cn ' + + // 国内域名 + 'com.cn net.cn gov.cn org.cn ' + + // 中文国内域名 + '中国 中国互联.公司 中国互联.网络 ' + + // 新国际域名 + 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + + // 世界各国域名后缀 + 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' + ).split(' '); + + /* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers + */ + function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; + } + + // 随机生成一个 URL 协议。 + function protocol() { + return pick(protocols); + } + // 随机生成一个域名。 + function domain(Tld) { + return `${word()}.${Tld || tld()}`; + } + /* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) + */ + function tld() { + // Top Level Domain + return pick(tlds); + } + + // 随机生成一个邮件地址。 + function email(domain) { + return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; + } + // 随机生成一个 IP 地址。 + function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join('.'); + } + + var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" + ]; + var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" + ]; + var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" + ]; + var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 + }; + + var Addvocate = "#ff6138"; + var Adobe = "#ff0000"; + var Aim = "#fcd20b"; + var Amazon = "#e47911"; + var Android = "#a4c639"; + var AOL = "#0060a3"; + var Atlassian = "#003366"; + var Behance = "#053eff"; + var bitly = "#ee6123"; + var Blogger = "#fc4f08"; + var Boeing = "#0039a6"; + var Carbonmade = "#613854"; + var Cheddar = "#ff7243"; + var Delicious = "#205cc0"; + var Dell = "#3287c1"; + var Designmoo = "#e54a4f"; + var Deviantart = "#4e6252"; + var Devour = "#fd0001"; + var DEWALT = "#febd17"; + var Dribbble = "#ea4c89"; + var Dropbox = "#3d9ae8"; + var Drupal = "#0c76ab"; + var Dunked = "#2a323a"; + var eBay = "#89c507"; + var Ember = "#f05e1b"; + var Engadget = "#00bdf6"; + var Envato = "#528036"; + var Etsy = "#eb6d20"; + var Evernote = "#5ba525"; + var Facebook = "#3b5998"; + var Firefox = "#e66000"; + var Forrst = "#5b9a68"; + var Foursquare = "#25a0ca"; + var Garmin = "#007cc3"; + var GetGlue = "#2d75a2"; + var Gimmebar = "#f70078"; + var GitHub = "#171515"; + var Grooveshark = "#f77f00"; + var Groupon = "#82b548"; + var HelloWallet = "#0085ca"; + var HootSuite = "#003366"; + var Houzz = "#73ba37"; + var HTML5 = "#ec6231"; + var IKEA = "#ffcc33"; + var IMDb = "#f3ce13"; + var Instagram = "#3f729b"; + var Intel = "#0071c5"; + var Intuit = "#365ebf"; + var Kickstarter = "#76cc1e"; + var kippt = "#e03500"; + var Kodery = "#00af81"; + var LastFM = "#c3000d"; + var LinkedIn = "#0e76a8"; + var Livestream = "#cf0005"; + var Lumo = "#576396"; + var Mixpanel = "#a086d3"; + var Meetup = "#e51937"; + var Nokia = "#183693"; + var NVIDIA = "#76b900"; + var Opera = "#cc0f16"; + var Path = "#e41f11"; + var Pinboard = "#0000e6"; + var Pinterest = "#c8232c"; + var PlayStation = "#665cbe"; + var Pocket = "#ee4056"; + var Prezi = "#318bff"; + var Pusha = "#0f71b4"; + var Quora = "#a82400"; + var Rdio = "#008fd5"; + var Readability = "#9c0000"; + var Resource = "#7eb400"; + var Rockpack = "#0ba6ab"; + var Roon = "#62b0d9"; + var RSS = "#ee802f"; + var Salesforce = "#1798c1"; + var Samsung = "#0c4da2"; + var Shopify = "#96bf48"; + var Skype = "#00aff0"; + var Snagajob = "#f47a20"; + var Softonic = "#008ace"; + var SoundCloud = "#ff7700"; + var Spotify = "#81b71a"; + var Sprint = "#fee100"; + var Squarespace = "#121212"; + var StackOverflow = "#ef8236"; + var Staples = "#cc0000"; + var Stripe = "#008cdd"; + var StudyBlue = "#00afe1"; + var StumbleUpon = "#f74425"; + var Technorati = "#40a800"; + var Treehouse = "#5cb868"; + var Trulia = "#5eab1f"; + var Tumblr = "#34526f"; + var Twitter = "#00acee"; + var TYPO3 = "#ff8700"; + var Ubuntu = "#dd4814"; + var Ustream = "#3388ff"; + var Verizon = "#ef1d1d"; + var Vimeo = "#86c9ef"; + var Vine = "#00a478"; + var Virb = "#06afd8"; + var Wooga = "#5b009c"; + var Wunderlist = "#2b88d9"; + var XBOX = "#9bc848"; + var XING = "#126567"; + var Yandex = "#ffcc00"; + var Yelp = "#c41200"; + var YouTube = "#c4302b"; + var Zalongo = "#5498dc"; + var Zendesk = "#78a300"; + var Zerply = "#9dcc7a"; + var Zootool = "#5e8b1d"; + var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool + }; + + /* eslint-disable no-redeclare*/ + const { _adSize, _screenSize, _videoSize } = size; + const _brandNames = Object.keys(_brandColors); + + /* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 + */ + function image(...args) { + let size; + let background; + let foreground; + let format; + let text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = (foreground || hex()).replace(/^#/, ''); + background = (background || hex()).replace(/^#/, ''); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ + format ? '.' + format : '' + }${text ? '&text=' + text : ''}`; + } + /* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, + */ + function dataImage(size, text) { + let canvas; + if (typeof document !== 'undefined') { + canvas = document.createElement('canvas'); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + const Canvas = module.require('canvas'); + canvas = new Canvas(); + } + + const ctx = canvas && canvas.getContext && canvas.getContext('2d'); + if (!canvas || !ctx) return ''; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split('x'); + + const width = parseInt(size[0], 10); + const height = parseInt(size[1], 10); + const background = _brandColors[pick(_brandNames)]; + const foreground = '#FFF'; + const textHeight = 14; + const font = 'sans-serif'; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = 'bold ' + textHeight + 'px ' + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL('image/png'); + } + + /* + ## Address + */ + const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; + + // 随机生成一个大区。 + function region() { + return pick(REGION); + } + // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 + function province() { + return pick(DICT_FIXED).name; + } + // 随机生成一个(中国)市。 + function city(prefix) { + const province = pick(DICT_FIXED); + const city = pick(province.children); + return prefix ? [province.name, city.name].join(' ') : city.name; + } + // 随机生成一个(中国)县。 + function county(prefix) { + const province = pick(DICT_FIXED); + const city = pick(province.children); + const county = pick(city.children) || { + name: '-', + }; + return prefix ? [province.name, city.name, county.name].join(' ') : county.name; + } + // 随机生成一个邮政编码(六位数字)。 + function zip(len) { + let zip = ''; + for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; + } + + // 用于生成 Blob 和 File 型数据的工具 + function prepare(anyData) { + let prepared; + switch (type(anyData)) { + case 'array': + prepared = anyData; + break; + default: + prepared = [anyData]; + } + return prepared; + } + function genFile(anyData) { + return new File(prepare(anyData), word()); + } + function genBlob(anyData) { + return new Blob(prepare(anyData)); + } + + /* + ## Mock.Random + + 工具类,用于生成各种随机数据。 + */ + + var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + float: float, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip, + genFile: genFile, + genBlob: genBlob + }); + + /* + ## Constant + + 常量集合。 + */ + /* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 + */ + var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ + }; + + /* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ + /* jshint -W041 */ + function parser$1(name = '') { + if (typeof name !== 'string') name = name + ''; + const parameters = name.match(Constant.RE_KEY); + + const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + const min = range && range[1] && parseInt(range[1], 10); // || 1 + const max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + const result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + const isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; + } + + function array({ + name, + rule: { min, max, parameters, count }, + template, + context: { path, templatePath, root, templateRoot }, + }) { + let result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + }); + }); + } + } + } + return result; + } + + function boolean({ rule: { max, min, parameters }, template = '' }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; + } + + function _function(options) { + const { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); + } + + function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { + let result; + if (decimal) { + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { + result = float(min, max, dmin, dmax); // 内置字符串转数字 + }); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; + } + + function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + const result = {}; + let keys = []; + const fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + const parsedKey = key.replace(Constant.RE_KEY, '$1'); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (const key in template) { + (typeof template[key] === 'function' ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + const parsedKey = key.replace(Constant.RE_KEY, '$1'); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + const inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type(template[key]) === 'number') { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; + } + + /*eslint-disable*/ + + function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); + } + + function Alternate(n, l) { + Token.call(this, 'alternate'), (this.left = n), (this.right = l); + } + + function Match(n) { + Token.call(this, 'match'), (this.body = n.filter(Boolean)); + } + + function Group(n, l) { + Token.call(this, n), (this.body = l); + } + + function CaptureGroup(n) { + Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); + } + + function Quantified(n, l) { + Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); + } + + function Quantifier(n, l) { + Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); + } + + function CharSet(n, l) { + Token.call(this, 'charset'), (this.invert = n), (this.body = l); + } + + function CharacterRange(n, l) { + Token.call(this, 'range'), (this.start = n), (this.end = l); + } + + function Literal(n) { + Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); + } + + function Unicode(n) { + Token.call(this, 'unicode'), (this.code = n.toUpperCase()); + } + + function Hex(n) { + Token.call(this, 'hex'), (this.code = n.toUpperCase()); + } + + function Octal(n) { + Token.call(this, 'octal'), (this.code = n.toUpperCase()); + } + + function BackReference(n) { + Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); + } + + function ControlCharacter(n) { + Token.call(this, 'control-character'), (this.code = n.toUpperCase()); + } + + var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\x08/g, '\\b') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\f/g, '\\f') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return '\\x0' + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return '\\x' + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return '\\u0' + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return '\\u' + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = 'end of input'; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; + } + (this.expected = n), + (this.found = l), + (this.offset = u), + (this.line = t), + (this.column = r), + (this.name = 'SyntaxError'), + (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + '\n' === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : '\r' === e || '\u2028' === e || '\u2029' === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r + ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) + : ((qt = t), (t = il)), + null === t && (t = al), + null !== t + ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) + t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), + null === r && (r = al), + null !== r + ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return ( + (l = qt), + 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), + null !== u && ((Lt = l), (u = wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function s() { + var l, u; + return ( + (l = qt), + 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), + null !== u && ((Lt = l), (u = gl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function h() { + var n, l, u; + return ( + (n = qt), + (l = a()), + null !== l + ? ((u = d()), + null !== u + ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l + ? ((u = k()), + null === u && (u = al), + null !== u + ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return ( + (n = v()), + null === n && + ((n = w()), + null === n && + ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), + n + ); + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) + ? ((c = Fl), qt++) + : ((c = null), 0 === Wt && e(Ql)), + null !== c + ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r + ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r + ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return ( + (l = qt), + 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), + null !== u && ((Lt = l), (u = ql())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function g() { + var l, u; + return ( + (l = qt), + 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), + null !== u && ((Lt = l), (u = Dl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function b() { + var l, u; + return ( + (l = qt), + 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), + null !== u && ((Lt = l), (u = Wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if ( + ((l = qt), + (u = []), + zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), + null !== t) + ) + for (; null !== t; ) + u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r + ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return ( + (n = qt), + (l = c()), + null !== l && ((Lt = n), (l = Yl(l))), + null === l ? ((qt = n), (n = l)) : (n = l), + n + ); + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ( + (Wt++, + (l = qt), + 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), + null !== u) + ) + if ( + (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), + null === t && (t = al), + null !== t) + ) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) + r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o + ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t + ? ((r = U()), + null !== r + ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), + Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return ( + (l = qt), + 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), + null !== u && ((Lt = l), (u = xu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = + tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Su())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function M() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Uu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function D() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), + null !== u && ((Lt = l), (u = Bu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function H() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), + null !== u && ((Lt = l), (u = qu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function O() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), + null !== u && ((Lt = l), (u = Du())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function W() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), + null !== u && ((Lt = l), (u = Wu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function z() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), + null !== u && ((Lt = l), (u = Ju())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function I() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), + null !== u && ((Lt = l), (u = Pu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function J() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), + null !== u && ((Lt = l), (u = Yu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function K() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), + null !== u && ((Lt = l), (u = nt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function N() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), + null !== u && ((Lt = l), (u = tt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function P() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), + null !== u && ((Lt = l), (u = ot())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function V() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), + null !== u && ((Lt = l), (u = at())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function X() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), + null !== u && ((Lt = l), (u = ht())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t + ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t + ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u) + ) { + if ( + ((t = []), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t + ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t + ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t + ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u && ((Lt = l), (u = $t())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t + ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = '', + fl = '|', + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = '^', + vl = '"^"', + wl = function () { + return new Token('start'); + }, + Al = '$', + Cl = '"$"', + gl = function () { + return new Token('end'); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = 'Quantifier', + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = '{', + yl = '"{"', + ml = ',', + Rl = '","', + Fl = '}', + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ',}', + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = '+', + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = '*', + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = '?', + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = '[0-9]', + Jl = function (n) { + return +n.join(''); + }, + Kl = '(', + Nl = '"("', + Pl = ')', + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = '?:', + _l = '"?:"', + nu = function (n) { + return new Group('non-capture-group', n); + }, + lu = '?=', + uu = '"?="', + tu = function (n) { + return new Group('positive-lookahead', n); + }, + ru = '?!', + eu = '"?!"', + ou = function (n) { + return new Group('negative-lookahead', n); + }, + cu = 'CharacterSet', + iu = '[', + au = '"["', + fu = ']', + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = 'CharacterRange', + pu = '-', + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = 'Character', + Cu = /^[^\\\]]/, + gu = '[^\\\\\\]]', + bu = function (n) { + return new Literal(n); + }, + ku = '.', + Tu = '"."', + xu = function () { + return new Token('any-character'); + }, + yu = 'Literal', + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = '[^|\\\\\\/.[()?+*$\\^]', + Fu = '\\b', + Qu = '"\\\\b"', + Su = function () { + return new Token('backspace'); + }, + Uu = function () { + return new Token('word-boundary'); + }, + Eu = '\\B', + Gu = '"\\\\B"', + Bu = function () { + return new Token('non-word-boundary'); + }, + ju = '\\d', + $u = '"\\\\d"', + qu = function () { + return new Token('digit'); + }, + Lu = '\\D', + Mu = '"\\\\D"', + Du = function () { + return new Token('non-digit'); + }, + Hu = '\\f', + Ou = '"\\\\f"', + Wu = function () { + return new Token('form-feed'); + }, + zu = '\\n', + Iu = '"\\\\n"', + Ju = function () { + return new Token('line-feed'); + }, + Ku = '\\r', + Nu = '"\\\\r"', + Pu = function () { + return new Token('carriage-return'); + }, + Vu = '\\s', + Xu = '"\\\\s"', + Yu = function () { + return new Token('white-space'); + }, + Zu = '\\S', + _u = '"\\\\S"', + nt = function () { + return new Token('non-white-space'); + }, + lt = '\\t', + ut = '"\\\\t"', + tt = function () { + return new Token('tab'); + }, + rt = '\\v', + et = '"\\\\v"', + ot = function () { + return new Token('vertical-tab'); + }, + ct = '\\w', + it = '"\\\\w"', + at = function () { + return new Token('word'); + }, + ft = '\\W', + st = '"\\\\W"', + ht = function () { + return new Token('non-word'); + }, + dt = '\\c', + pt = '"\\\\c"', + vt = 'any character', + wt = function (n) { + return new ControlCharacter(n); + }, + At = '\\', + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = '[1-9]', + kt = function (n) { + return new BackReference(n); + }, + Tt = '\\0', + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = '[0-7]', + Rt = function (n) { + return new Octal(n.join('')); + }, + Ft = '\\x', + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = '[0-9a-fA-F]', + Et = function (n) { + return new Hex(n.join('')); + }, + Gt = '\\u', + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join('')); + }, + $t = function () { + return new Token('null-character'); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ('startRule' in el) { + if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw ( + (o(Ot), + (Lt = Math.max(qt, Ht)), + new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) + ); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + + /*eslint-disable*/ + /* + + */ + const Handler$1 = { + extend: extend, + }; + + // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart + /* let ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] + }*/ + + // ASCII printable code chart + // let LOWER = 'abcdefghijklmnopqrstuvwxyz' + // let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + // let NUMBER = '0123456789' + // let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' + const LOWER = ascii(97, 122); + const UPPER = ascii(65, 90); + const NUMBER = ascii(48, 57); + const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) + const PRINTABLE = ascii(32, 126); + const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; + const CHARACTER_CLASSES = { + '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) + '\\W': OTHER.replace('_', ''), + '\\s': SPACE, + '\\S': (function () { + let result = PRINTABLE; + for (let i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ''); + } + return result; + })(), + '\\d': NUMBER, + '\\D': LOWER + UPPER + OTHER, + }; + + // 从 from 到 to 包含两个端点的字符串 + function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); + } + + // let ast = RegExpParser.parse(regexp.source) + Handler$1.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); + }; + + Handler$1.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case 'start': + case 'end': + return ''; + case 'any-character': + return character(); + case 'backspace': + return ''; + case 'word-boundary': // TODO + return ''; + case 'non-word-boundary': // TODO + break; + case 'digit': + return pick(NUMBER.split('')); + case 'non-digit': + return pick((LOWER + UPPER + OTHER).split('')); + case 'form-feed': + break; + case 'line-feed': + return node.body || node.text; + case 'carriage-return': + break; + case 'white-space': + return pick(SPACE.split('')); + case 'non-white-space': + return pick((LOWER + UPPER + NUMBER).split('')); + case 'tab': + break; + case 'vertical-tab': + break; + case 'word': // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split('')); + case 'non-word': // \W [^a-zA-Z0-9] + return pick(OTHER.replace('_', '').split('')); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean$1() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ''; + // node.body [] + for (let i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + 'capture-group': function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + 'non-capture-group': function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + 'positive-lookahead': function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + 'negative-lookahead': function (node, result, cache) { + // node.body + return ''; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ''; + // node.quantifier {} + const count = this.quantifier(node.quantifier); + // node.body {} + for (let i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + const min = Math.max(node.min, 0); + const max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this['invert-charset'](node, result, cache); + + // node.body [] + const literal = pick(node.body); + return this.gen(literal, result, cache); + }, + 'invert-charset': function (node, result, cache) { + let pool = PRINTABLE; + for (let i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case 'literal': { + pool = pool.replace(item.body, ''); + break; + } + case 'range': + const min = this.gen(item.start, result, cache).charCodeAt(); + const max = this.gen(item.end, result, cache).charCodeAt(); + for (let ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ''); + } + /* falls through */ + default: + const characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (let iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ''); + } + } + } + } + return pick(pool.split('')); + }, + range: function (node, result, cache) { + // node.start, node.end + const min = this.gen(node.start, result, cache).charCodeAt(); + const max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + 'back-reference': function (node, result, cache) { + return cache[node.code] || ''; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); + const CONTROL_CHARACTER_UNICODE = + '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( + ' ', + ); + const map = {}; + for (let i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + 'control-character': function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, + }); + + var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$1 + }); + + function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + const Source = count === undefined ? source : Array(count).fill(source).join(''); + return Handler$1.gen(parser.parse(Source)); + } + + function getValueByKeyPath(key, options) { + const originalKey = key; + const keyPathParts = splitPathToArray(key); + let absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === '/') { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + let currentContext = options.context.root; + let templateCurrentContext = options.context.templateRoot; + for (let i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === 'object' && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) { + console.log(err); + } + + return '@' + keyPathParts.join('/'); + } + // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js + function normalizePath(pathParts) { + const newPathParts = []; + for (let i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case '..': + newPathParts.pop(); + break; + case '.': + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; + } + function splitPathToArray(path) { + let parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; + } + + // 占位符即是字符串函数的意思 + function placeholder(Placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(''); + let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); + + const lkey = key && key.toLowerCase(); + const pathParts = splitPathToArray(key); + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // 绝对路径 or 相对路径 + if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === 'object' && + key in templateContext && + Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random)) return Placeholder; + + // 解析占位符的参数 + // !不进行低版本浏览器的匹配 + if (params) { + params = params.split(/\s*,\s*/).map((param) => { + // 递归解析参数中的占位符 + Constant.RE_PLACEHOLDER.exec(''); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); + } + return param; + }); + } else { + params = []; + } + + const handle = Random[key] || Random[lkey]; + switch (type(handle)) { + case 'array': { + // 自动从数组中取一个,例如 @areas + return pick(handle); + } + case 'function': { + // 执行占位符方法(大多数情况) + handle.options = options; + const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + } + } + + function string(options) { + const { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = '', + } = options; + let result = ''; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(''); + + // 'email|1-10': '@EMAIL, ', + const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + const phed = placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + if (isNumeric(phed)) { + result = parseFloat(phed, 10); + return true; + } + if (/^(true|false)$/.test(phed)) { + result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 + return true; + } // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; + } + return result; + } + + var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string + }); + + let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 + function gen(template, name = '', context = {}) { + const newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + const type$1 = type(template); + const func = typeset[type$1]; + let data; + + if (func) { + data = func({ + // 属性值类型 + type: type$1, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, + // 解析后的生成规则 + rule: parser$1(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; + } + + /* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + + */ + /* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot + */ + const Handler = { + gen, + extend, + }; + Handler.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, + }); + Handler.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, + }); + + /* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + + function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + const result = { + name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, + template, + type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? 'ROOT' : result.name); + + switch (result.type) { + case 'array': + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case 'object': + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } + + return result; + } + + /*eslint-disable*/ + + function valid(template, data) { + const schema = toJSONSchema(template); + const result = Diff.diff(schema, data); + for (let i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; + } + + /* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 + */ + const Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + const result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + const length = result.length; + + Assert.equal('name', schema.path, name + '', schema.name + '', result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + const length = result.length; + + switch (schema.type) { + case 'string': + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case 'array': + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case 'function': + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } + + Assert.equal('type', schema.path, type(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + const length = result.length; + + const rule = schema.rule; + const templateType = schema.type; + if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case 'regexp': + Assert.match('value', schema.path, data, schema.template, result); + return result.length === length; + case 'string': + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal('value', schema.path, data, schema.template, result); + return result.length === length; + } + + // 有生成规则 + let actualRepeatCount; + switch (templateType) { + case 'number': + const parts = (data + '').split('.'); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case 'boolean': + break; + + case 'string': + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case 'regexp': + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + break; + } + + return result.length === length; + }, + properties: function (schema, data, name, result) { + const length = result.length; + + const rule = schema.rule; + const keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('properties length', schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + 'properties length', + schema.path, + keys$1.length, + Math.min(rule.min, rule.max), + result, + ); + Assert.lessThanOrEqualTo( + 'properties length', + schema.path, + keys$1.length, + Math.max(rule.min, rule.max), + result, + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal('properties length', schema.path, keys$1.length, rule.min, result); + } + } + + if (result.length !== length) return false; + + for (let i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + let property; + each(schema.properties, function (item /* , index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i], + ), + ); + } + + return result.length === length; + }, + items: function (schema, data, name, result) { + const length = result.length; + + if (!schema.items) return; + + const rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('items length', schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + 'items', + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', + ); + Assert.lessThanOrEqualTo( + 'items', + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + + if (result.length !== length) return false; + + for (let i = 0; i < data.length; i++) { + result.push.apply( + result, + this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), + ); + } + + return result.length === length; + }, + }; + + /* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + + */ + const Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace('{utype}', item.type.toUpperCase()) + .replace('{ltype}', item.type.toLowerCase()) + .replace('{path}', (isArray(item.path) && item.path.join('.')) || item.path) + .replace('{action}', item.action) + .replace('{expected}', item.expected) + .replace('{actual}', item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case 'type': + // 正则模板 === 字符串最终值 + if (expected === 'regexp' && actual === 'string') return true; + break; + } + + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'matches', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is not equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than or equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less than or equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + }; + + valid.Diff = Diff; + valid.Assert = Assert; + + // 集中管理 mocked 的 url + + const _mocked = { + $set(value) { + this[value.rurl + value.rtype.toLowerCase()] = value; + }, + $delete(key) { + delete this[key]; + }, + }; + + // 查找与请求参数匹配的数据模板:URL,Type + function find({ url, type }) { + type = type.toLowerCase(); + for (const sUrlType in _mocked) { + const item = _mocked[sUrlType]; + const { rurl, rtype } = item; + if (match(rurl, url) && match(rtype, type)) { + // console.log('[mock]', url, '>', item.rurl) + return item; + } + } + return false; + } + + function match(expected, actual) { + switch (type(expected)) { + case 'string': + return expected === actual; + case 'regexp': + return expected.test(actual); + default: + return false; + } + } + + // 数据模板 => 响应数据 + function convert({ template }, options) { + return isFunction(template) ? template(options) : gen(template); + } + + /** + * Check if `obj` is a URLSearchParams object + * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 + * + * @param {*} obj + * @return {boolean} + */ + const isURLSearchParameters = (object) => { + return ( + typeof object === 'object' && + typeof object.append === 'function' && + typeof object.delete === 'function' && + typeof object.get === 'function' && + typeof object.getAll === 'function' && + typeof object.has === 'function' && + typeof object.set === 'function' && + typeof object.sort === 'function' && + object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 + ); + }; + + const BODY = Symbol('Body internals'); + const RESPONSE = Symbol('Response internals'); + + /** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ + async function consumeBody(data) { + // 标记为已经使用 + if (data.disturbed) { + throw new TypeError(`body used already for: ${data.url}`); + } + data.disturbed = true; + + // 报错 + if (data.error) { + throw data.error; + } + + if (data.body instanceof FormData) { + return new Blob([Object.fromEntries(data.body.entries())]); + } + return data.body; + } + + /** + * Body.js + * + * Body interface provides common methods for Request and Response + */ + /** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ + class Body { + constructor(body, { size = 0 } = {}) { + if (body === null) { + // Body is undefined or null + body = new Blob([]); + } else if (isURLSearchParameters(body)) { + // Body is a URLSearchParams + body = new Blob([body]); + } else if (ArrayBuffer.isView(body)) { + // Body is ArrayBufferView + body = new Blob([body]); + } else { + body = new Blob([JSON.stringify(body)]); + } + + this[BODY] = { + body, + boundary: null, + disturbed: false, + error: null, + }; + this.size = size; + } + + get body() { + return this[BODY].body; + } + + get bodyUsed() { + return this[BODY].disturbed; + } + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + async arrayBuffer() { + const blob = await consumeBody(this[BODY]); + return blob.arrayBuffer(); + } + + /** + * Return raw response as Blob + * + * @return Promise + */ + async blob() { + return consumeBody(this[BODY]); + } + + /** + * Decode response as json + * + * @return Promise + */ + async json() { + const text = await this.text(); + return JSON.parse(text || '{}'); + } + + /** + * Decode response as text + * + * @return Promise + */ + async text() { + const blob = await consumeBody(this[BODY]); + return blob.text(); + } + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ + } + + // In browsers, all properties are enumerable. + Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true }, + }); + + /** + * Performs the operation "extract a `Content-Type` value from |object|" as + * specified in the specification: + * https://fetch.spec.whatwg.org/#concept-bodyinit-extract + * + * This function assumes that instance.body is present. + * + * @param {any} body Any options.body input + * @return {string | null} + */ + const extractContentType = (body, request) => { + // Body is null or undefined + if (body === null) { + return null; + } + + // Body is string + if (typeof body === 'string') { + return 'text/plain;charset=UTF-8'; + } + + // Body is a URLSearchParams + if (isURLSearchParameters(body)) { + return 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // Body is blob + if (body instanceof Blob) { + return body.type || null; + } + + if (body instanceof FormData) { + return `multipart/form-data; boundary=${request[BODY].boundary}`; + } + + // Body constructor defaults other things to string + return 'text/plain;charset=UTF-8'; + }; + + const redirectStatus = new Set([301, 302, 303, 307, 308]); + + /** + * Redirect code matching + * + * @param {number} code - Status code + * @return {boolean} + */ + const isRedirect = (code) => { + return redirectStatus.has(code); + }; + + /** + * Response.js + * + * Response class provides content decoding + */ + /** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ + class fakeResponse extends Body { + constructor(body = null, options = {}) { + super(body, options); + const status = options.status != null ? options.status : 200; + const headers = new Headers(options.headers); + if (body !== null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + this[RESPONSE] = { + type: 'default', + url: options.url, + status, + statusText: options.statusText || '', + headers, + counter: options.counter, + }; + } + + get type() { + return this[RESPONSE].type; + } + + get url() { + return this[RESPONSE].url || ''; + } + + get status() { + return this[RESPONSE].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; + } + + get redirected() { + return this[RESPONSE].counter > 0; + } + + get statusText() { + return this[RESPONSE].statusText; + } + + get headers() { + return this[RESPONSE].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + // Don't allow cloning a used body + if (this.bodyUsed) { + throw new Error('cannot clone body after it is used'); + } + return new Response(this.body, { + type: this.type, + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected, + size: this.size, + }); + } + + /** + * @param {string} url The URL that the new response is to originate from. + * @param {number} status An optional status code for the response (e.g., 302.) + * @return {Response} A Response object. + */ + static redirect(url, status = 302) { + if (!isRedirect(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + + return new Response(null, { + headers: { + location: new URL(url).toString(), + }, + status, + }); + } + + static error() { + const response = new Response(null, { status: 0, statusText: '' }); + response[RESPONSE].type = 'error'; + return response; + } + + get [Symbol.toStringTag]() { + return 'Response'; + } + } + + Object.defineProperties(Response.prototype, { + type: { enumerable: true }, + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true }, + }); + + const realFetch = window && window.fetch; + function mockFetch() { + // 代理 fetch 的初始化函数 + if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { + window.fetch = fakeFetch; + window.fetch.$mock = true; + console.warn('fetch 已经被代理'); + } + } + + async function fakeFetch(url, options = {}) { + if (window.fetch.$mock === true) { + // 只有在 $mock 标记为 true 时才进行代理 + const result = find({ + url, + type: (options.method || 'get').toLowerCase(), + }); + if (result) { + const data = convert(result, {}); + console.warn('mock代理中'); + return new fakeResponse(data, options); + } + } + + console.warn('未使用 mockjs'); + return realFetch(url, options); + } + + var HTTP_STATUS_CODES = { + 100: 'Continue', + 101: 'Switching Protocols', + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 300: 'Multiple Choice', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 307: 'Temporary Redirect', + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 422: 'Unprocessable Entity', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', + }; + + // 使用不完全覆盖的方式,使用继承方式继承所有的属性 + + const SEND = XMLHttpRequest.prototype.send; + const OPEN = XMLHttpRequest.prototype.open; + + // ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 + + // 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, + // 也不可以在 XHR 实例上定义 + // 这样的话会导致无法接收到数据 + // 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 + const defineGetAndSet = function (what) { + const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; + Object.defineProperties( + what, + array.reduce((col, cur) => { + col[cur] = { + get() { + return this.$Mock[cur]; + }, + set: function (state) { + this.$Mock[cur] = state; + }, + }; + return col; + }, {}), + ); + }; + class MockXMLHttpRequest extends XMLHttpRequest { + constructor(...args) { + super(...args); + } + _send = SEND; + _open = OPEN; + open(method, url, async, username, password) { + // 不进行同步操作 + this._open(method, url, true, username, password); + this.$url = url; + this.$type = method.toLowerCase(); + } + send(body) { + if (this.$mock) { + this.$template = find({ url: this.$url, type: this.$type }); + if (this.$template) { + defineGetAndSet(this); + this.dispatchEvent(new Event('loadstart')); + + setTimeout(this.$done.bind(this), this.timeout || 100); + return null; + } + } + this._send(body); + } + get mock() { + return this.$mock; + } + set mock(value) { + if (typeof value === 'boolean') this.$mock = value; + } + $Mock = { + // 原生属性的 getter 和 setter + readyState: 0, + status: 200, + response: '', + responseText: '', + statusText: '', + }; + $type = 'get'; + $url = ''; + $mock = true; + $template = null; + + $done() { + this.readyState = this.HEADERS_RECEIVED; + this.dispatchEvent(new Event('readystatechange')); + this.readyState = this.LOADING; + this.dispatchEvent(new Event('readystatechange')); + + this.status = 200; + this.statusText = HTTP_STATUS_CODES[200]; + const data = convert(this.$template, {}); + this.response = data; + this.responseText = this.response; + this.readyState = this.DONE; + this.dispatchEvent(new Event('readystatechange')); + this.dispatchEvent(new Event('load')); + this.dispatchEvent(new Event('loadend')); + } + } + + // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 + typeof window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 + + let XHR; + if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; + + function mock(...args) { + let rurl; + let rtype = 'get'; + let template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + break; + case 3: + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; + } + + // 拦截 XHR + XHR && window && (window.XMLHttpRequest = XHR); + + _mocked.$set({ + rurl, + rtype, + template, + }); + return null; + } + + // global require, module, window + + /* ! Mock - 模拟请求 & 模拟数据 https://github.com/nuysoft/Mock 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 + + 此版本为 esm 版本 KonghaYao 修改于 2021/6/11 https://github.com/KonghaYao/ - */;var Sa={Handler:ua,Random:pr,Util:Pn,XHR:Oa,RE:Vr,toJSONSchema:la,valid:ia,heredoc:qn,setup:function(e){return Oa.setup(e)},_mocked:sa,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ua.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Oa&&(window.XMLHttpRequest=Oa),sa.$set({rurl:n,rtype:r,template:t}),Sa}};return Sa}(); + */ + + const Mock = { + Handler, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked, + mock, + }; + + Mock.version = '1.1.1-es6'; + + return Mock; + +}()); diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js index 7bfc3aba..edaf72fa 100644 --- a/dist/mock.cjs.js +++ b/dist/mock.cjs.js @@ -48,17 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ie(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function nn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Te(e))}var tn=Ce&&Ce.isRegExp,rn=tn?ye(tn):function(e){return f(e)&&"[object RegExp]"==s(e)},an=Math.floor,on=Math.random;function un(e,n){return e+an(on()*(n-e+1))}var ln=parseFloat,cn=Math.min,hn=Math.random;function sn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=hn();return cn(e+a*(n-e+ln("1e-"+((a+"").length-1))),n)}return un(e,n)}var fn=Math.ceil,mn=Math.max;var dn,pn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=mn(fn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=sn(t,r,!1);return parseFloat(sn(e,n,!0).toFixed(a))},Hn=function(e,n,t=!1){ -//! cur:boolean 是划分概率的一个启动符号 -return t?sn(0,e+n)>e?!t:t:sn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const In=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),gn(e)},Bn=function(...e){var n,t,r,a;switch(e.length){case 0:n=zn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=zn(r,a));break;case 3:[t,r,a]=e,n=zn(r,a)}return En(n,(()=>In(t))).join("")};function Un(e,n){return e(n={exports:{}},n.exports),n.exports}var Gn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Wn=Un((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Jn=Un((function(e){var n={};for(var t in Gn)Gn.hasOwnProperty(t)&&(n[Gn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Gn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Wn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Wn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Wn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Jn.to,Jn.get;var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Un((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Kn)if(Kn.hasOwnProperty(l)){var i=Kn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Vn(e){var n=function(){for(var e={},n=Object.keys(Yn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var et=Qn,nt=[].slice,tt=["keyword","gray","hex"],rt={};Object.keys(et).forEach((function(e){rt[nt.call(et[e].labels).sort().join("")]=e}));var at={};function ot(e,n){if(!(this instanceof ot))return new ot(e,n);if(n&&n in tt&&(n=null),n&&!(n in et))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof ot)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Jn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=et[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=et[this.model].channels;var o=nt.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in rt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=rt[l];var i=et[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return ot.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return ot.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(et).forEach((function(e){if(-1===tt.indexOf(e)){var n=et[e].channels;ot.prototype[e]=function(){if(this.model===e)return new ot(this);if(arguments.length)return new ot(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new ot(it(et[this.model][e].raw(this.color)).concat(t),e)},ot[e]=function(t){return"number"==typeof t&&(t=ct(nt.call(arguments),n)),new ot(t,e)}}}));var ht=ot,st={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const ft=function(e,...n){let t,r,a;switch(n.length){case 0:return gn(e);case 1:return[a]=n,kn(e,a);case 2:return[t,r]=n,kn(e,sn(t,r))}},mt=function(e,n,t){let r=Mn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},dt={},pt=function(...e){1===e.length&&(e=e[0]);var n=pt.options.context.templatePath.join("."),t=dt[n]=dt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var bt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let xt;function gt(e,n){return xt=xt||Math.random(),xt+=.618033988749895,xt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ht.hsv(360*xt,100*e,100*n)}function vt(){return gt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:wt,lastName:kt,cfirstName:At,clastName:Ct}=yt;function Mt(){var e=wt.male.concat();return ft(e)}function jt(){return ft(kt)}function Et(){return ft(At)}function Ot(){return ft(Ct)}var St,Rt=new Uint8Array(16);function Tt(){if(!St&&!(St="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return St(Rt)}var Ft=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function _t(e){return"string"==typeof e&&Ft.test(e)}for(var Dt=[],qt=0;qt<256;++qt)Dt.push((qt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Tt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Dt[e[n+0]]+Dt[e[n+1]]+Dt[e[n+2]]+Dt[e[n+3]]+"-"+Dt[e[n+4]]+Dt[e[n+5]]+"-"+Dt[e[n+6]]+Dt[e[n+7]]+"-"+Dt[e[n+8]]+Dt[e[n+9]]+"-"+Dt[e[n+10]]+Dt[e[n+11]]+Dt[e[n+12]]+Dt[e[n+13]]+Dt[e[n+14]]+Dt[e[n+15]]).toLowerCase();if(!_t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const zt=Object.keys(Pt),Lt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ht={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Ht).join("|")})`,"g");function It(e="yyyy-MM-dd"){return Bt(Ut(),e)}function Bt(e,n){return n.replace(Nt,(function n(t,r){let a=Ht[r];return"function"==typeof a?a(e):a in Ht?n(t,a):e[a]()}))}function Ut(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Gt=0;const Wt=function(e){return Gt+=+e||1},Jt=Wt;function Kt(e=12,n=18){return Qe(En(sn(e,n),(()=>Yt())).join(""))+"."}function Yt(e=3,n=10){return En(sn(e,n),(()=>In("lower"))).join("")}function Vt(e=12,n=18){return En(sn(e,n),(()=>Xt())).join("")+"。"}function Xt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=zn(n,t));break;case 3:[a,n,t]=e,r=zn(n,t)}return kn(a,r).join("")}const Zt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Qt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function er(){return ft(Zt)}function nr(e){return`${Yt()}.${e||tr()}`}function tr(){return ft(Qt)}var rr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ar={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:or,_screenSize:ur,_videoSize:lr}=rr;const ir=Object.keys(ar);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=ft(or)),r=(r||vt()).replace(/^#/,""),t=(t||vt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var hr=["东北","华北","华东","华中","华南","西南","西北"];function sr(e){let n;switch(On(e)){case"array":n=e;default:n=[e]}return n}var fr=Object.freeze({__proto__:null,integer:Pn,isNumber:qn,random:sn,natural:zn,int:Pn,float:Ln,boolean:Hn,bool:Hn,character:In,char:In,string:Bn,str:Bn,range:pn,color:function(e){return e||st[e]?st[e].nicer:ft(bt).hex},hex:vt,rgb:function(){return gt().hsv().string()},rgba:function(){return gt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return gt().hsl().string()},_goldenRatioColor:gt,first:Mt,last:jt,name:function(e){return e=e?` ${Mt()} `:" ",`${Mt()}${e}${jt()}`},cfirst:Et,clast:Ot,cname:function(){return Et()+Ot()},capitalize:Qe,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:ft,shuffle:mt,order:pt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=ft(Lt).id+It("yyyyMMdd")+Bn("number",3);for(var r=0;rKt())).join("\n")},word:Yt,sentence:Kt,title:function(e=3,n=7){return En(sn(e,n),(()=>Qe(Yt()))).join("")},ctitle:function(e=3,n=7){return En(sn(e,n),(()=>Xt())).join("")},csentence:Vt,cparagraph:function(e=3,n=7){return En(sn(e,n),(()=>Vt())).join("\n")},cword:Xt,protocol:er,domain:nr,tld:tr,email:function(e){return`${In("lower")}.${Yt()}@${e||Yt()+"."+tr()}`},ip:function(){return[...Array(4)].map((()=>zn(0,255))).join(".")},url:function(e,n){return`${e||er()}://${n||nr()}/${Yt()}`},_patternLetters:Ht,_rformat:Nt,_formatDate:Bt,_randomDate:Ut,time:function(e="HH:mm:ss"){return It(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return It(e)},date:It,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Bt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ut(e,n).getTime():Ut().getTime()},_adSize:or,_screenSize:ur,_videoSize:lr,image:cr,img:cr,_brandColors:ar,_brandNames:ir,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=ft(or)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=ar[ft(ir)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return ft(hr)},province:function(){return ft(Lt).name},city:function(e){var n=ft(Lt),t=ft(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=ft(Lt),t=ft(n.children),r=ft(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=zn(0,9);return n},genFile:function(e){return new File(sr(e),Yt())},genBlob:function(){return new Blob(sr(anyData))}}),mr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function dr(e=""){"string"!=typeof e&&(e+="");var n=e.match(mr.RE_KEY),t=n&&n[3]&&n[3].match(mr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(mr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function pr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=ft(ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ta(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(ta(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function br({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Hn(n,e,r):r}function xr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function gr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Ln(n,t,r,a)})):u=n&&!a[2]?t:o,u}function vr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=mt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(mr.RE_KEY);i&&i[2]&&"number"===On(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function wr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function kr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function Ar(e,n){yr.call(this,e),this.body=n}function Cr(e){Ar.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Mr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Er(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Or(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Sr(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Rr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function Dr(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new wr(e,n[1]):e},me=function(e,n,t){return new kr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ve=function(){return new yr("end")},ye=function(e,n){return new Mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",qe='"+"',$e=function(){return new jr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new jr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Ar("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Ar("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Ar("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Er(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Or(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Sr(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Dr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new _r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Fr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Tr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Rr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}zr.gen=function(e,n,t){return t=t||{guid:1},zr[e.type]?zr[e.type](e,n,t):zr.token(e,n,t)},zr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return In();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return ft(Nr.split(""));case"non-digit":return ft((Lr+Hr+Ir).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return ft(Ur.split(""));case"non-white-space":return ft((Lr+Hr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return ft((Lr+Hr+Nr).split(""));case"non-word":return ft(Ir.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Hn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Vr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Yr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ta(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in fr)&&!(u in fr))return e;o=o?o.split(/\s*,\s*/).map((e=>(mr.RE_PLACEHOLDER.exec(""),mr.RE_PLACEHOLDER.test(e)?Zr(e,n,t,r):e))):[];var i=fr[a]||fr[u];switch(On(i)){case"array":return ft(i);case"function":i.options=r;var c=i.apply(fr,o)||"";return delete i.options,c}}function Qr(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(mr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Zr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Sn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Bn(t):o;return u}var ea=Object.freeze({__proto__:null,array:pr,boolean:br,function:xr,number:gr,object:vr,regexp:Kr,string:Qr});let na=1;function ta(e,n="",t={}){var r={path:t.path||[na],templatePath:t.templatePath||[na++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=On(e);let o=ea[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(mr.RE_KEY,"$1"):n,rule:dr(n),context:r}),r.root||(r.root=u),u):e}var ra={gen:ta,extend:Rn};function aa(e,n,t=[]){var r={name:"string"==typeof n?n.replace(mr.RE_KEY,"$1"):n,template:e,type:On(e),rule:dr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>aa(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>aa(e,n,r.path)))}return r}function oa(e,n){for(var t=aa(e),r=ua.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Zr,getValueByKeyPath:Yr,normalizePath:Vr,splitPathToArray:Xr});var ua={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return la.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(mr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return la.equal("type",e.path,On(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return la.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(mr.RE_PLACEHOLDER))return r.length===o}return la.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),la.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&la.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(la.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),la.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&la.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=_n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(la.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),la.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&la.equal("properties length",e.path,u.length,o.min,r)):la.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=la.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=la.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=la.message(u),a.push(u),!1}};oa.Diff=ua,oa.Assert=la;const ia={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){for(var t in n=n.toLowerCase(),ia){var r=ia[t];let{rurl:a,rtype:o}=r;if(ha(a,e)&&ha(o,n))return r}return!1}function ha(e,n){switch(On(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function sa({template:e},n){return R(e)?e(n):ta(e)}const fa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ma=Symbol("Body internals"),da=Symbol("Response internals");async function pa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class ba{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):fa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ma]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ma].body}get bodyUsed(){return this[ma].disturbed}async arrayBuffer(){return(await pa(this[ma])).arrayBuffer()}async blob(){return pa(this[ma])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await pa(this[ma])).text()}}Object.defineProperties(ba.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const xa=new Set([301,302,303,307,308]);class ga extends ba{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":fa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[da]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[da].type}get url(){return this[da].url||""}get status(){return this[da].status}get ok(){return this[da].status>=200&&this[da].status<300}get redirected(){return this[da].counter>0}get statusText(){return this[da].statusText}get headers(){return this[da].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!xa.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[da].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var va=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){let t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=sa(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var wa="OK";let ka=XMLHttpRequest.prototype.send;const Aa=XMLHttpRequest.prototype.open; -//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class Ca extends XMLHttpRequest{constructor(){super(...arguments)}_send=ka;_open=Aa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=wa;const e=sa(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Ma;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ma=Ca) -/*! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 - KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao/ -*/;var ja={Handler:ra,Random:fr,Util:Dn,XHR:Ma,RE:Jr,toJSONSchema:aa,valid:oa,heredoc:Fn,setup:function(e){return Ma.setup(e)},_mocked:ia,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ra.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma&&(window.XMLHttpRequest=Ma),ia.$set({rurl:n,rtype:r,template:t}),ja}};module.exports=ja; +"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function qt(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var $t={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys($t),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries($t).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date($n(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(""))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:$n,isNumber:Dn,random:hn,natural:Pn,int:$n,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return qt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:qt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?$n(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||$n(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=$r[this.offset]||($r[this.offset]=qr++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",qe='"+"',$e=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Sr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]);class xa extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ga=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new xa(e,n)}}return console.warn("未使用 mockjs"),ga(e,n)}var va="OK";const wa=XMLHttpRequest.prototype.send,ka=XMLHttpRequest.prototype.open;class Aa extends XMLHttpRequest{constructor(...e){super(...e)}_send=wa;_open=ka;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=va;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}let Ca;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ca=Aa);const Ma={Handler:ta,Random:sr,Util:_n,XHR:Ca,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ca.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ca&&window&&(window.XMLHttpRequest=Ca),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ma; diff --git a/dist/mock.esm.js b/dist/mock.esm.js index 9fc5dca0..08d5cefe 100644 --- a/dist/mock.esm.js +++ b/dist/mock.esm.js @@ -48,17 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,o=Object.prototype,u=o.hasOwnProperty,l=o.toString,i=r?r.toStringTag:void 0;var c=Object.prototype.toString;var h=r?r.toStringTag:void 0;function s(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":h&&h in Object(e)?function(e){var n=u.call(e,i),t=e[i];try{e[i]=void 0;var r=!0}catch(e){}var a=l.call(e);return r&&(n?e[i]=t:delete e[i]),a}(e):function(e){return c.call(e)}(e)}function f(e){return null!=e&&"object"==typeof e}function m(e){return"symbol"==typeof e||f(e)&&"[object Symbol]"==s(e)}function d(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!k(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ie(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function nn(e){return null==e?[]:function(e,n){return d(n,(function(n){return e[n]}))}(e,Te(e))}var tn=Ce&&Ce.isRegExp,rn=tn?ye(tn):function(e){return f(e)&&"[object RegExp]"==s(e)},an=Math.floor,on=Math.random;function un(e,n){return e+an(on()*(n-e+1))}var ln=parseFloat,cn=Math.min,hn=Math.random;function sn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=hn();return cn(e+a*(n-e+ln("1e-"+((a+"").length-1))),n)}return un(e,n)}var fn=Math.ceil,mn=Math.max;var dn,pn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=mn(fn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);let a=sn(t,r,!1);return parseFloat(sn(e,n,!0).toFixed(a))},Hn=function(e,n,t=!1){ -//! cur:boolean 是划分概率的一个启动符号 -return t?sn(0,e+n)>e?!t:t:sn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const In=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),gn(e)},Bn=function(...e){var n,t,r,a;switch(e.length){case 0:n=zn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof arguments[0]?[t,n]=e:([r,a]=e,n=zn(r,a));break;case 3:[t,r,a]=e,n=zn(r,a)}return En(n,(()=>In(t))).join("")};function Un(e,n){return e(n={exports:{}},n.exports),n.exports}var Gn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Wn=Un((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Jn=Un((function(e){var n={};for(var t in Gn)Gn.hasOwnProperty(t)&&(n[Gn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Gn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Wn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Wn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Wn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Wn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Jn.to,Jn.get;var Kn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Yn=Un((function(e){var n={};for(var t in Kn)Kn.hasOwnProperty(t)&&(n[Kn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),i=l-u;return l===u?n=0:r===l?n=(a-o)/i:a===l?n=2+(o-r)/i:o===l&&(n=4+(r-a)/i),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?i/(l+u):i/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,i=e[2]/255,c=Math.max(u,l,i),h=c-Math.min(u,l,i),s=function(e){return(c-e)/6/h+.5};return 0===h?a=o=0:(o=h/c,n=s(u),t=s(l),r=s(i),u===c?a=r-t:l===c?a=1/3+n-r:i===c&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*c]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Kn)if(Kn.hasOwnProperty(l)){var i=Kn[l],c=(a=e,o=i,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));c.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,i=e[2]/100;if(0===l)return[o=255*i,o,o];n=2*i-(t=i<.5?i*(1+l):i+l-i*l),a=[0,0,0];for(var c=0;c<3;c++)(r=u+1/3*-(c-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[c]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),i=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,i,u];case 1:return[l,r,u];case 2:return[u,r,i];case 3:return[u,l,r];case 4:return[i,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,i=e[0]/360,c=e[1]/100,h=e[2]/100,s=c+h;switch(s>1&&(c/=s,h/=s),r=6*i-(n=Math.floor(6*i)),0!=(1&n)&&(r=1-r),a=c+r*((t=1-h)-c),n){default:case 6:case 0:o=t,u=a,l=c;break;case 1:o=a,u=t,l=c;break;case 2:o=c,u=t,l=a;break;case 3:o=c,u=a,l=t;break;case 4:o=a,u=c,l=t;break;case 5:o=t,u=c,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,i=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=i,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=i,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=i}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Vn(e){var n=function(){for(var e={},n=Object.keys(Yn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var et=Qn,nt=[].slice,tt=["keyword","gray","hex"],rt={};Object.keys(et).forEach((function(e){rt[nt.call(et[e].labels).sort().join("")]=e}));var at={};function ot(e,n){if(!(this instanceof ot))return new ot(e,n);if(n&&n in tt&&(n=null),n&&!(n in et))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof ot)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Jn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=et[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=et[this.model].channels;var o=nt.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in rt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=rt[l];var i=et[this.model].labels,c=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return ot.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,i=1-l;return ot.rgb(l*t.red()+i*r.red(),l*t.green()+i*r.green(),l*t.blue()+i*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(et).forEach((function(e){if(-1===tt.indexOf(e)){var n=et[e].channels;ot.prototype[e]=function(){if(this.model===e)return new ot(this);if(arguments.length)return new ot(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new ot(it(et[this.model][e].raw(this.color)).concat(t),e)},ot[e]=function(t){return"number"==typeof t&&(t=ct(nt.call(arguments),n)),new ot(t,e)}}}));var ht=ot,st={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const ft=function(e,...n){let t,r,a;switch(n.length){case 0:return gn(e);case 1:return[a]=n,kn(e,a);case 2:return[t,r]=n,kn(e,sn(t,r))}},mt=function(e,n,t){let r=Mn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},dt={},pt=function(...e){1===e.length&&(e=e[0]);var n=pt.options.context.templatePath.join("."),t=dt[n]=dt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var bt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let xt;function gt(e,n){return xt=xt||Math.random(),xt+=.618033988749895,xt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ht.hsv(360*xt,100*e,100*n)}function vt(){return gt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};let{firstName:wt,lastName:kt,cfirstName:At,clastName:Ct}=yt;function Mt(){var e=wt.male.concat();return ft(e)}function jt(){return ft(kt)}function Et(){return ft(At)}function Ot(){return ft(Ct)}var St,Rt=new Uint8Array(16);function Tt(){if(!St&&!(St="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return St(Rt)}var Ft=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function _t(e){return"string"==typeof e&&Ft.test(e)}for(var Dt=[],qt=0;qt<256;++qt)Dt.push((qt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Tt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Dt[e[n+0]]+Dt[e[n+1]]+Dt[e[n+2]]+Dt[e[n+3]]+"-"+Dt[e[n+4]]+Dt[e[n+5]]+"-"+Dt[e[n+6]]+Dt[e[n+7]]+"-"+Dt[e[n+8]]+Dt[e[n+9]]+"-"+Dt[e[n+10]]+Dt[e[n+11]]+Dt[e[n+12]]+Dt[e[n+13]]+Dt[e[n+14]]+Dt[e[n+15]]).toLowerCase();if(!_t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const zt=Object.keys(Pt),Lt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{let{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{var t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Ht={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){var n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){var n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){var n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){var n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){var n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){var n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){var n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Ht).join("|")})`,"g");function It(e="yyyy-MM-dd"){return Bt(Ut(),e)}function Bt(e,n){return n.replace(Nt,(function n(t,r){let a=Ht[r];return"function"==typeof a?a(e):a in Ht?n(t,a):e[a]()}))}function Ut(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Gt=0;const Wt=function(e){return Gt+=+e||1},Jt=Wt;function Kt(e=12,n=18){return Qe(En(sn(e,n),(()=>Yt())).join(""))+"."}function Yt(e=3,n=10){return En(sn(e,n),(()=>In("lower"))).join("")}function Vt(e=12,n=18){return En(sn(e,n),(()=>Xt())).join("")+"。"}function Xt(...e){var n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=zn(n,t));break;case 3:[a,n,t]=e,r=zn(n,t)}return kn(a,r).join("")}const Zt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Qt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function er(){return ft(Zt)}function nr(e){return`${Yt()}.${e||tr()}`}function tr(){return ft(Qt)}var rr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ar={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};let{_adSize:or,_screenSize:ur,_videoSize:lr}=rr;const ir=Object.keys(ar);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=ft(or)),r=(r||vt()).replace(/^#/,""),t=(t||vt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}var hr=["东北","华北","华东","华中","华南","西南","西北"];function sr(e){let n;switch(On(e)){case"array":n=e;default:n=[e]}return n}var fr=Object.freeze({__proto__:null,integer:Pn,isNumber:qn,random:sn,natural:zn,int:Pn,float:Ln,boolean:Hn,bool:Hn,character:In,char:In,string:Bn,str:Bn,range:pn,color:function(e){return e||st[e]?st[e].nicer:ft(bt).hex},hex:vt,rgb:function(){return gt().hsv().string()},rgba:function(){return gt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return gt().hsl().string()},_goldenRatioColor:gt,first:Mt,last:jt,name:function(e){return e=e?` ${Mt()} `:" ",`${Mt()}${e}${jt()}`},cfirst:Et,clast:Ot,cname:function(){return Et()+Ot()},capitalize:Qe,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:ft,shuffle:mt,order:pt,d4:function(){return this.natural(1,4)},d6:function(){return this.natural(1,6)},d8:function(){return this.natural(1,8)},d12:function(){return this.natural(1,12)},d20:function(){return this.natural(1,20)},d100:function(){return this.natural(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){var e,n=0,t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=ft(Lt).id+It("yyyyMMdd")+Bn("number",3);for(var r=0;rKt())).join("\n")},word:Yt,sentence:Kt,title:function(e=3,n=7){return En(sn(e,n),(()=>Qe(Yt()))).join("")},ctitle:function(e=3,n=7){return En(sn(e,n),(()=>Xt())).join("")},csentence:Vt,cparagraph:function(e=3,n=7){return En(sn(e,n),(()=>Vt())).join("\n")},cword:Xt,protocol:er,domain:nr,tld:tr,email:function(e){return`${In("lower")}.${Yt()}@${e||Yt()+"."+tr()}`},ip:function(){return[...Array(4)].map((()=>zn(0,255))).join(".")},url:function(e,n){return`${e||er()}://${n||nr()}/${Yt()}`},_patternLetters:Ht,_rformat:Nt,_formatDate:Bt,_randomDate:Ut,time:function(e="HH:mm:ss"){return It(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return It(e)},date:It,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";var t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Bt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Ut(e,n).getTime():Ut().getTime()},_adSize:or,_screenSize:ur,_videoSize:lr,image:cr,img:cr,_brandColors:ar,_brandNames:ir,dataImage:function(e,n){var t;t="undefined"!=typeof document?document.createElement("canvas"):new(module.require("canvas"));var r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=ft(or)),n=void 0!==n?n:e,e=e.split("x");var a=parseInt(e[0],10),o=parseInt(e[1],10),u=ar[ft(ir)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return ft(hr)},province:function(){return ft(Lt).name},city:function(e){var n=ft(Lt),t=ft(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){var n=ft(Lt),t=ft(n.children),r=ft(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){for(var n="",t=0;t<(e||6);t++)n+=zn(0,9);return n},genFile:function(e){return new File(sr(e),Yt())},genBlob:function(){return new Blob(sr(anyData))}}),mr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function dr(e=""){"string"!=typeof e&&(e+="");var n=e.match(mr.RE_KEY),t=n&&n[3]&&n[3].match(mr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(mr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),i=u&&u[2]&&parseInt(u[2],10),c={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:i,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,i):void 0};return Object.keys(c).some((e=>void 0!==e))?c:{}}function pr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:i,templateRoot:c}}){var h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=ft(ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})):r[2]?(o.__order_index=o.__order_index||0,h=ta(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ta(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))}))})):o.forEach(((e,n)=>{h.push(ta(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:i||h,templateRoot:c||o}))})),h)}function br({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Hn(n,e,r):r}function xr(e){let{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function gr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){var u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Ln(n,t,r,a)})):u=n&&!a[2]?t:o,u}function vr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){var l={},i=[],c=[];if(null!=n)(i=mt(Object.keys(e)).slice(0,t)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(let n in e)("function"==typeof e[n]?c:i).push(n);(i=i.concat(c)).forEach((n=>{let t=n.replace(mr.RE_KEY,"$1");l[t]=ta(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});let i=n.match(mr.RE_KEY);i&&i[2]&&"number"===On(e[n])&&(e[n]+=parseInt(i[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function wr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function kr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function Ar(e,n){yr.call(this,e),this.body=n}function Cr(e){Ar.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Mr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Er(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Or(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Sr(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Rr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function Dr(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(yt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ie;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ie;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)}else Pt=e,e=ie;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(vt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ie)):(Pt=e,e=ie),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ie=null,ce="",he="|",se='"|"',fe=function(e,n){return n?new wr(e,n[1]):e},me=function(e,n,t){return new kr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ve=function(){return new yr("end")},ye=function(e,n){return new Mr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",qe='"+"',$e=function(){return new jr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new jr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Cr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Ar("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Ar("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Ar("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Er(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Or(e,n)},gn="Character",vn=/^[^\\\]]/,yn="[^\\\\\\]]",wn=function(e){return new Sr(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},it="\\w",ct='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Dr(e)},gt="\\",vt='"\\\\"',yt=/^[1-9]/,wt="[1-9]",kt=function(e){return new _r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Fr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Tr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Rr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}zr.gen=function(e,n,t){return t=t||{guid:1},zr[e.type]?zr[e.type](e,n,t):zr.token(e,n,t)},zr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return In();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return ft(Nr.split(""));case"non-digit":return ft((Lr+Hr+Ir).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return ft(Ur.split(""));case"non-white-space":return ft((Lr+Hr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return ft((Lr+Hr+Nr).split(""));case"non-word":return ft(Ir.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Hn()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(var r=0;r1&&((a=n.context.path.slice(0)).pop(),a=Vr(a.concat(r)));try{e=r[r.length-1];for(var o=n.context.root,u=n.context.templateRoot,l=1;l1)return Yr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ta(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in fr)&&!(u in fr))return e;o=o?o.split(/\s*,\s*/).map((e=>(mr.RE_PLACEHOLDER.exec(""),mr.RE_PLACEHOLDER.test(e)?Zr(e,n,t,r):e))):[];var i=fr[a]||fr[u];switch(On(i)){case"array":return ft(i);case"function":i.options=r;var c=i.apply(fr,o)||"";return delete i.options,c}}function Qr(e){let{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;var u="";if(o.length){let n=(u+=void 0===t?o:Array(t).fill(o).join("")).match(mr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);let l=Zr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Sn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Bn(t):o;return u}var ea=Object.freeze({__proto__:null,array:pr,boolean:br,function:xr,number:gr,object:vr,regexp:Kr,string:Qr});let na=1;function ta(e,n="",t={}){var r={path:t.path||[na],templatePath:t.templatePath||[na++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=On(e);let o=ea[a];var u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(mr.RE_KEY,"$1"):n,rule:dr(n),context:r}),r.root||(r.root=u),u):e}var ra={gen:ta,extend:Rn};function aa(e,n,t=[]){var r={name:"string"==typeof n?n.replace(mr.RE_KEY,"$1"):n,template:e,type:On(e),rule:dr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>aa(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>aa(e,n,r.path)))}return r}function oa(e,n){for(var t=aa(e),r=ua.diff(t,n),a=0;a(e[n.toLowerCase()]=n,e)),{})},placeholder:Zr,getValueByKeyPath:Yr,normalizePath:Vr,splitPathToArray:Xr});var ua={diff:function(e,n,t){var r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){var a=r.length;return la.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){var a=r.length;switch(e.type){case"string":if(e.template.match(mr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return la.equal("type",e.path,On(n),e.type,r),r.length===a},value:function(e,n,t,r){var a,o=r.length,u=e.rule,l=e.type;if("object"===l||"array"===l||"function"===l)return!0;if(!u.parameters){switch(l){case"regexp":return la.match("value",e.path,n,e.template,r),r.length===o;case"string":if(e.template.match(mr.RE_PLACEHOLDER))return r.length===o}return la.equal("value",e.path,n,e.template,r),r.length===o}switch(l){case"number":var i=(n+"").split(".");i[0]=+i[0],void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("value",e.path,i[0],Math.min(u.min,u.max),r),la.lessThanOrEqualTo("value",e.path,i[0],Math.max(u.min,u.max),r)),void 0!==u.min&&void 0===u.max&&la.equal("value",e.path,i[0],u.min,r,"[value] "+t),u.decimal&&(void 0!==u.dmin&&void 0!==u.dmax&&(la.greaterThanOrEqualTo("value",e.path,i[1].length,u.dmin,r),la.lessThanOrEqualTo("value",e.path,i[1].length,u.dmax,r)),void 0!==u.dmin&&void 0===u.dmax&&la.equal("value",e.path,i[1].length,u.dmin,r));break;case"boolean":break;case"string":a=(a=n.match(new RegExp(e.template,"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r);break;case"regexp":a=(a=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")))?a.length:0,void 0!==u.min&&void 0!==u.max&&(la.greaterThanOrEqualTo("repeat count",e.path,a,u.min,r),la.lessThanOrEqualTo("repeat count",e.path,a,u.max,r)),void 0!==u.min&&void 0===u.max&&la.equal("repeat count",e.path,a,u.min,r)}return r.length===o},properties:function(e,n,t,r){var a=r.length,o=e.rule,u=_n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(la.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),la.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&la.equal("properties length",e.path,u.length,o.min,r)):la.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(var l=0;lr)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=la.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=la.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;var u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=la.message(u),a.push(u),!1}};oa.Diff=ua,oa.Assert=la;const ia={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){for(var t in n=n.toLowerCase(),ia){var r=ia[t];let{rurl:a,rtype:o}=r;if(ha(a,e)&&ha(o,n))return r}return!1}function ha(e,n){switch(On(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function sa({template:e},n){return R(e)?e(n):ta(e)}const fa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],ma=Symbol("Body internals"),da=Symbol("Response internals");async function pa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(a.entries())]):e.body}class ba{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):fa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[ma]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[ma].body}get bodyUsed(){return this[ma].disturbed}async arrayBuffer(){return(await pa(this[ma])).arrayBuffer()}async blob(){return pa(this[ma])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await pa(this[ma])).text()}}Object.defineProperties(ba.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const xa=new Set([301,302,303,307,308]);class ga extends ba{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":fa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[INTERNALS].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[da]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[da].type}get url(){return this[da].url||""}get status(){return this[da].status}get ok(){return this[da].status>=200&&this[da].status<300}get redirected(){return this[da].counter>0}get statusText(){return this[da].statusText}get headers(){return this[da].headers}clone(){if(bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!xa.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[da].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});var va=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){let t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=sa(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var wa="OK";let ka=XMLHttpRequest.prototype.send;const Aa=XMLHttpRequest.prototype.open; -//! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 -class Ca extends XMLHttpRequest{constructor(){super(...arguments)}_send=ka;_open=Aa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=wa;const e=sa(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}var Ma;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ma=Ca) -/*! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 - KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao/ -*/;var ja={Handler:ra,Random:fr,Util:Dn,XHR:Ma,RE:Jr,toJSONSchema:aa,valid:oa,heredoc:Fn,setup:function(e){return Ma.setup(e)},_mocked:ia,version:"1.1.1-es6",mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ra.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma&&(window.XMLHttpRequest=Ma),ia.$set({rurl:n,rtype:r,template:t}),ja}};export default ja; +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function qt(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var $t={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys($t),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries($t).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date($n(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(""))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:$n,isNumber:Dn,random:hn,natural:Pn,int:$n,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return qt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:qt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?$n(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||$n(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=$r[this.offset]||($r[this.offset]=qr++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",qe='"+"',$e=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Sr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]);class xa extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ga=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new xa(e,n)}}return console.warn("未使用 mockjs"),ga(e,n)}var va="OK";const wa=XMLHttpRequest.prototype.send,ka=XMLHttpRequest.prototype.open;class Aa extends XMLHttpRequest{constructor(...e){super(...e)}_send=wa;_open=ka;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=va;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}let Ca;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ca=Aa);const Ma={Handler:ta,Random:sr,Util:_n,XHR:Ca,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ca.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ca&&window&&(window.XMLHttpRequest=Ca),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ma; diff --git a/dist/mock.js b/dist/mock.js new file mode 100644 index 00000000..ada16a9f --- /dev/null +++ b/dist/mock.js @@ -0,0 +1,15398 @@ + +(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol$1 = root.Symbol; + +/** Used for built-in method references. */ +var objectProto$8 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$8.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$7 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto$7.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** Used as references for various `Number` constants. */ +var INFINITY$1 = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$2 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$2 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax$1 = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax$1(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Built-in value references. */ +var Buffer = moduleExports$1 ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = +typedArrayTags[setTag] = typedArrayTags[stringTag$1] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ$1 = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +/** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ +var upperFirst = createCaseFirst('toUpperCase'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +/** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; +} + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : identity; +} + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); +} + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom$1 = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); +} + +/** Built-in method references without a dependency on `root`. */ +var freeParseFloat = parseFloat; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin$1 = Math.min, + nativeRandom = Math.random; + +/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin$1(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; +} + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = createRange(); + +/** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ +function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; +} + +/** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ +function baseSample(collection) { + return arraySample(values$1(collection)); +} + +/** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ +function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); +} + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; +} + +/** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +} + +/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function baseSampleSize(collection, n) { + var array = values$1(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); +} + +/** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ +function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); +} + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); +} + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); +} + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Invokes the iteratee `n` times, returning an array of the results of + * each invocation. The iteratee is invoked with one argument; (index). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of results. + * @example + * + * _.times(3, String); + * // => ['0', '1', '2'] + * + * _.times(4, _.constant(0)); + * // => [0, 0, 0, 0] + */ +function times(n, iteratee) { + n = toInteger(n); + if (n < 1 || n > MAX_SAFE_INTEGER) { + return []; + } + var index = MAX_ARRAY_LENGTH, + length = nativeMin(n, MAX_ARRAY_LENGTH); + + iteratee = castFunction(iteratee); + n -= MAX_ARRAY_LENGTH; + + var result = baseTimes(length, iteratee); + while (++index < n) { + iteratee(index); + } + return result; +} + +// 使用 lodash 提供的方式 +function type(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); +} + +function isObjectOrArray(value) { + return isObject(value) || isArray(value); +} + +function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); +} + +// import { isObject, isArray } from "./type.js"; +function extend(...args) { + return assignIn(this, ...args); +} + +function each(obj, iterator, context) { + // each + let i; + let key; + if (type(obj) === 'number') { + // 表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } +} + +/* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 +*/ +function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, '') + .replace(/\*\/[^\/]+$/, '') + .replace(/^[\s\xA0]+/, '') + .replace(/[\s\xA0]+$/, ''); // .trim() +} + +/* + ## Utilities +*/ +function keys(obj) { + return Object.keys(obj); +} +function values(obj) { + return Object.values(obj); +} +function noop() {} + +var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc +}); + +const isNumber = function (el) { + return typeof el === 'number' && !isNaN(el); +}; +const numberGate = function (input) { + if (isNumber(input)) return input; + const res = parseInt(input); + return isNumber(res) ? res : undefined; +}; +// 返回一个随机的整数。 +const integer = function (min, max) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + return random(min, max, false); +}; +const natural = function (min, max) { + return Math.abs(integer(min, max)); +}; + +const float = function (min, max, dmin, dmax) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + dmin = numberGate(dmin) || 1; + dmax = numberGate(dmax) || 17; + if (dmin < 1) dmin = 1; + if (dmax > 17) dmax = 17; + const dcount = random(dmin, dmax, false); + return parseFloat(random(min, max, true).toFixed(dcount)); +}; + +const boolean$1 = function (min, max, cur = false) { + // ! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; +}; + +const pools = { + lower: 'abcdefghijklmnopqrstuvwxyz', + upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + number: '0123456789', + symbol: '!@#$%^&*()[]', +}; +pools.alpha = pools.lower + pools.upper; +pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + +const character = function (pool = 'default') { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return sample(pool); +}; + +const string$1 = function (...args) { + let len; + let pool; + let min; + let max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof args[0] === 'string') { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return times(len, () => character(pool)).join(''); +}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); +}; + +var simpleSwizzle = createCommonjsModule(function (module) { + + + +var concat = Array.prototype.concat; +var slice = Array.prototype.slice; + +var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; +}; + +swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; +}; +}); + +var colorString = createCommonjsModule(function (module) { +/* MIT license */ + + + +var reverseNames = {}; + +// create a list of reverse color names +for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } +} + +var cs = module.exports = { + to: {}, + get: {} +}; + +cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; +}; + +cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; +}; + +cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; +}; + +cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; +}; + +cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); +}; + +cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; +}; + +cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; +}; + +cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; +}; + +// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax +// (hwb have alpha optional & 1 is default value) +cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; +}; + +cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; + +// helpers +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} + +function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; +} +}); +colorString.to; +colorString.get; + +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var conversions = createCommonjsModule(function (module) { +/* MIT license */ + + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return colorName[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; +}); +conversions.rgb; +conversions.hsl; +conversions.hsv; +conversions.hwb; +conversions.cmyk; +conversions.xyz; +conversions.lab; +conversions.lch; +conversions.hex; +conversions.keyword; +conversions.ansi16; +conversions.ansi256; +conversions.hcg; +conversions.apple; +conversions.gray; + +/* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + +var convert$1 = {}; + +var models = Object.keys(conversions); + +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +var colorConvert = convert$1; + +var _slice = [].slice; + +var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' +]; + +var hashedModelKeys = {}; +Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; +}); + +var limiters = {}; + +function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } +} + +Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } +}; + +// model conversion methods and static constructors +Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } + + var channels = colorConvert[model].channels; + + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } + + if (arguments.length) { + return new Color(arguments, model); + } + + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; +}); + +function roundTo(num, places) { + return Number(num.toFixed(places)); +} + +function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; +} + +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; +} + +function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; +} + +function assertArray(val) { + return Array.isArray(val) ? val : [val]; +} + +function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; +} + +var color$1 = Color; + +/* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) +*/ +var DICT$1 = { + // name value nicer + navy: { + value: '#000080', + nicer: '#001F3F', + }, + blue: { + value: '#0000ff', + nicer: '#0074D9', + }, + aqua: { + value: '#00ffff', + nicer: '#7FDBFF', + }, + teal: { + value: '#008080', + nicer: '#39CCCC', + }, + olive: { + value: '#008000', + nicer: '#3D9970', + }, + green: { + value: '#008000', + nicer: '#2ECC40', + }, + lime: { + value: '#00ff00', + nicer: '#01FF70', + }, + yellow: { + value: '#ffff00', + nicer: '#FFDC00', + }, + orange: { + value: '#ffa500', + nicer: '#FF851B', + }, + red: { + value: '#ff0000', + nicer: '#FF4136', + }, + maroon: { + value: '#800000', + nicer: '#85144B', + }, + fuchsia: { + value: '#ff00ff', + nicer: '#F012BE', + }, + purple: { + value: '#800080', + nicer: '#B10DC9', + }, + silver: { + value: '#c0c0c0', + nicer: '#DDDDDD', + }, + gray: { + value: '#808080', + nicer: '#AAAAAA', + }, + black: { + value: '#000000', + nicer: '#111111', + }, + white: { + value: '#FFFFFF', + nicer: '#FFFFFF', + }, +}; + +/* + ## Helpers +*/ + +const upper = function (str) { + return (str + '').toUpperCase(); +}; + +const lower = function (str) { + return (str + '').toLowerCase(); +}; + +// 从数组中随机选取一个元素,并返回。 +// 更改 pick 函数 , 函数不进行重载 +const pick = function (arr, ...args) { + let min; + let max; + let count; + switch (args.length) { + case 0: + return sample(arr); + case 1: + [count] = args; + return sampleSize(arr, count); + case 2: + [min, max] = args; + return sampleSize(arr, random(min, max)); + } +}; +/* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. +*/ +const shuffle = function (arr, min, max) { + const result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(min, max); + } +}; +/* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ +const Cache = {}; +const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + const options = order.options; + const templatePath = options.context.templatePath.join('.'); + + const cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; +}; + +var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } +]; + +/* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() +*/ + +let _hue; +function _goldenRatioColor(saturation, value) { + const _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== 'number') saturation = 0.5; + if (typeof value !== 'number') value = 0.95; + + return color$1.hsv(_hue * 360, saturation * 100, value * 100); +} + +// 中国色 数据来自于 http://zhongguose.com + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 +function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return pick(RandomColor).hex; +} + +// #DAC0DE +function hex() { + const hsv = _goldenRatioColor(); + return hsv.hex(); +} + +// rgb(128,255,255) +function rgb() { + const hsv = _goldenRatioColor(); + return hsv.hsv().string(); +} +// rgba(128,255,255,0.3) +function rgba() { + const hsv = _goldenRatioColor(); + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); +} + +// hsl(300,80%,90%) +function hsl() { + const hsv = _goldenRatioColor(); + return hsv.hsl().string(); +} + +var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] +}; +var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" +]; +var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" +]; +var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" +]; +var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 +}; + +/* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) +*/ +const { firstName, lastName, cfirstName, clastName } = Name; + +// 随机生成一个常见的英文名。 +function first() { + const names = firstName.male.concat(); + return pick(names); +} + +// 随机生成一个常见的英文姓。 +function last() { + return pick(lastName); +} + +// 随机生成一个常见的英文姓名。 +function name(middle) { + middle = middle ? ` ${first()} ` : ' '; + return `${first()}${middle}${last()}`; +} + +/* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) +*/ +function cfirst() { + return pick(cfirstName); +} /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) +*/ +function clast() { + return pick(clastName); +} +// 随机生成一个常见的中文姓名。 +function cname() { + return cfirst() + clast(); +} + +// Unique ID creation requires a high quality random # generator. In the browser we therefore +// require the crypto API and do not support built-in fallback to lower quality random number +// generators (like Math.random()). +var getRandomValues; +var rnds8 = new Uint8Array(16); +function rng() { + // lazy load so that environments that need to polyfill have a chance to do so + if (!getRandomValues) { + // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, + // find the complete implementation of crypto (msCrypto) on IE11. + getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); + + if (!getRandomValues) { + throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); + } + } + + return getRandomValues(rnds8); +} + +var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +var byteToHex = []; + +for (var i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr) { + var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +function v4(options, buf, offset) { + options = options || {}; + var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (var i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); +} + +var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" +}; + +/* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 +*/ + +// id pid/parentId name children + +// 将扁平数组转化为树状 +function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + const { mapped, result } = all; + const { id, pid } = item; + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 + result.push(item); + return { mapped, result }; + } + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { + // 父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + }, + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; +} +const ids = Object.keys(DICT); + +// 转化数组内对象的表现形式 +const fixed = Object.entries(DICT).map(([id, value]) => { + let pid = + id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; + if (!ids.includes(pid)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + '0000'; + } + return { + id, + pid, + name: value, + }; +}); + +const DICT_FIXED = createTree(fixed); + +var _patternLetters = { + yyyy: 'getFullYear', + yy: function (date) { + return ('' + date.getFullYear()).slice(2); + }, + y: 'yy', + + MM: function (date) { + const m = date.getMonth() + 1; + return m < 10 ? '0' + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + const d = date.getDate(); + return d < 10 ? '0' + d : d; + }, + d: 'getDate', + + HH: function (date) { + const h = date.getHours(); + return h < 10 ? '0' + h : h; + }, + H: 'getHours', + hh: function (date) { + const h = date.getHours() % 12; + return h < 10 ? '0' + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + const m = date.getMinutes(); + return m < 10 ? '0' + m : m; + }, + m: 'getMinutes', + + ss: function (date) { + const s = date.getSeconds(); + return s < 10 ? '0' + s : s; + }, + s: 'getSeconds', + + SS: function (date) { + const ms = date.getMilliseconds(); + return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; + }, + S: 'getMilliseconds', + + A: function (date) { + return date.getHours() < 12 ? 'AM' : 'PM'; + }, + a: function (date) { + return date.getHours() < 12 ? 'am' : 'pm'; + }, + T: 'getTime', +}; + +/* eslint-disable no-fallthrough*/ + +const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); + +// 返回一个随机的日期字符串。 +function date(format = 'yyyy-MM-dd') { + return _formatDate(_randomDate(), format); +} +function datetime(format = 'yyyy-MM-dd HH:mm:ss') { + return date(format); +} +function time(format = 'HH:mm:ss') { + return date(format); +} +function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ''; + } + } + unit = (unit || '').toLowerCase(); + format = format || 'yyyy-MM-dd HH:mm:ss'; + + const date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case 'year': + date.setMonth(0); + case 'month': + date.setDate(1); + case 'week': + case 'day': + date.setHours(0); + case 'hour': + date.setMinutes(0); + case 'minute': + date.setSeconds(0); + case 'second': + date.setMilliseconds(0); + } + switch (unit) { + case 'week': + date.setDate(date.getDate() - date.getDay()); + } + + return _formatDate(date, format); +} + +function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + const targetPattern = _patternLetters[flag]; + return typeof targetPattern === 'function' + ? targetPattern(date) + : targetPattern in _patternLetters + ? creatNewSubString($0, targetPattern) + : date[targetPattern](); + }); +} + +function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); +} + +function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); +} + +/* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) +*/ +function id() { + let id; + let sum = 0; + const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; + const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; + + id = pick(DICT_FIXED).id + date('yyyyMMdd') + string$1('number', 3); + + for (let i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; +} + +/* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ +function guid() { + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); +} + +/* + ## Miscellaneous +*/ +/* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 +*/ +let key = 0; +const increment = function (step) { + return (key += +step || 1); +}; +const inc = increment; + +// Dice +function d4() { + return natural(1, 4); +} +function d6() { + return natural(1, 6); +} +function d8() { + return natural(1, 8); +} +function d12() { + return natural(1, 12); +} +function d20() { + return natural(1, 20); +} +function d100() { + return natural(1, 100); +} + +// 随机生成一个句子,第一个单词的首字母大写。 +function sentence(min = 12, max = 18) { + const len = random(min, max); + const string = times(len, () => word()).join(' '); + return capitalize(string) + '.'; +} + +// 随机生成一个单词。 +function word(min = 3, max = 10) { + const len = random(min, max); + return times(len, () => character('lower')).join(''); +} + +// 随机生成一段文本。 +function paragraph(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => sentence()).join('\n'); +} + +// 随机生成一句标题,其中每个单词的首字母大写。 +function title(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => capitalize(word())).join(''); +} + +function cparagraph(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => csentence()).join('\n'); +} + +// 随机生成一个中文句子。 +function csentence(min = 12, max = 18) { + const len = random(min, max); + return times(len, () => cword()).join('') + '。'; +} +// 随机生成一句中文标题。 +function ctitle(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => cword()).join(''); +} +// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm +const DICT_HANZI = + '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; +// 随机生成一个或多个汉字。 +function cword(...args) { + let len = 1; + let pool = DICT_HANZI; + let min; + let max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === 'string') { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof args[0] === 'string') { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + + return sampleSize(pool, len).join(''); +} + +// 协议簇 +const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); +// 域名后缀 +const tlds = ( + 'com net org edu gov int mil cn ' + + // 国内域名 + 'com.cn net.cn gov.cn org.cn ' + + // 中文国内域名 + '中国 中国互联.公司 中国互联.网络 ' + + // 新国际域名 + 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + + // 世界各国域名后缀 + 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' +).split(' '); + +/* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers +*/ +function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; +} + +// 随机生成一个 URL 协议。 +function protocol() { + return pick(protocols); +} +// 随机生成一个域名。 +function domain(Tld) { + return `${word()}.${Tld || tld()}`; +} +/* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) +*/ +function tld() { + // Top Level Domain + return pick(tlds); +} + +// 随机生成一个邮件地址。 +function email(domain) { + return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; +} +// 随机生成一个 IP 地址。 +function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join('.'); +} + +var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" +]; +var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" +]; +var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" +]; +var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 +}; + +var Addvocate = "#ff6138"; +var Adobe = "#ff0000"; +var Aim = "#fcd20b"; +var Amazon = "#e47911"; +var Android = "#a4c639"; +var AOL = "#0060a3"; +var Atlassian = "#003366"; +var Behance = "#053eff"; +var bitly = "#ee6123"; +var Blogger = "#fc4f08"; +var Boeing = "#0039a6"; +var Carbonmade = "#613854"; +var Cheddar = "#ff7243"; +var Delicious = "#205cc0"; +var Dell = "#3287c1"; +var Designmoo = "#e54a4f"; +var Deviantart = "#4e6252"; +var Devour = "#fd0001"; +var DEWALT = "#febd17"; +var Dribbble = "#ea4c89"; +var Dropbox = "#3d9ae8"; +var Drupal = "#0c76ab"; +var Dunked = "#2a323a"; +var eBay = "#89c507"; +var Ember = "#f05e1b"; +var Engadget = "#00bdf6"; +var Envato = "#528036"; +var Etsy = "#eb6d20"; +var Evernote = "#5ba525"; +var Facebook = "#3b5998"; +var Firefox = "#e66000"; +var Forrst = "#5b9a68"; +var Foursquare = "#25a0ca"; +var Garmin = "#007cc3"; +var GetGlue = "#2d75a2"; +var Gimmebar = "#f70078"; +var GitHub = "#171515"; +var Grooveshark = "#f77f00"; +var Groupon = "#82b548"; +var HelloWallet = "#0085ca"; +var HootSuite = "#003366"; +var Houzz = "#73ba37"; +var HTML5 = "#ec6231"; +var IKEA = "#ffcc33"; +var IMDb = "#f3ce13"; +var Instagram = "#3f729b"; +var Intel = "#0071c5"; +var Intuit = "#365ebf"; +var Kickstarter = "#76cc1e"; +var kippt = "#e03500"; +var Kodery = "#00af81"; +var LastFM = "#c3000d"; +var LinkedIn = "#0e76a8"; +var Livestream = "#cf0005"; +var Lumo = "#576396"; +var Mixpanel = "#a086d3"; +var Meetup = "#e51937"; +var Nokia = "#183693"; +var NVIDIA = "#76b900"; +var Opera = "#cc0f16"; +var Path = "#e41f11"; +var Pinboard = "#0000e6"; +var Pinterest = "#c8232c"; +var PlayStation = "#665cbe"; +var Pocket = "#ee4056"; +var Prezi = "#318bff"; +var Pusha = "#0f71b4"; +var Quora = "#a82400"; +var Rdio = "#008fd5"; +var Readability = "#9c0000"; +var Resource = "#7eb400"; +var Rockpack = "#0ba6ab"; +var Roon = "#62b0d9"; +var RSS = "#ee802f"; +var Salesforce = "#1798c1"; +var Samsung = "#0c4da2"; +var Shopify = "#96bf48"; +var Skype = "#00aff0"; +var Snagajob = "#f47a20"; +var Softonic = "#008ace"; +var SoundCloud = "#ff7700"; +var Spotify = "#81b71a"; +var Sprint = "#fee100"; +var Squarespace = "#121212"; +var StackOverflow = "#ef8236"; +var Staples = "#cc0000"; +var Stripe = "#008cdd"; +var StudyBlue = "#00afe1"; +var StumbleUpon = "#f74425"; +var Technorati = "#40a800"; +var Treehouse = "#5cb868"; +var Trulia = "#5eab1f"; +var Tumblr = "#34526f"; +var Twitter = "#00acee"; +var TYPO3 = "#ff8700"; +var Ubuntu = "#dd4814"; +var Ustream = "#3388ff"; +var Verizon = "#ef1d1d"; +var Vimeo = "#86c9ef"; +var Vine = "#00a478"; +var Virb = "#06afd8"; +var Wooga = "#5b009c"; +var Wunderlist = "#2b88d9"; +var XBOX = "#9bc848"; +var XING = "#126567"; +var Yandex = "#ffcc00"; +var Yelp = "#c41200"; +var YouTube = "#c4302b"; +var Zalongo = "#5498dc"; +var Zendesk = "#78a300"; +var Zerply = "#9dcc7a"; +var Zootool = "#5e8b1d"; +var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool +}; + +/* eslint-disable no-redeclare*/ +const { _adSize, _screenSize, _videoSize } = size; +const _brandNames = Object.keys(_brandColors); + +/* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 +*/ +function image(...args) { + let size; + let background; + let foreground; + let format; + let text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = (foreground || hex()).replace(/^#/, ''); + background = (background || hex()).replace(/^#/, ''); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ + format ? '.' + format : '' + }${text ? '&text=' + text : ''}`; +} +/* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, +*/ +function dataImage(size, text) { + let canvas; + if (typeof document !== 'undefined') { + canvas = document.createElement('canvas'); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + const Canvas = module.require('canvas'); + canvas = new Canvas(); + } + + const ctx = canvas && canvas.getContext && canvas.getContext('2d'); + if (!canvas || !ctx) return ''; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split('x'); + + const width = parseInt(size[0], 10); + const height = parseInt(size[1], 10); + const background = _brandColors[pick(_brandNames)]; + const foreground = '#FFF'; + const textHeight = 14; + const font = 'sans-serif'; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = 'bold ' + textHeight + 'px ' + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL('image/png'); +} + +/* + ## Address +*/ +const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; + +// 随机生成一个大区。 +function region() { + return pick(REGION); +} +// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 +function province() { + return pick(DICT_FIXED).name; +} +// 随机生成一个(中国)市。 +function city(prefix) { + const province = pick(DICT_FIXED); + const city = pick(province.children); + return prefix ? [province.name, city.name].join(' ') : city.name; +} +// 随机生成一个(中国)县。 +function county(prefix) { + const province = pick(DICT_FIXED); + const city = pick(province.children); + const county = pick(city.children) || { + name: '-', + }; + return prefix ? [province.name, city.name, county.name].join(' ') : county.name; +} +// 随机生成一个邮政编码(六位数字)。 +function zip(len) { + let zip = ''; + for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; +} + +// 用于生成 Blob 和 File 型数据的工具 +function prepare(anyData) { + let prepared; + switch (type(anyData)) { + case 'array': + prepared = anyData; + break; + default: + prepared = [anyData]; + } + return prepared; +} +function genFile(anyData) { + return new File(prepare(anyData), word()); +} +function genBlob(anyData) { + return new Blob(prepare(anyData)); +} + +/* + ## Mock.Random + + 工具类,用于生成各种随机数据。 +*/ + +var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + float: float, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip, + genFile: genFile, + genBlob: genBlob +}); + +/* + ## Constant + + 常量集合。 + */ +/* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 +*/ +var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ +}; + +/* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ +/* jshint -W041 */ +function parser$1(name = '') { + if (typeof name !== 'string') name = name + ''; + const parameters = name.match(Constant.RE_KEY); + + const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + const min = range && range[1] && parseInt(range[1], 10); // || 1 + const max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + const result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + const isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; +} + +function array({ + name, + rule: { min, max, parameters, count }, + template, + context: { path, templatePath, root, templateRoot }, +}) { + let result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + }); + }); + } + } + } + return result; +} + +function boolean({ rule: { max, min, parameters }, template = '' }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; +} + +function _function(options) { + const { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); +} + +function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { + let result; + if (decimal) { + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { + result = float(min, max, dmin, dmax); // 内置字符串转数字 + }); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; +} + +function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + const result = {}; + let keys = []; + const fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + const parsedKey = key.replace(Constant.RE_KEY, '$1'); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (const key in template) { + (typeof template[key] === 'function' ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + const parsedKey = key.replace(Constant.RE_KEY, '$1'); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + const inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type(template[key]) === 'number') { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; +} + +/*eslint-disable*/ + +function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); +} + +function Alternate(n, l) { + Token.call(this, 'alternate'), (this.left = n), (this.right = l); +} + +function Match(n) { + Token.call(this, 'match'), (this.body = n.filter(Boolean)); +} + +function Group(n, l) { + Token.call(this, n), (this.body = l); +} + +function CaptureGroup(n) { + Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); +} + +function Quantified(n, l) { + Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); +} + +function Quantifier(n, l) { + Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); +} + +function CharSet(n, l) { + Token.call(this, 'charset'), (this.invert = n), (this.body = l); +} + +function CharacterRange(n, l) { + Token.call(this, 'range'), (this.start = n), (this.end = l); +} + +function Literal(n) { + Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); +} + +function Unicode(n) { + Token.call(this, 'unicode'), (this.code = n.toUpperCase()); +} + +function Hex(n) { + Token.call(this, 'hex'), (this.code = n.toUpperCase()); +} + +function Octal(n) { + Token.call(this, 'octal'), (this.code = n.toUpperCase()); +} + +function BackReference(n) { + Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); +} + +function ControlCharacter(n) { + Token.call(this, 'control-character'), (this.code = n.toUpperCase()); +} + +var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\x08/g, '\\b') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\f/g, '\\f') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return '\\x0' + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return '\\x' + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return '\\u0' + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return '\\u' + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = 'end of input'; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; + } + (this.expected = n), + (this.found = l), + (this.offset = u), + (this.line = t), + (this.column = r), + (this.name = 'SyntaxError'), + (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + '\n' === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : '\r' === e || '\u2028' === e || '\u2029' === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r + ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) + : ((qt = t), (t = il)), + null === t && (t = al), + null !== t + ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) + t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), + null === r && (r = al), + null !== r + ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return ( + (l = qt), + 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), + null !== u && ((Lt = l), (u = wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function s() { + var l, u; + return ( + (l = qt), + 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), + null !== u && ((Lt = l), (u = gl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function h() { + var n, l, u; + return ( + (n = qt), + (l = a()), + null !== l + ? ((u = d()), + null !== u + ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l + ? ((u = k()), + null === u && (u = al), + null !== u + ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return ( + (n = v()), + null === n && + ((n = w()), + null === n && + ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), + n + ); + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) + ? ((c = Fl), qt++) + : ((c = null), 0 === Wt && e(Ql)), + null !== c + ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r + ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r + ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return ( + (l = qt), + 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), + null !== u && ((Lt = l), (u = ql())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function g() { + var l, u; + return ( + (l = qt), + 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), + null !== u && ((Lt = l), (u = Dl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function b() { + var l, u; + return ( + (l = qt), + 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), + null !== u && ((Lt = l), (u = Wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if ( + ((l = qt), + (u = []), + zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), + null !== t) + ) + for (; null !== t; ) + u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r + ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return ( + (n = qt), + (l = c()), + null !== l && ((Lt = n), (l = Yl(l))), + null === l ? ((qt = n), (n = l)) : (n = l), + n + ); + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ( + (Wt++, + (l = qt), + 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), + null !== u) + ) + if ( + (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), + null === t && (t = al), + null !== t) + ) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) + r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o + ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t + ? ((r = U()), + null !== r + ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), + Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return ( + (l = qt), + 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), + null !== u && ((Lt = l), (u = xu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = + tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Su())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function M() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Uu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function D() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), + null !== u && ((Lt = l), (u = Bu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function H() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), + null !== u && ((Lt = l), (u = qu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function O() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), + null !== u && ((Lt = l), (u = Du())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function W() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), + null !== u && ((Lt = l), (u = Wu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function z() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), + null !== u && ((Lt = l), (u = Ju())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function I() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), + null !== u && ((Lt = l), (u = Pu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function J() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), + null !== u && ((Lt = l), (u = Yu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function K() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), + null !== u && ((Lt = l), (u = nt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function N() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), + null !== u && ((Lt = l), (u = tt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function P() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), + null !== u && ((Lt = l), (u = ot())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function V() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), + null !== u && ((Lt = l), (u = at())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function X() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), + null !== u && ((Lt = l), (u = ht())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t + ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t + ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u) + ) { + if ( + ((t = []), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t + ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t + ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t + ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u && ((Lt = l), (u = $t())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t + ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = '', + fl = '|', + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = '^', + vl = '"^"', + wl = function () { + return new Token('start'); + }, + Al = '$', + Cl = '"$"', + gl = function () { + return new Token('end'); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = 'Quantifier', + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = '{', + yl = '"{"', + ml = ',', + Rl = '","', + Fl = '}', + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ',}', + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = '+', + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = '*', + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = '?', + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = '[0-9]', + Jl = function (n) { + return +n.join(''); + }, + Kl = '(', + Nl = '"("', + Pl = ')', + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = '?:', + _l = '"?:"', + nu = function (n) { + return new Group('non-capture-group', n); + }, + lu = '?=', + uu = '"?="', + tu = function (n) { + return new Group('positive-lookahead', n); + }, + ru = '?!', + eu = '"?!"', + ou = function (n) { + return new Group('negative-lookahead', n); + }, + cu = 'CharacterSet', + iu = '[', + au = '"["', + fu = ']', + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = 'CharacterRange', + pu = '-', + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = 'Character', + Cu = /^[^\\\]]/, + gu = '[^\\\\\\]]', + bu = function (n) { + return new Literal(n); + }, + ku = '.', + Tu = '"."', + xu = function () { + return new Token('any-character'); + }, + yu = 'Literal', + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = '[^|\\\\\\/.[()?+*$\\^]', + Fu = '\\b', + Qu = '"\\\\b"', + Su = function () { + return new Token('backspace'); + }, + Uu = function () { + return new Token('word-boundary'); + }, + Eu = '\\B', + Gu = '"\\\\B"', + Bu = function () { + return new Token('non-word-boundary'); + }, + ju = '\\d', + $u = '"\\\\d"', + qu = function () { + return new Token('digit'); + }, + Lu = '\\D', + Mu = '"\\\\D"', + Du = function () { + return new Token('non-digit'); + }, + Hu = '\\f', + Ou = '"\\\\f"', + Wu = function () { + return new Token('form-feed'); + }, + zu = '\\n', + Iu = '"\\\\n"', + Ju = function () { + return new Token('line-feed'); + }, + Ku = '\\r', + Nu = '"\\\\r"', + Pu = function () { + return new Token('carriage-return'); + }, + Vu = '\\s', + Xu = '"\\\\s"', + Yu = function () { + return new Token('white-space'); + }, + Zu = '\\S', + _u = '"\\\\S"', + nt = function () { + return new Token('non-white-space'); + }, + lt = '\\t', + ut = '"\\\\t"', + tt = function () { + return new Token('tab'); + }, + rt = '\\v', + et = '"\\\\v"', + ot = function () { + return new Token('vertical-tab'); + }, + ct = '\\w', + it = '"\\\\w"', + at = function () { + return new Token('word'); + }, + ft = '\\W', + st = '"\\\\W"', + ht = function () { + return new Token('non-word'); + }, + dt = '\\c', + pt = '"\\\\c"', + vt = 'any character', + wt = function (n) { + return new ControlCharacter(n); + }, + At = '\\', + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = '[1-9]', + kt = function (n) { + return new BackReference(n); + }, + Tt = '\\0', + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = '[0-7]', + Rt = function (n) { + return new Octal(n.join('')); + }, + Ft = '\\x', + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = '[0-9a-fA-F]', + Et = function (n) { + return new Hex(n.join('')); + }, + Gt = '\\u', + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join('')); + }, + $t = function () { + return new Token('null-character'); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ('startRule' in el) { + if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw ( + (o(Ot), + (Lt = Math.max(qt, Ht)), + new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) + ); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + +/*eslint-disable*/ +/* + + */ +const Handler$1 = { + extend: extend, +}; + +// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +/* let ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] +}*/ + +// ASCII printable code chart +// let LOWER = 'abcdefghijklmnopqrstuvwxyz' +// let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +// let NUMBER = '0123456789' +// let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' +const LOWER = ascii(97, 122); +const UPPER = ascii(65, 90); +const NUMBER = ascii(48, 57); +const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) +const PRINTABLE = ascii(32, 126); +const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; +const CHARACTER_CLASSES = { + '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) + '\\W': OTHER.replace('_', ''), + '\\s': SPACE, + '\\S': (function () { + let result = PRINTABLE; + for (let i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ''); + } + return result; + })(), + '\\d': NUMBER, + '\\D': LOWER + UPPER + OTHER, +}; + +// 从 from 到 to 包含两个端点的字符串 +function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); +} + +// let ast = RegExpParser.parse(regexp.source) +Handler$1.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); +}; + +Handler$1.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case 'start': + case 'end': + return ''; + case 'any-character': + return character(); + case 'backspace': + return ''; + case 'word-boundary': // TODO + return ''; + case 'non-word-boundary': // TODO + break; + case 'digit': + return pick(NUMBER.split('')); + case 'non-digit': + return pick((LOWER + UPPER + OTHER).split('')); + case 'form-feed': + break; + case 'line-feed': + return node.body || node.text; + case 'carriage-return': + break; + case 'white-space': + return pick(SPACE.split('')); + case 'non-white-space': + return pick((LOWER + UPPER + NUMBER).split('')); + case 'tab': + break; + case 'vertical-tab': + break; + case 'word': // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split('')); + case 'non-word': // \W [^a-zA-Z0-9] + return pick(OTHER.replace('_', '').split('')); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean$1() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ''; + // node.body [] + for (let i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + 'capture-group': function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + 'non-capture-group': function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + 'positive-lookahead': function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + 'negative-lookahead': function (node, result, cache) { + // node.body + return ''; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ''; + // node.quantifier {} + const count = this.quantifier(node.quantifier); + // node.body {} + for (let i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + const min = Math.max(node.min, 0); + const max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this['invert-charset'](node, result, cache); + + // node.body [] + const literal = pick(node.body); + return this.gen(literal, result, cache); + }, + 'invert-charset': function (node, result, cache) { + let pool = PRINTABLE; + for (let i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case 'literal': { + pool = pool.replace(item.body, ''); + break; + } + case 'range': + const min = this.gen(item.start, result, cache).charCodeAt(); + const max = this.gen(item.end, result, cache).charCodeAt(); + for (let ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ''); + } + /* falls through */ + default: + const characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (let iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ''); + } + } + } + } + return pick(pool.split('')); + }, + range: function (node, result, cache) { + // node.start, node.end + const min = this.gen(node.start, result, cache).charCodeAt(); + const max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + 'back-reference': function (node, result, cache) { + return cache[node.code] || ''; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); + const CONTROL_CHARACTER_UNICODE = + '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( + ' ', + ); + const map = {}; + for (let i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + 'control-character': function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, +}); + +var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$1 +}); + +function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + const Source = count === undefined ? source : Array(count).fill(source).join(''); + return Handler$1.gen(parser.parse(Source)); +} + +function getValueByKeyPath(key, options) { + const originalKey = key; + const keyPathParts = splitPathToArray(key); + let absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === '/') { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + let currentContext = options.context.root; + let templateCurrentContext = options.context.templateRoot; + for (let i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === 'object' && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) { + console.log(err); + } + + return '@' + keyPathParts.join('/'); +} +// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js +function normalizePath(pathParts) { + const newPathParts = []; + for (let i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case '..': + newPathParts.pop(); + break; + case '.': + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; +} +function splitPathToArray(path) { + let parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; +} + +// 占位符即是字符串函数的意思 +function placeholder(Placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(''); + let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); + + const lkey = key && key.toLowerCase(); + const pathParts = splitPathToArray(key); + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // 绝对路径 or 相对路径 + if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === 'object' && + key in templateContext && + Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random)) return Placeholder; + + // 解析占位符的参数 + // !不进行低版本浏览器的匹配 + if (params) { + params = params.split(/\s*,\s*/).map((param) => { + // 递归解析参数中的占位符 + Constant.RE_PLACEHOLDER.exec(''); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); + } + return param; + }); + } else { + params = []; + } + + const handle = Random[key] || Random[lkey]; + switch (type(handle)) { + case 'array': { + // 自动从数组中取一个,例如 @areas + return pick(handle); + } + case 'function': { + // 执行占位符方法(大多数情况) + handle.options = options; + const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + } +} + +function string(options) { + const { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = '', + } = options; + let result = ''; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(''); + + // 'email|1-10': '@EMAIL, ', + const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + const phed = placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + if (isNumeric(phed)) { + result = parseFloat(phed, 10); + return true; + } + if (/^(true|false)$/.test(phed)) { + result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 + return true; + } // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; + } + return result; +} + +var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string +}); + +let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 +function gen(template, name = '', context = {}) { + const newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + const type$1 = type(template); + const func = typeset[type$1]; + let data; + + if (func) { + data = func({ + // 属性值类型 + type: type$1, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, + // 解析后的生成规则 + rule: parser$1(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; +} + +/* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + +*/ +/* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot +*/ +const Handler = { + gen, + extend, +}; +Handler.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, +}); +Handler.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, +}); + +/* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + +function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + const result = { + name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, + template, + type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? 'ROOT' : result.name); + + switch (result.type) { + case 'array': + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case 'object': + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } + + return result; +} + +/*eslint-disable*/ + +function valid(template, data) { + const schema = toJSONSchema(template); + const result = Diff.diff(schema, data); + for (let i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; +} + +/* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 +*/ +const Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + const result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + const length = result.length; + + Assert.equal('name', schema.path, name + '', schema.name + '', result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + const length = result.length; + + switch (schema.type) { + case 'string': + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case 'array': + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case 'function': + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } + + Assert.equal('type', schema.path, type(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + const length = result.length; + + const rule = schema.rule; + const templateType = schema.type; + if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case 'regexp': + Assert.match('value', schema.path, data, schema.template, result); + return result.length === length; + case 'string': + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal('value', schema.path, data, schema.template, result); + return result.length === length; + } + + // 有生成规则 + let actualRepeatCount; + switch (templateType) { + case 'number': + const parts = (data + '').split('.'); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case 'boolean': + break; + + case 'string': + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case 'regexp': + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + break; + } + + return result.length === length; + }, + properties: function (schema, data, name, result) { + const length = result.length; + + const rule = schema.rule; + const keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('properties length', schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + 'properties length', + schema.path, + keys$1.length, + Math.min(rule.min, rule.max), + result, + ); + Assert.lessThanOrEqualTo( + 'properties length', + schema.path, + keys$1.length, + Math.max(rule.min, rule.max), + result, + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal('properties length', schema.path, keys$1.length, rule.min, result); + } + } + + if (result.length !== length) return false; + + for (let i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + let property; + each(schema.properties, function (item /* , index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i], + ), + ); + } + + return result.length === length; + }, + items: function (schema, data, name, result) { + const length = result.length; + + if (!schema.items) return; + + const rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('items length', schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + 'items', + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', + ); + Assert.lessThanOrEqualTo( + 'items', + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + + if (result.length !== length) return false; + + for (let i = 0; i < data.length; i++) { + result.push.apply( + result, + this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), + ); + } + + return result.length === length; + }, +}; + +/* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + +*/ +const Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace('{utype}', item.type.toUpperCase()) + .replace('{ltype}', item.type.toLowerCase()) + .replace('{path}', (isArray(item.path) && item.path.join('.')) || item.path) + .replace('{action}', item.action) + .replace('{expected}', item.expected) + .replace('{actual}', item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case 'type': + // 正则模板 === 字符串最终值 + if (expected === 'regexp' && actual === 'string') return true; + break; + } + + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'matches', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is not equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than or equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less than or equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, +}; + +valid.Diff = Diff; +valid.Assert = Assert; + +// 集中管理 mocked 的 url + +const _mocked = { + $set(value) { + this[value.rurl + value.rtype.toLowerCase()] = value; + }, + $delete(key) { + delete this[key]; + }, +}; + +// 查找与请求参数匹配的数据模板:URL,Type +function find({ url, type }) { + type = type.toLowerCase(); + for (const sUrlType in _mocked) { + const item = _mocked[sUrlType]; + const { rurl, rtype } = item; + if (match(rurl, url) && match(rtype, type)) { + // console.log('[mock]', url, '>', item.rurl) + return item; + } + } + return false; +} + +function match(expected, actual) { + switch (type(expected)) { + case 'string': + return expected === actual; + case 'regexp': + return expected.test(actual); + default: + return false; + } +} + +// 数据模板 => 响应数据 +function convert({ template }, options) { + return isFunction(template) ? template(options) : gen(template); +} + +/** + * Check if `obj` is a URLSearchParams object + * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 + * + * @param {*} obj + * @return {boolean} + */ +const isURLSearchParameters = (object) => { + return ( + typeof object === 'object' && + typeof object.append === 'function' && + typeof object.delete === 'function' && + typeof object.get === 'function' && + typeof object.getAll === 'function' && + typeof object.has === 'function' && + typeof object.set === 'function' && + typeof object.sort === 'function' && + object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 + ); +}; + +const BODY = Symbol('Body internals'); +const RESPONSE = Symbol('Response internals'); + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +async function consumeBody(data) { + // 标记为已经使用 + if (data.disturbed) { + throw new TypeError(`body used already for: ${data.url}`); + } + data.disturbed = true; + + // 报错 + if (data.error) { + throw data.error; + } + + if (data.body instanceof FormData) { + return new Blob([Object.fromEntries(data.body.entries())]); + } + return data.body; +} + +/** + * Body.js + * + * Body interface provides common methods for Request and Response + */ +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Body { + constructor(body, { size = 0 } = {}) { + if (body === null) { + // Body is undefined or null + body = new Blob([]); + } else if (isURLSearchParameters(body)) { + // Body is a URLSearchParams + body = new Blob([body]); + } else if (ArrayBuffer.isView(body)) { + // Body is ArrayBufferView + body = new Blob([body]); + } else { + body = new Blob([JSON.stringify(body)]); + } + + this[BODY] = { + body, + boundary: null, + disturbed: false, + error: null, + }; + this.size = size; + } + + get body() { + return this[BODY].body; + } + + get bodyUsed() { + return this[BODY].disturbed; + } + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + async arrayBuffer() { + const blob = await consumeBody(this[BODY]); + return blob.arrayBuffer(); + } + + /** + * Return raw response as Blob + * + * @return Promise + */ + async blob() { + return consumeBody(this[BODY]); + } + + /** + * Decode response as json + * + * @return Promise + */ + async json() { + const text = await this.text(); + return JSON.parse(text || '{}'); + } + + /** + * Decode response as text + * + * @return Promise + */ + async text() { + const blob = await consumeBody(this[BODY]); + return blob.text(); + } + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ +} + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true }, +}); + +/** + * Performs the operation "extract a `Content-Type` value from |object|" as + * specified in the specification: + * https://fetch.spec.whatwg.org/#concept-bodyinit-extract + * + * This function assumes that instance.body is present. + * + * @param {any} body Any options.body input + * @return {string | null} + */ +const extractContentType = (body, request) => { + // Body is null or undefined + if (body === null) { + return null; + } + + // Body is string + if (typeof body === 'string') { + return 'text/plain;charset=UTF-8'; + } + + // Body is a URLSearchParams + if (isURLSearchParameters(body)) { + return 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // Body is blob + if (body instanceof Blob) { + return body.type || null; + } + + if (body instanceof FormData) { + return `multipart/form-data; boundary=${request[BODY].boundary}`; + } + + // Body constructor defaults other things to string + return 'text/plain;charset=UTF-8'; +}; + +const redirectStatus = new Set([301, 302, 303, 307, 308]); + +/** + * Redirect code matching + * + * @param {number} code - Status code + * @return {boolean} + */ +const isRedirect = (code) => { + return redirectStatus.has(code); +}; + +/** + * Response.js + * + * Response class provides content decoding + */ +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class fakeResponse extends Body { + constructor(body = null, options = {}) { + super(body, options); + const status = options.status != null ? options.status : 200; + const headers = new Headers(options.headers); + if (body !== null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + this[RESPONSE] = { + type: 'default', + url: options.url, + status, + statusText: options.statusText || '', + headers, + counter: options.counter, + }; + } + + get type() { + return this[RESPONSE].type; + } + + get url() { + return this[RESPONSE].url || ''; + } + + get status() { + return this[RESPONSE].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; + } + + get redirected() { + return this[RESPONSE].counter > 0; + } + + get statusText() { + return this[RESPONSE].statusText; + } + + get headers() { + return this[RESPONSE].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + // Don't allow cloning a used body + if (this.bodyUsed) { + throw new Error('cannot clone body after it is used'); + } + return new Response(this.body, { + type: this.type, + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected, + size: this.size, + }); + } + + /** + * @param {string} url The URL that the new response is to originate from. + * @param {number} status An optional status code for the response (e.g., 302.) + * @return {Response} A Response object. + */ + static redirect(url, status = 302) { + if (!isRedirect(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + + return new Response(null, { + headers: { + location: new URL(url).toString(), + }, + status, + }); + } + + static error() { + const response = new Response(null, { status: 0, statusText: '' }); + response[RESPONSE].type = 'error'; + return response; + } + + get [Symbol.toStringTag]() { + return 'Response'; + } +} + +Object.defineProperties(Response.prototype, { + type: { enumerable: true }, + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true }, +}); + +const realFetch = window && window.fetch; +function mockFetch() { + // 代理 fetch 的初始化函数 + if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { + window.fetch = fakeFetch; + window.fetch.$mock = true; + console.warn('fetch 已经被代理'); + } +} + +async function fakeFetch(url, options = {}) { + if (window.fetch.$mock === true) { + // 只有在 $mock 标记为 true 时才进行代理 + const result = find({ + url, + type: (options.method || 'get').toLowerCase(), + }); + if (result) { + const data = convert(result, {}); + console.warn('mock代理中'); + return new fakeResponse(data, options); + } + } + + console.warn('未使用 mockjs'); + return realFetch(url, options); +} + +var HTTP_STATUS_CODES = { + 100: 'Continue', + 101: 'Switching Protocols', + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 300: 'Multiple Choice', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 307: 'Temporary Redirect', + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 422: 'Unprocessable Entity', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', +}; + +// 使用不完全覆盖的方式,使用继承方式继承所有的属性 + +const SEND = XMLHttpRequest.prototype.send; +const OPEN = XMLHttpRequest.prototype.open; + +// ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 + +// 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, +// 也不可以在 XHR 实例上定义 +// 这样的话会导致无法接收到数据 +// 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 +const defineGetAndSet = function (what) { + const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; + Object.defineProperties( + what, + array.reduce((col, cur) => { + col[cur] = { + get() { + return this.$Mock[cur]; + }, + set: function (state) { + this.$Mock[cur] = state; + }, + }; + return col; + }, {}), + ); +}; +class MockXMLHttpRequest extends XMLHttpRequest { + constructor(...args) { + super(...args); + } + _send = SEND; + _open = OPEN; + open(method, url, async, username, password) { + // 不进行同步操作 + this._open(method, url, true, username, password); + this.$url = url; + this.$type = method.toLowerCase(); + } + send(body) { + if (this.$mock) { + this.$template = find({ url: this.$url, type: this.$type }); + if (this.$template) { + defineGetAndSet(this); + this.dispatchEvent(new Event('loadstart')); + + setTimeout(this.$done.bind(this), this.timeout || 100); + return null; + } + } + this._send(body); + } + get mock() { + return this.$mock; + } + set mock(value) { + if (typeof value === 'boolean') this.$mock = value; + } + $Mock = { + // 原生属性的 getter 和 setter + readyState: 0, + status: 200, + response: '', + responseText: '', + statusText: '', + }; + $type = 'get'; + $url = ''; + $mock = true; + $template = null; + + $done() { + this.readyState = this.HEADERS_RECEIVED; + this.dispatchEvent(new Event('readystatechange')); + this.readyState = this.LOADING; + this.dispatchEvent(new Event('readystatechange')); + + this.status = 200; + this.statusText = HTTP_STATUS_CODES[200]; + const data = convert(this.$template, {}); + this.response = data; + this.responseText = this.response; + this.readyState = this.DONE; + this.dispatchEvent(new Event('readystatechange')); + this.dispatchEvent(new Event('load')); + this.dispatchEvent(new Event('loadend')); + } +} + +// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 +typeof window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 + +let XHR; +if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; + +function mock(...args) { + let rurl; + let rtype = 'get'; + let template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + break; + case 3: + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; + } + + // 拦截 XHR + XHR && window && (window.XMLHttpRequest = XHR); + + _mocked.$set({ + rurl, + rtype, + template, + }); + return null; +} + +// global require, module, window + +/* ! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao/ +*/ + +const Mock = { + Handler, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return XHR.setup(settings); + }, + _mocked, + mock, +}; + +Mock.version = '1.1.1-es6'; + +export default Mock; diff --git a/src/mock.js b/src/mock.js index 062b79eb..248b3086 100644 --- a/src/mock.js +++ b/src/mock.js @@ -7,7 +7,7 @@ import { toJSONSchema } from './mock/schema/index.js'; import { valid } from './mock/valid/index.js'; import { _mocked } from './mock/_mocked.js'; import { XHR } from './mock/XHR.js'; -import { mock } from './mock'; +import { mock } from './mock/mock'; /* ! Mock - 模拟请求 & 模拟数据 diff --git a/src/mock/XHR.js b/src/mock/XHR.js index 6ee9e6c0..00691118 100644 --- a/src/mock/XHR.js +++ b/src/mock/XHR.js @@ -1,4 +1,4 @@ -import { MockXMLHttpRequest } from './mock/xhr/index.js'; +import { MockXMLHttpRequest } from './xhr/index.js'; let XHR; if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; export { XHR }; diff --git a/src/mock/mock.js b/src/mock/mock.js index 38574263..66e96e15 100644 --- a/src/mock/mock.js +++ b/src/mock/mock.js @@ -1,5 +1,5 @@ -import Handler from './mock/handler.js'; -import { _mocked } from './mock/_mocked.js'; +import Handler from './handler.js'; +import { _mocked } from './_mocked.js'; import { XHR } from './XHR.js'; export function mock(...args) { let rurl; diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index 628ac189..cd6e4bd9 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -4,7 +4,7 @@ import { capitalize } from '../helper.js'; // 随机生成一个句子,第一个单词的首字母大写。 function sentence(min = 12, max = 18) { const len = random(min, max); - const string = times(len, () => word()).join(''); + const string = times(len, () => word()).join(' '); return capitalize(string) + '.'; } diff --git a/test/index.html b/test/index.html index dba72d1c..4d417c5b 100644 --- a/test/index.html +++ b/test/index.html @@ -13,9 +13,9 @@ - + - \ No newline at end of file + From d143cf4f39696fba3d8b513b514c94f35a607809 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 18:56:53 +0800 Subject: [PATCH 35/65] 0.9.11 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7590501..81e5ae9b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.10", + "version": "0.9.11", "homepage": "http://mockjs.com/", "keywords": [ "mock", From a71290e6e4cdd3ee400274b2335a4388cd847476 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 20:21:32 +0800 Subject: [PATCH 36/65] =?UTF-8?q?feat:=20=E5=AF=B9=20node=20=E9=80=82?= =?UTF-8?q?=E9=85=8D=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/Mock.min.js | 15454 +-------------------------- dist/mock.cjs.js | 15450 +++++++++++++++++++++++++- dist/mock.esm.js | 2 +- dist/mock.js | 15398 -------------------------- package.json | 14 +- rollup.config.cjs.dev.js | 35 + rollup.config.dev.js | 22 +- src/mock/XHR.js | 5 +- src/mock/mock.js | 2 +- src/mock/xhr/XMLHttpRequest/xhr.js | 11 +- src/mock/xhr/fetch/fetch.js | 1 + src/mock/xhr/fetch/src/response.js | 1 + src/mock/xhr/index.js | 2 +- test/common.test.js | 11 +- yarn.lock | 9 +- 15 files changed, 15536 insertions(+), 30881 deletions(-) delete mode 100644 dist/mock.js create mode 100644 rollup.config.cjs.dev.js diff --git a/dist/Mock.min.js b/dist/Mock.min.js index ff7e908a..40ff356c 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -1,15403 +1,51 @@ - -(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); -var Mock = (function () { - 'use strict'; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Built-in value references. */ - var Symbol$1 = root.Symbol; - - /** Used for built-in method references. */ - var objectProto$8 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString$1 = objectProto$8.toString; - - /** Built-in value references. */ - var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; - } - - /** Used for built-in method references. */ - var objectProto$7 = Object.prototype; - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto$7.toString; - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** `Object#toString` result references. */ - var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - - /** Built-in value references. */ - var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** `Object#toString` result references. */ - var symbolTag = '[object Symbol]'; - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** Used as references for various `Number` constants. */ - var INFINITY$1 = 1 / 0; - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; - } - - /** Used to match a single whitespace character. */ - var reWhitespace = /\s/; - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ - function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; - } - - /** Used to match leading whitespace. */ - var reTrimStart = /^\s+/; - - /** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ - function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** Used as references for various `Number` constants. */ - var NAN = 0 / 0; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Built-in method references without a dependency on `root`. */ - var freeParseInt = parseInt; - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** `Object#toString` result references. */ - var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** Used to detect overreaching core-js shims. */ - var coreJsData = root['__core-js_shared__']; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** Used for built-in method references. */ - var funcProto$1 = Function.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString$1 = funcProto$1.toString; - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used for built-in method references. */ - var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeNow = Date.now; - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; - } - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER$2 = 9007199254740991; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$2 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** Used for built-in method references. */ - var objectProto$5 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMax$1 = Math.max; - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER$1 = 9007199254740991; - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; - } - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - /** Used for built-in method references. */ - var objectProto$4 = Object.prototype; - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** `Object#toString` result references. */ - var argsTag$1 = '[object Arguments]'; - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; - } - - /** Used for built-in method references. */ - var objectProto$3 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - - /** Built-in value references. */ - var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ - function stubFalse() { - return false; - } - - /** Detect free variable `exports`. */ - var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - - /** Built-in value references. */ - var Buffer = moduleExports$1 ? root.Buffer : undefined; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = - typedArrayTags[setTag] = typedArrayTags[stringTag$1] = - typedArrayTags[weakMapTag] = false; - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** Used for built-in method references. */ - var objectProto$2 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeKeys = overArg(Object.keys, Object); - - /** Used for built-in method references. */ - var objectProto$1 = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** Used for built-in method references. */ - var objectProto = Object.prototype; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsZWJ$1 = '\\u200d'; - - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; - } - - /** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ - var upperFirst = createCaseFirst('toUpperCase'); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function castFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** `Object#toString` result references. */ - var stringTag = '[object String]'; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); - } - - /** `Object#toString` result references. */ - var regexpTag = '[object RegExp]'; - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /* Node.js helper references. */ - var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); - } - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMin$1 = Math.min, - nativeRandom = Math.random; - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin$1(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeMax = Math.max; - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - var range = createRange(); - - /** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; - } - - /** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ - function baseSample(collection) { - return arraySample(values$1(collection)); - } - - /** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - /** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ - function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - /** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - /** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ - function baseSampleSize(collection, n) { - var array = values$1(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - /** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ - function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - /** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - /** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ - function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); - } - - /** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ - function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - /** Used as references for various `Number` constants. */ - var MAX_SAFE_INTEGER = 9007199254740991; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295; - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeMin = Math.min; - - /** - * Invokes the iteratee `n` times, returning an array of the results of - * each invocation. The iteratee is invoked with one argument; (index). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of results. - * @example - * - * _.times(3, String); - * // => ['0', '1', '2'] - * - * _.times(4, _.constant(0)); - * // => [0, 0, 0, 0] - */ - function times(n, iteratee) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER) { - return []; - } - var index = MAX_ARRAY_LENGTH, - length = nativeMin(n, MAX_ARRAY_LENGTH); - - iteratee = castFunction(iteratee); - n -= MAX_ARRAY_LENGTH; - - var result = baseTimes(length, iteratee); - while (++index < n) { - iteratee(index); - } - return result; - } - - // 使用 lodash 提供的方式 - function type(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); - } - - function isObjectOrArray(value) { - return isObject(value) || isArray(value); - } - - function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); - } - - // import { isObject, isArray } from "./type.js"; - function extend(...args) { - return assignIn(this, ...args); - } - - function each(obj, iterator, context) { - // each - let i; - let key; - if (type(obj) === 'number') { - // 表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } - } - - /* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 - */ - function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '') - .replace(/[\s\xA0]+$/, ''); // .trim() - } - - /* - ## Utilities - */ - function keys(obj) { - return Object.keys(obj); - } - function values(obj) { - return Object.values(obj); - } - function noop() {} - - var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc - }); - - const isNumber = function (el) { - return typeof el === 'number' && !isNaN(el); - }; - const numberGate = function (input) { - if (isNumber(input)) return input; - const res = parseInt(input); - return isNumber(res) ? res : undefined; - }; - // 返回一个随机的整数。 - const integer = function (min, max) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - return random(min, max, false); - }; - const natural = function (min, max) { - return Math.abs(integer(min, max)); - }; - - const float = function (min, max, dmin, dmax) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - dmin = numberGate(dmin) || 1; - dmax = numberGate(dmax) || 17; - if (dmin < 1) dmin = 1; - if (dmax > 17) dmax = 17; - const dcount = random(dmin, dmax, false); - return parseFloat(random(min, max, true).toFixed(dcount)); - }; - - const boolean$1 = function (min, max, cur = false) { - // ! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; - }; - - const pools = { - lower: 'abcdefghijklmnopqrstuvwxyz', - upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - number: '0123456789', - symbol: '!@#$%^&*()[]', - }; - pools.alpha = pools.lower + pools.upper; - pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - - const character = function (pool = 'default') { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return sample(pool); - }; - - const string$1 = function (...args) { - let len; - let pool; - let min; - let max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof args[0] === 'string') { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return times(len, () => character(pool)).join(''); - }; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - - var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); - }; - - var simpleSwizzle = createCommonjsModule(function (module) { - - - - var concat = Array.prototype.concat; - var slice = Array.prototype.slice; - - var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; - }; - - swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; - }; - }); - - var colorString = createCommonjsModule(function (module) { - /* MIT license */ - - - - var reverseNames = {}; - - // create a list of reverse color names - for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } - } - - var cs = module.exports = { - to: {}, - get: {} - }; - - cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; - }; - - cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; - }; - - cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; - }; - - cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; - }; - - cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); - }; - - cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; - }; - - cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; - }; - - cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; - }; - - // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax - // (hwb have alpha optional & 1 is default value) - cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; - }; - - cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; - }; - - // helpers - function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); - } - - function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; - } - }); - colorString.to; - colorString.get; - - var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] - }; - - var conversions = createCommonjsModule(function (module) { - /* MIT license */ - - - // NOTE: conversions should only return primitive values (i.e. arrays, or - // values that give correct `typeof` results). - // do not use box values types (i.e. Number(), String(), etc.) - - var reverseKeywords = {}; - for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } - } - - var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} - }; - - // hide .channels and .labels properties - for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } - } - - convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; - }; - - convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; - }; - - convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; - }; - - convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; - }; - - /** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ - function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); - } - - convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; - }; - - convert.keyword.rgb = function (keyword) { - return colorName[keyword]; - }; - - convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; - }; - - convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; - }; - - convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; - }; - - convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } - }; - - convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; - }; - - // http://dev.w3.org/csswg/css-color/#hwb-to-rgb - convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; - }; - - convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; - }; - - convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; - }; - - convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; - }; - - convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; - }; - - convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; - }; - - convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; - }; - - convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); - }; - - convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; - }; - - convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; - }; - - convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; - }; - - convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; - }; - - convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; - }; - - convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; - }; - - convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; - }; - - convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; - }; - - convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; - }; - - convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; - }; - - convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; - }; - - convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; - }; - - convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; - }; - - convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; - }; - - convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; - }; - - convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; - }; - - convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; - }; - - convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; - }; - - convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; - }; - - convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; - }; - - convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; - }; - }); - conversions.rgb; - conversions.hsl; - conversions.hsv; - conversions.hwb; - conversions.cmyk; - conversions.xyz; - conversions.lab; - conversions.lch; - conversions.hex; - conversions.keyword; - conversions.ansi16; - conversions.ansi256; - conversions.hcg; - conversions.apple; - conversions.gray; - - /* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. - */ - - function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; - } - - // https://en.wikipedia.org/wiki/Breadth-first_search - function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; - } - - function link(from, to) { - return function (args) { - return to(from(args)); - }; - } - - function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; - } - - var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; - }; - - var convert$1 = {}; - - var models = Object.keys(conversions); - - function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; - } - - models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); - }); - - var colorConvert = convert$1; - - var _slice = [].slice; - - var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' - ]; - - var hashedModelKeys = {}; - Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; - }); - - var limiters = {}; - - function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } - } - - Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } - }; - - // model conversion methods and static constructors - Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; - }); - - function roundTo(num, places) { - return Number(num.toFixed(places)); - } - - function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; - } - - function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; - } - - function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; - } - - function assertArray(val) { - return Array.isArray(val) ? val : [val]; - } - - function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; - } - - var color$1 = Color; - - /* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) - */ - var DICT$1 = { - // name value nicer - navy: { - value: '#000080', - nicer: '#001F3F', - }, - blue: { - value: '#0000ff', - nicer: '#0074D9', - }, - aqua: { - value: '#00ffff', - nicer: '#7FDBFF', - }, - teal: { - value: '#008080', - nicer: '#39CCCC', - }, - olive: { - value: '#008000', - nicer: '#3D9970', - }, - green: { - value: '#008000', - nicer: '#2ECC40', - }, - lime: { - value: '#00ff00', - nicer: '#01FF70', - }, - yellow: { - value: '#ffff00', - nicer: '#FFDC00', - }, - orange: { - value: '#ffa500', - nicer: '#FF851B', - }, - red: { - value: '#ff0000', - nicer: '#FF4136', - }, - maroon: { - value: '#800000', - nicer: '#85144B', - }, - fuchsia: { - value: '#ff00ff', - nicer: '#F012BE', - }, - purple: { - value: '#800080', - nicer: '#B10DC9', - }, - silver: { - value: '#c0c0c0', - nicer: '#DDDDDD', - }, - gray: { - value: '#808080', - nicer: '#AAAAAA', - }, - black: { - value: '#000000', - nicer: '#111111', - }, - white: { - value: '#FFFFFF', - nicer: '#FFFFFF', - }, - }; - - /* - ## Helpers - */ - - const upper = function (str) { - return (str + '').toUpperCase(); - }; - - const lower = function (str) { - return (str + '').toLowerCase(); - }; - - // 从数组中随机选取一个元素,并返回。 - // 更改 pick 函数 , 函数不进行重载 - const pick = function (arr, ...args) { - let min; - let max; - let count; - switch (args.length) { - case 0: - return sample(arr); - case 1: - [count] = args; - return sampleSize(arr, count); - case 2: - [min, max] = args; - return sampleSize(arr, random(min, max)); - } - }; - /* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. - */ - const shuffle = function (arr, min, max) { - const result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(min, max); - } - }; - /* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ - const Cache = {}; - const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - const options = order.options; - const templatePath = options.context.templatePath.join('.'); - - const cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; - }; - - var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } - ]; - - /* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() - */ - - let _hue; - function _goldenRatioColor(saturation, value) { - const _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== 'number') saturation = 0.5; - if (typeof value !== 'number') value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); - } - - // 中国色 数据来自于 http://zhongguose.com - - // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 - function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; - } - - // #DAC0DE - function hex() { - const hsv = _goldenRatioColor(); - return hsv.hex(); - } - - // rgb(128,255,255) - function rgb() { - const hsv = _goldenRatioColor(); - return hsv.hsv().string(); - } - // rgba(128,255,255,0.3) - function rgba() { - const hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); - } - - // hsl(300,80%,90%) - function hsl() { - const hsv = _goldenRatioColor(); - return hsv.hsl().string(); - } - - var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] - }; - var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" - ]; - var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" - ]; - var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" - ]; - var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 - }; - - /* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) - */ - const { firstName, lastName, cfirstName, clastName } = Name; - - // 随机生成一个常见的英文名。 - function first() { - const names = firstName.male.concat(); - return pick(names); - } - - // 随机生成一个常见的英文姓。 - function last() { - return pick(lastName); - } - - // 随机生成一个常见的英文姓名。 - function name(middle) { - middle = middle ? ` ${first()} ` : ' '; - return `${first()}${middle}${last()}`; - } - - /* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) - */ - function cfirst() { - return pick(cfirstName); - } /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) - */ - function clast() { - return pick(clastName); - } - // 随机生成一个常见的中文姓名。 - function cname() { - return cfirst() + clast(); - } - - // Unique ID creation requires a high quality random # generator. In the browser we therefore - // require the crypto API and do not support built-in fallback to lower quality random number - // generators (like Math.random()). - var getRandomValues; - var rnds8 = new Uint8Array(16); - function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); - } - - var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - - function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); - } - - /** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - - var byteToHex = []; - - for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); - } - - function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; - } - - function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); - } - - var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" - }; - - /* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 - */ - - // id pid/parentId name children - - // 将扁平数组转化为树状 - function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - const { mapped, result } = all; - const { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - // 父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - }, - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; - } - const ids = Object.keys(DICT); - - // 转化数组内对象的表现形式 - const fixed = Object.entries(DICT).map(([id, value]) => { - let pid = - id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + '0000'; - } - return { - id, - pid, - name: value, - }; - }); - - const DICT_FIXED = createTree(fixed); - - var _patternLetters = { - yyyy: 'getFullYear', - yy: function (date) { - return ('' + date.getFullYear()).slice(2); - }, - y: 'yy', - - MM: function (date) { - const m = date.getMonth() + 1; - return m < 10 ? '0' + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - const d = date.getDate(); - return d < 10 ? '0' + d : d; - }, - d: 'getDate', - - HH: function (date) { - const h = date.getHours(); - return h < 10 ? '0' + h : h; - }, - H: 'getHours', - hh: function (date) { - const h = date.getHours() % 12; - return h < 10 ? '0' + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - const m = date.getMinutes(); - return m < 10 ? '0' + m : m; - }, - m: 'getMinutes', - - ss: function (date) { - const s = date.getSeconds(); - return s < 10 ? '0' + s : s; - }, - s: 'getSeconds', - - SS: function (date) { - const ms = date.getMilliseconds(); - return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; - }, - S: 'getMilliseconds', - - A: function (date) { - return date.getHours() < 12 ? 'AM' : 'PM'; - }, - a: function (date) { - return date.getHours() < 12 ? 'am' : 'pm'; - }, - T: 'getTime', - }; - - /* eslint-disable no-fallthrough*/ - - const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); - - // 返回一个随机的日期字符串。 - function date(format = 'yyyy-MM-dd') { - return _formatDate(_randomDate(), format); - } - function datetime(format = 'yyyy-MM-dd HH:mm:ss') { - return date(format); - } - function time(format = 'HH:mm:ss') { - return date(format); - } - function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ''; - } - } - unit = (unit || '').toLowerCase(); - format = format || 'yyyy-MM-dd HH:mm:ss'; - - const date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case 'year': - date.setMonth(0); - case 'month': - date.setDate(1); - case 'week': - case 'day': - date.setHours(0); - case 'hour': - date.setMinutes(0); - case 'minute': - date.setSeconds(0); - case 'second': - date.setMilliseconds(0); - } - switch (unit) { - case 'week': - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); - } - - function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - const targetPattern = _patternLetters[flag]; - return typeof targetPattern === 'function' - ? targetPattern(date) - : targetPattern in _patternLetters - ? creatNewSubString($0, targetPattern) - : date[targetPattern](); - }); - } - - function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); - } - - function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); - } - - /* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) - */ - function id() { - let id; - let sum = 0; - const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; - const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; - - id = pick(DICT_FIXED).id + date('yyyyMMdd') + string$1('number', 3); - - for (let i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; - } - - /* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ - function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); - } - - /* - ## Miscellaneous - */ - /* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 - */ - let key = 0; - const increment = function (step) { - return (key += +step || 1); - }; - const inc = increment; - - // Dice - function d4() { - return natural(1, 4); - } - function d6() { - return natural(1, 6); - } - function d8() { - return natural(1, 8); - } - function d12() { - return natural(1, 12); - } - function d20() { - return natural(1, 20); - } - function d100() { - return natural(1, 100); - } - - // 随机生成一个句子,第一个单词的首字母大写。 - function sentence(min = 12, max = 18) { - const len = random(min, max); - const string = times(len, () => word()).join(' '); - return capitalize(string) + '.'; - } - - // 随机生成一个单词。 - function word(min = 3, max = 10) { - const len = random(min, max); - return times(len, () => character('lower')).join(''); - } - - // 随机生成一段文本。 - function paragraph(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => sentence()).join('\n'); - } - - // 随机生成一句标题,其中每个单词的首字母大写。 - function title(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => capitalize(word())).join(''); - } - - function cparagraph(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => csentence()).join('\n'); - } - - // 随机生成一个中文句子。 - function csentence(min = 12, max = 18) { - const len = random(min, max); - return times(len, () => cword()).join('') + '。'; - } - // 随机生成一句中文标题。 - function ctitle(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => cword()).join(''); - } - // 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm - const DICT_HANZI = - '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; - // 随机生成一个或多个汉字。 - function cword(...args) { - let len = 1; - let pool = DICT_HANZI; - let min; - let max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === 'string') { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === 'string') { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - - return sampleSize(pool, len).join(''); - } - - // 协议簇 - const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); - // 域名后缀 - const tlds = ( - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' - ).split(' '); - - /* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers - */ - function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; - } - - // 随机生成一个 URL 协议。 - function protocol() { - return pick(protocols); - } - // 随机生成一个域名。 - function domain(Tld) { - return `${word()}.${Tld || tld()}`; - } - /* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) - */ - function tld() { - // Top Level Domain - return pick(tlds); - } - - // 随机生成一个邮件地址。 - function email(domain) { - return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; - } - // 随机生成一个 IP 地址。 - function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join('.'); - } - - var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" - ]; - var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" - ]; - var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" - ]; - var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 - }; - - var Addvocate = "#ff6138"; - var Adobe = "#ff0000"; - var Aim = "#fcd20b"; - var Amazon = "#e47911"; - var Android = "#a4c639"; - var AOL = "#0060a3"; - var Atlassian = "#003366"; - var Behance = "#053eff"; - var bitly = "#ee6123"; - var Blogger = "#fc4f08"; - var Boeing = "#0039a6"; - var Carbonmade = "#613854"; - var Cheddar = "#ff7243"; - var Delicious = "#205cc0"; - var Dell = "#3287c1"; - var Designmoo = "#e54a4f"; - var Deviantart = "#4e6252"; - var Devour = "#fd0001"; - var DEWALT = "#febd17"; - var Dribbble = "#ea4c89"; - var Dropbox = "#3d9ae8"; - var Drupal = "#0c76ab"; - var Dunked = "#2a323a"; - var eBay = "#89c507"; - var Ember = "#f05e1b"; - var Engadget = "#00bdf6"; - var Envato = "#528036"; - var Etsy = "#eb6d20"; - var Evernote = "#5ba525"; - var Facebook = "#3b5998"; - var Firefox = "#e66000"; - var Forrst = "#5b9a68"; - var Foursquare = "#25a0ca"; - var Garmin = "#007cc3"; - var GetGlue = "#2d75a2"; - var Gimmebar = "#f70078"; - var GitHub = "#171515"; - var Grooveshark = "#f77f00"; - var Groupon = "#82b548"; - var HelloWallet = "#0085ca"; - var HootSuite = "#003366"; - var Houzz = "#73ba37"; - var HTML5 = "#ec6231"; - var IKEA = "#ffcc33"; - var IMDb = "#f3ce13"; - var Instagram = "#3f729b"; - var Intel = "#0071c5"; - var Intuit = "#365ebf"; - var Kickstarter = "#76cc1e"; - var kippt = "#e03500"; - var Kodery = "#00af81"; - var LastFM = "#c3000d"; - var LinkedIn = "#0e76a8"; - var Livestream = "#cf0005"; - var Lumo = "#576396"; - var Mixpanel = "#a086d3"; - var Meetup = "#e51937"; - var Nokia = "#183693"; - var NVIDIA = "#76b900"; - var Opera = "#cc0f16"; - var Path = "#e41f11"; - var Pinboard = "#0000e6"; - var Pinterest = "#c8232c"; - var PlayStation = "#665cbe"; - var Pocket = "#ee4056"; - var Prezi = "#318bff"; - var Pusha = "#0f71b4"; - var Quora = "#a82400"; - var Rdio = "#008fd5"; - var Readability = "#9c0000"; - var Resource = "#7eb400"; - var Rockpack = "#0ba6ab"; - var Roon = "#62b0d9"; - var RSS = "#ee802f"; - var Salesforce = "#1798c1"; - var Samsung = "#0c4da2"; - var Shopify = "#96bf48"; - var Skype = "#00aff0"; - var Snagajob = "#f47a20"; - var Softonic = "#008ace"; - var SoundCloud = "#ff7700"; - var Spotify = "#81b71a"; - var Sprint = "#fee100"; - var Squarespace = "#121212"; - var StackOverflow = "#ef8236"; - var Staples = "#cc0000"; - var Stripe = "#008cdd"; - var StudyBlue = "#00afe1"; - var StumbleUpon = "#f74425"; - var Technorati = "#40a800"; - var Treehouse = "#5cb868"; - var Trulia = "#5eab1f"; - var Tumblr = "#34526f"; - var Twitter = "#00acee"; - var TYPO3 = "#ff8700"; - var Ubuntu = "#dd4814"; - var Ustream = "#3388ff"; - var Verizon = "#ef1d1d"; - var Vimeo = "#86c9ef"; - var Vine = "#00a478"; - var Virb = "#06afd8"; - var Wooga = "#5b009c"; - var Wunderlist = "#2b88d9"; - var XBOX = "#9bc848"; - var XING = "#126567"; - var Yandex = "#ffcc00"; - var Yelp = "#c41200"; - var YouTube = "#c4302b"; - var Zalongo = "#5498dc"; - var Zendesk = "#78a300"; - var Zerply = "#9dcc7a"; - var Zootool = "#5e8b1d"; - var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool - }; - - /* eslint-disable no-redeclare*/ - const { _adSize, _screenSize, _videoSize } = size; - const _brandNames = Object.keys(_brandColors); - - /* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 - */ - function image(...args) { - let size; - let background; - let foreground; - let format; - let text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ''); - background = (background || hex()).replace(/^#/, ''); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ - format ? '.' + format : '' - }${text ? '&text=' + text : ''}`; - } - /* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, - */ - function dataImage(size, text) { - let canvas; - if (typeof document !== 'undefined') { - canvas = document.createElement('canvas'); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - const Canvas = module.require('canvas'); - canvas = new Canvas(); - } - - const ctx = canvas && canvas.getContext && canvas.getContext('2d'); - if (!canvas || !ctx) return ''; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split('x'); - - const width = parseInt(size[0], 10); - const height = parseInt(size[1], 10); - const background = _brandColors[pick(_brandNames)]; - const foreground = '#FFF'; - const textHeight = 14; - const font = 'sans-serif'; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = 'bold ' + textHeight + 'px ' + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL('image/png'); - } - - /* - ## Address - */ - const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; - - // 随机生成一个大区。 - function region() { - return pick(REGION); - } - // 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 - function province() { - return pick(DICT_FIXED).name; - } - // 随机生成一个(中国)市。 - function city(prefix) { - const province = pick(DICT_FIXED); - const city = pick(province.children); - return prefix ? [province.name, city.name].join(' ') : city.name; - } - // 随机生成一个(中国)县。 - function county(prefix) { - const province = pick(DICT_FIXED); - const city = pick(province.children); - const county = pick(city.children) || { - name: '-', - }; - return prefix ? [province.name, city.name, county.name].join(' ') : county.name; - } - // 随机生成一个邮政编码(六位数字)。 - function zip(len) { - let zip = ''; - for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; - } - - // 用于生成 Blob 和 File 型数据的工具 - function prepare(anyData) { - let prepared; - switch (type(anyData)) { - case 'array': - prepared = anyData; - break; - default: - prepared = [anyData]; - } - return prepared; - } - function genFile(anyData) { - return new File(prepare(anyData), word()); - } - function genBlob(anyData) { - return new Blob(prepare(anyData)); - } - - /* - ## Mock.Random - - 工具类,用于生成各种随机数据。 - */ - - var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - float: float, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip, - genFile: genFile, - genBlob: genBlob - }); - - /* - ## Constant - - 常量集合。 - */ - /* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 - */ - var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ - }; - - /* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ - /* jshint -W041 */ - function parser$1(name = '') { - if (typeof name !== 'string') name = name + ''; - const parameters = name.match(Constant.RE_KEY); - - const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - const min = range && range[1] && parseInt(range[1], 10); // || 1 - const max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - const result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - const isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; - } - - function array({ - name, - rule: { min, max, parameters, count }, - template, - context: { path, templatePath, root, templateRoot }, - }) { - let result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - }); - }); - } - } - } - return result; - } - - function boolean({ rule: { max, min, parameters }, template = '' }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; - } - - function _function(options) { - const { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); - } - - function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { - let result; - if (decimal) { - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { - result = float(min, max, dmin, dmax); // 内置字符串转数字 - }); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; - } - - function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - const result = {}; - let keys = []; - const fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - const parsedKey = key.replace(Constant.RE_KEY, '$1'); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (const key in template) { - (typeof template[key] === 'function' ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - const parsedKey = key.replace(Constant.RE_KEY, '$1'); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - const inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type(template[key]) === 'number') { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; - } - - /*eslint-disable*/ - - function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); - } - - function Alternate(n, l) { - Token.call(this, 'alternate'), (this.left = n), (this.right = l); - } - - function Match(n) { - Token.call(this, 'match'), (this.body = n.filter(Boolean)); - } - - function Group(n, l) { - Token.call(this, n), (this.body = l); - } - - function CaptureGroup(n) { - Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); - } - - function Quantified(n, l) { - Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); - } - - function Quantifier(n, l) { - Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); - } - - function CharSet(n, l) { - Token.call(this, 'charset'), (this.invert = n), (this.body = l); - } - - function CharacterRange(n, l) { - Token.call(this, 'range'), (this.start = n), (this.end = l); - } - - function Literal(n) { - Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); - } - - function Unicode(n) { - Token.call(this, 'unicode'), (this.code = n.toUpperCase()); - } - - function Hex(n) { - Token.call(this, 'hex'), (this.code = n.toUpperCase()); - } - - function Octal(n) { - Token.call(this, 'octal'), (this.code = n.toUpperCase()); - } - - function BackReference(n) { - Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); - } - - function ControlCharacter(n) { - Token.call(this, 'control-character'), (this.code = n.toUpperCase()); - } - - var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, '\\\\') - .replace(/"/g, '\\"') - .replace(/\x08/g, '\\b') - .replace(/\t/g, '\\t') - .replace(/\n/g, '\\n') - .replace(/\f/g, '\\f') - .replace(/\r/g, '\\r') - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return '\\x0' + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return '\\x' + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return '\\u0' + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return '\\u' + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = 'end of input'; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; - } - (this.expected = n), - (this.found = l), - (this.offset = u), - (this.line = t), - (this.column = r), - (this.name = 'SyntaxError'), - (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - '\n' === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : '\r' === e || '\u2028' === e || '\u2029' === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r - ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) - : ((qt = t), (t = il)), - null === t && (t = al), - null !== t - ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) - t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), - null === r && (r = al), - null !== r - ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return ( - (l = qt), - 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), - null !== u && ((Lt = l), (u = wl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function s() { - var l, u; - return ( - (l = qt), - 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), - null !== u && ((Lt = l), (u = gl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function h() { - var n, l, u; - return ( - (n = qt), - (l = a()), - null !== l - ? ((u = d()), - null !== u - ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)), - n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l - ? ((u = k()), - null === u && (u = al), - null !== u - ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return ( - (n = v()), - null === n && - ((n = w()), - null === n && - ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), - n - ); - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) - ? ((c = Fl), qt++) - : ((c = null), 0 === Wt && e(Ql)), - null !== c - ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r - ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r - ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return ( - (l = qt), - 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), - null !== u && ((Lt = l), (u = ql())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function g() { - var l, u; - return ( - (l = qt), - 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), - null !== u && ((Lt = l), (u = Dl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function b() { - var l, u; - return ( - (l = qt), - 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), - null !== u && ((Lt = l), (u = Wl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if ( - ((l = qt), - (u = []), - zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), - null !== t) - ) - for (; null !== t; ) - u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r - ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return ( - (n = qt), - (l = c()), - null !== l && ((Lt = n), (l = Yl(l))), - null === l ? ((qt = n), (n = l)) : (n = l), - n - ); - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ( - (Wt++, - (l = qt), - 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), - null !== u) - ) - if ( - (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), - null === t && (t = al), - null !== t) - ) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) - r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o - ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t - ? ((r = U()), - null !== r - ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), - Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && - ((n = nl()), - null === n && - ((n = ll()), - null === n && - ((n = ul()), - null === n && - (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return ( - (l = qt), - 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), - null !== u && ((Lt = l), (u = xu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), - null === n && - ((n = ll()), - null === n && - ((n = ul()), - null === n && - (n = - tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), - null !== u && ((Lt = l), (u = Su())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function M() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), - null !== u && ((Lt = l), (u = Uu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function D() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), - null !== u && ((Lt = l), (u = Bu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function H() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), - null !== u && ((Lt = l), (u = qu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function O() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), - null !== u && ((Lt = l), (u = Du())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function W() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), - null !== u && ((Lt = l), (u = Wu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function z() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), - null !== u && ((Lt = l), (u = Ju())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function I() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), - null !== u && ((Lt = l), (u = Pu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function J() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), - null !== u && ((Lt = l), (u = Yu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function K() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), - null !== u && ((Lt = l), (u = nt())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function N() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), - null !== u && ((Lt = l), (u = tt())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function P() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), - null !== u && ((Lt = l), (u = ot())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function V() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), - null !== u && ((Lt = l), (u = at())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function X() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), - null !== u && ((Lt = l), (u = ht())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t - ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t - ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), - null !== u) - ) { - if ( - ((t = []), - yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t - ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), - null !== u) - ) { - if ( - ((t = []), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t - ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), - null !== u) - ) { - if ( - ((t = []), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t - ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), - null !== u && ((Lt = l), (u = $t())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t - ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = '', - fl = '|', - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = '^', - vl = '"^"', - wl = function () { - return new Token('start'); - }, - Al = '$', - Cl = '"$"', - gl = function () { - return new Token('end'); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = 'Quantifier', - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = '{', - yl = '"{"', - ml = ',', - Rl = '","', - Fl = '}', - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ',}', - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = '+', - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = '*', - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = '?', - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = '[0-9]', - Jl = function (n) { - return +n.join(''); - }, - Kl = '(', - Nl = '"("', - Pl = ')', - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = '?:', - _l = '"?:"', - nu = function (n) { - return new Group('non-capture-group', n); - }, - lu = '?=', - uu = '"?="', - tu = function (n) { - return new Group('positive-lookahead', n); - }, - ru = '?!', - eu = '"?!"', - ou = function (n) { - return new Group('negative-lookahead', n); - }, - cu = 'CharacterSet', - iu = '[', - au = '"["', - fu = ']', - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = 'CharacterRange', - pu = '-', - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = 'Character', - Cu = /^[^\\\]]/, - gu = '[^\\\\\\]]', - bu = function (n) { - return new Literal(n); - }, - ku = '.', - Tu = '"."', - xu = function () { - return new Token('any-character'); - }, - yu = 'Literal', - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = '[^|\\\\\\/.[()?+*$\\^]', - Fu = '\\b', - Qu = '"\\\\b"', - Su = function () { - return new Token('backspace'); - }, - Uu = function () { - return new Token('word-boundary'); - }, - Eu = '\\B', - Gu = '"\\\\B"', - Bu = function () { - return new Token('non-word-boundary'); - }, - ju = '\\d', - $u = '"\\\\d"', - qu = function () { - return new Token('digit'); - }, - Lu = '\\D', - Mu = '"\\\\D"', - Du = function () { - return new Token('non-digit'); - }, - Hu = '\\f', - Ou = '"\\\\f"', - Wu = function () { - return new Token('form-feed'); - }, - zu = '\\n', - Iu = '"\\\\n"', - Ju = function () { - return new Token('line-feed'); - }, - Ku = '\\r', - Nu = '"\\\\r"', - Pu = function () { - return new Token('carriage-return'); - }, - Vu = '\\s', - Xu = '"\\\\s"', - Yu = function () { - return new Token('white-space'); - }, - Zu = '\\S', - _u = '"\\\\S"', - nt = function () { - return new Token('non-white-space'); - }, - lt = '\\t', - ut = '"\\\\t"', - tt = function () { - return new Token('tab'); - }, - rt = '\\v', - et = '"\\\\v"', - ot = function () { - return new Token('vertical-tab'); - }, - ct = '\\w', - it = '"\\\\w"', - at = function () { - return new Token('word'); - }, - ft = '\\W', - st = '"\\\\W"', - ht = function () { - return new Token('non-word'); - }, - dt = '\\c', - pt = '"\\\\c"', - vt = 'any character', - wt = function (n) { - return new ControlCharacter(n); - }, - At = '\\', - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = '[1-9]', - kt = function (n) { - return new BackReference(n); - }, - Tt = '\\0', - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = '[0-7]', - Rt = function (n) { - return new Octal(n.join('')); - }, - Ft = '\\x', - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = '[0-9a-fA-F]', - Et = function (n) { - return new Hex(n.join('')); - }, - Gt = '\\u', - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join('')); - }, - $t = function () { - return new Token('null-character'); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ('startRule' in el) { - if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw ( - (o(Ot), - (Lt = Math.max(qt, Ht)), - new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) - ); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - - /*eslint-disable*/ - /* - - */ - const Handler$1 = { - extend: extend, - }; - - // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart - /* let ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] - }*/ - - // ASCII printable code chart - // let LOWER = 'abcdefghijklmnopqrstuvwxyz' - // let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' - // let NUMBER = '0123456789' - // let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' - const LOWER = ascii(97, 122); - const UPPER = ascii(65, 90); - const NUMBER = ascii(48, 57); - const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) - const PRINTABLE = ascii(32, 126); - const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; - const CHARACTER_CLASSES = { - '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) - '\\W': OTHER.replace('_', ''), - '\\s': SPACE, - '\\S': (function () { - let result = PRINTABLE; - for (let i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ''); - } - return result; - })(), - '\\d': NUMBER, - '\\D': LOWER + UPPER + OTHER, - }; - - // 从 from 到 to 包含两个端点的字符串 - function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); - } - - // let ast = RegExpParser.parse(regexp.source) - Handler$1.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); - }; - - Handler$1.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case 'start': - case 'end': - return ''; - case 'any-character': - return character(); - case 'backspace': - return ''; - case 'word-boundary': // TODO - return ''; - case 'non-word-boundary': // TODO - break; - case 'digit': - return pick(NUMBER.split('')); - case 'non-digit': - return pick((LOWER + UPPER + OTHER).split('')); - case 'form-feed': - break; - case 'line-feed': - return node.body || node.text; - case 'carriage-return': - break; - case 'white-space': - return pick(SPACE.split('')); - case 'non-white-space': - return pick((LOWER + UPPER + NUMBER).split('')); - case 'tab': - break; - case 'vertical-tab': - break; - case 'word': // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split('')); - case 'non-word': // \W [^a-zA-Z0-9] - return pick(OTHER.replace('_', '').split('')); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ''; - // node.body [] - for (let i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - 'capture-group': function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - 'non-capture-group': function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - 'positive-lookahead': function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - 'negative-lookahead': function (node, result, cache) { - // node.body - return ''; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ''; - // node.quantifier {} - const count = this.quantifier(node.quantifier); - // node.body {} - for (let i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - const min = Math.max(node.min, 0); - const max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this['invert-charset'](node, result, cache); - - // node.body [] - const literal = pick(node.body); - return this.gen(literal, result, cache); - }, - 'invert-charset': function (node, result, cache) { - let pool = PRINTABLE; - for (let i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case 'literal': { - pool = pool.replace(item.body, ''); - break; - } - case 'range': - const min = this.gen(item.start, result, cache).charCodeAt(); - const max = this.gen(item.end, result, cache).charCodeAt(); - for (let ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ''); - } - /* falls through */ - default: - const characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (let iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ''); - } - } - } - } - return pick(pool.split('')); - }, - range: function (node, result, cache) { - // node.start, node.end - const min = this.gen(node.start, result, cache).charCodeAt(); - const max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - 'back-reference': function (node, result, cache) { - return cache[node.code] || ''; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); - const CONTROL_CHARACTER_UNICODE = - '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( - ' ', - ); - const map = {}; - for (let i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - 'control-character': function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, - }); - - var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$1 - }); - - function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - const Source = count === undefined ? source : Array(count).fill(source).join(''); - return Handler$1.gen(parser.parse(Source)); - } - - function getValueByKeyPath(key, options) { - const originalKey = key; - const keyPathParts = splitPathToArray(key); - let absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === '/') { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - let currentContext = options.context.root; - let templateCurrentContext = options.context.templateRoot; - for (let i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === 'object' && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) { - console.log(err); - } - - return '@' + keyPathParts.join('/'); - } - // https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js - function normalizePath(pathParts) { - const newPathParts = []; - for (let i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case '..': - newPathParts.pop(); - break; - case '.': - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; - } - function splitPathToArray(path) { - let parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; - } - - // 占位符即是字符串函数的意思 - function placeholder(Placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(''); - let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); - - const lkey = key && key.toLowerCase(); - const pathParts = splitPathToArray(key); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === 'object' && - key in templateContext && - Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return Placeholder; - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - if (params) { - params = params.split(/\s*,\s*/).map((param) => { - // 递归解析参数中的占位符 - Constant.RE_PLACEHOLDER.exec(''); - if (Constant.RE_PLACEHOLDER.test(param)) { - return placeholder(param, obj, templateContext, options); - } - return param; - }); - } else { - params = []; - } - - const handle = Random[key] || Random[lkey]; - switch (type(handle)) { - case 'array': { - // 自动从数组中取一个,例如 @areas - return pick(handle); - } - case 'function': { - // 执行占位符方法(大多数情况) - handle.options = options; - const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - } - } - - function string(options) { - const { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = '', - } = options; - let result = ''; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(''); - - // 'email|1-10': '@EMAIL, ', - const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - const phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - if (isNumeric(phed)) { - result = parseFloat(phed, 10); - return true; - } - if (/^(true|false)$/.test(phed)) { - result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 - return true; - } // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; - } - - var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string - }); - - let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 - function gen(template, name = '', context = {}) { - const newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - const type$1 = type(template); - const func = typeset[type$1]; - let data; - - if (func) { - data = func({ - // 属性值类型 - type: type$1, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; - } - - /* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - - */ - /* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot - */ - const Handler = { - gen, - extend, - }; - Handler.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, - }); - Handler.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, - }); - - /* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - - function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - const result = { - name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, - template, - type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? 'ROOT' : result.name); - - switch (result.type) { - case 'array': - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case 'object': - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; - } - - /*eslint-disable*/ - - function valid(template, data) { - const schema = toJSONSchema(template); - const result = Diff.diff(schema, data); - for (let i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; - } - - /* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 - */ - const Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - const result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - const length = result.length; - - Assert.equal('name', schema.path, name + '', schema.name + '', result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - const length = result.length; - - switch (schema.type) { - case 'string': - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case 'array': - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case 'function': - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal('type', schema.path, type(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - const length = result.length; - - const rule = schema.rule; - const templateType = schema.type; - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result); - return result.length === length; - case 'string': - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal('value', schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - let actualRepeatCount; - switch (templateType) { - case 'number': - const parts = (data + '').split('.'); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case 'boolean': - break; - - case 'string': - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - const length = result.length; - - const rule = schema.rule; - const keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - 'properties length', - schema.path, - keys$1.length, - Math.min(rule.min, rule.max), - result, - ); - Assert.lessThanOrEqualTo( - 'properties length', - schema.path, - keys$1.length, - Math.max(rule.min, rule.max), - result, - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (let i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - let property; - each(schema.properties, function (item /* , index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i], - ), - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - const length = result.length; - - if (!schema.items) return; - - const rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - 'items', - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', - ); - Assert.lessThanOrEqualTo( - 'items', - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (let i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), - ); - } - - return result.length === length; - }, - }; - - /* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - - */ - const Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', (isArray(item.path) && item.path.join('.')) || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case 'type': - // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true; - break; - } - - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'matches', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is not equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than or equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less than or equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - }; - - valid.Diff = Diff; - valid.Assert = Assert; - - // 集中管理 mocked 的 url - - const _mocked = { - $set(value) { - this[value.rurl + value.rtype.toLowerCase()] = value; - }, - $delete(key) { - delete this[key]; - }, - }; - - // 查找与请求参数匹配的数据模板:URL,Type - function find({ url, type }) { - type = type.toLowerCase(); - for (const sUrlType in _mocked) { - const item = _mocked[sUrlType]; - const { rurl, rtype } = item; - if (match(rurl, url) && match(rtype, type)) { - // console.log('[mock]', url, '>', item.rurl) - return item; - } - } - return false; - } - - function match(expected, actual) { - switch (type(expected)) { - case 'string': - return expected === actual; - case 'regexp': - return expected.test(actual); - default: - return false; - } - } - - // 数据模板 => 响应数据 - function convert({ template }, options) { - return isFunction(template) ? template(options) : gen(template); - } - - /** - * Check if `obj` is a URLSearchParams object - * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 - * - * @param {*} obj - * @return {boolean} - */ - const isURLSearchParameters = (object) => { - return ( - typeof object === 'object' && - typeof object.append === 'function' && - typeof object.delete === 'function' && - typeof object.get === 'function' && - typeof object.getAll === 'function' && - typeof object.has === 'function' && - typeof object.set === 'function' && - typeof object.sort === 'function' && - object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 - ); - }; - - const BODY = Symbol('Body internals'); - const RESPONSE = Symbol('Response internals'); - - /** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ - async function consumeBody(data) { - // 标记为已经使用 - if (data.disturbed) { - throw new TypeError(`body used already for: ${data.url}`); - } - data.disturbed = true; - - // 报错 - if (data.error) { - throw data.error; - } - - if (data.body instanceof FormData) { - return new Blob([Object.fromEntries(data.body.entries())]); - } - return data.body; - } - - /** - * Body.js - * - * Body interface provides common methods for Request and Response - */ - /** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ - class Body { - constructor(body, { size = 0 } = {}) { - if (body === null) { - // Body is undefined or null - body = new Blob([]); - } else if (isURLSearchParameters(body)) { - // Body is a URLSearchParams - body = new Blob([body]); - } else if (ArrayBuffer.isView(body)) { - // Body is ArrayBufferView - body = new Blob([body]); - } else { - body = new Blob([JSON.stringify(body)]); - } - - this[BODY] = { - body, - boundary: null, - disturbed: false, - error: null, - }; - this.size = size; - } - - get body() { - return this[BODY].body; - } - - get bodyUsed() { - return this[BODY].disturbed; - } - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - async arrayBuffer() { - const blob = await consumeBody(this[BODY]); - return blob.arrayBuffer(); - } - - /** - * Return raw response as Blob - * - * @return Promise - */ - async blob() { - return consumeBody(this[BODY]); - } - - /** - * Decode response as json - * - * @return Promise - */ - async json() { - const text = await this.text(); - return JSON.parse(text || '{}'); - } - - /** - * Decode response as text - * - * @return Promise - */ - async text() { - const blob = await consumeBody(this[BODY]); - return blob.text(); - } - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ - } - - // In browsers, all properties are enumerable. - Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true }, - }); - - /** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present. - * - * @param {any} body Any options.body input - * @return {string | null} - */ - const extractContentType = (body, request) => { - // Body is null or undefined - if (body === null) { - return null; - } - - // Body is string - if (typeof body === 'string') { - return 'text/plain;charset=UTF-8'; - } - - // Body is a URLSearchParams - if (isURLSearchParameters(body)) { - return 'application/x-www-form-urlencoded;charset=UTF-8'; - } - - // Body is blob - if (body instanceof Blob) { - return body.type || null; - } - - if (body instanceof FormData) { - return `multipart/form-data; boundary=${request[BODY].boundary}`; - } - - // Body constructor defaults other things to string - return 'text/plain;charset=UTF-8'; - }; - - const redirectStatus = new Set([301, 302, 303, 307, 308]); - - /** - * Redirect code matching - * - * @param {number} code - Status code - * @return {boolean} - */ - const isRedirect = (code) => { - return redirectStatus.has(code); - }; - - /** - * Response.js - * - * Response class provides content decoding - */ - /** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ - class fakeResponse extends Body { - constructor(body = null, options = {}) { - super(body, options); - const status = options.status != null ? options.status : 200; - const headers = new Headers(options.headers); - if (body !== null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - this[RESPONSE] = { - type: 'default', - url: options.url, - status, - statusText: options.statusText || '', - headers, - counter: options.counter, - }; - } - - get type() { - return this[RESPONSE].type; - } - - get url() { - return this[RESPONSE].url || ''; - } - - get status() { - return this[RESPONSE].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; - } - - get redirected() { - return this[RESPONSE].counter > 0; - } - - get statusText() { - return this[RESPONSE].statusText; - } - - get headers() { - return this[RESPONSE].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - // Don't allow cloning a used body - if (this.bodyUsed) { - throw new Error('cannot clone body after it is used'); - } - return new Response(this.body, { - type: this.type, - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected, - size: this.size, - }); - } - - /** - * @param {string} url The URL that the new response is to originate from. - * @param {number} status An optional status code for the response (e.g., 302.) - * @return {Response} A Response object. - */ - static redirect(url, status = 302) { - if (!isRedirect(status)) { - throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); - } - - return new Response(null, { - headers: { - location: new URL(url).toString(), - }, - status, - }); - } - - static error() { - const response = new Response(null, { status: 0, statusText: '' }); - response[RESPONSE].type = 'error'; - return response; - } - - get [Symbol.toStringTag]() { - return 'Response'; - } - } - - Object.defineProperties(Response.prototype, { - type: { enumerable: true }, - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true }, - }); - - const realFetch = window && window.fetch; - function mockFetch() { - // 代理 fetch 的初始化函数 - if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { - window.fetch = fakeFetch; - window.fetch.$mock = true; - console.warn('fetch 已经被代理'); - } - } - - async function fakeFetch(url, options = {}) { - if (window.fetch.$mock === true) { - // 只有在 $mock 标记为 true 时才进行代理 - const result = find({ - url, - type: (options.method || 'get').toLowerCase(), - }); - if (result) { - const data = convert(result, {}); - console.warn('mock代理中'); - return new fakeResponse(data, options); - } - } - - console.warn('未使用 mockjs'); - return realFetch(url, options); - } - - var HTTP_STATUS_CODES = { - 100: 'Continue', - 101: 'Switching Protocols', - 200: 'OK', - 201: 'Created', - 202: 'Accepted', - 203: 'Non-Authoritative Information', - 204: 'No Content', - 205: 'Reset Content', - 206: 'Partial Content', - 300: 'Multiple Choice', - 301: 'Moved Permanently', - 302: 'Found', - 303: 'See Other', - 304: 'Not Modified', - 305: 'Use Proxy', - 307: 'Temporary Redirect', - 400: 'Bad Request', - 401: 'Unauthorized', - 402: 'Payment Required', - 403: 'Forbidden', - 404: 'Not Found', - 405: 'Method Not Allowed', - 406: 'Not Acceptable', - 407: 'Proxy Authentication Required', - 408: 'Request Timeout', - 409: 'Conflict', - 410: 'Gone', - 411: 'Length Required', - 412: 'Precondition Failed', - 413: 'Request Entity Too Large', - 414: 'Request-URI Too Long', - 415: 'Unsupported Media Type', - 416: 'Requested Range Not Satisfiable', - 417: 'Expectation Failed', - 422: 'Unprocessable Entity', - 500: 'Internal Server Error', - 501: 'Not Implemented', - 502: 'Bad Gateway', - 503: 'Service Unavailable', - 504: 'Gateway Timeout', - 505: 'HTTP Version Not Supported', - }; - - // 使用不完全覆盖的方式,使用继承方式继承所有的属性 - - const SEND = XMLHttpRequest.prototype.send; - const OPEN = XMLHttpRequest.prototype.open; - - // ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - - // 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, - // 也不可以在 XHR 实例上定义 - // 这样的话会导致无法接收到数据 - // 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 - const defineGetAndSet = function (what) { - const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; - Object.defineProperties( - what, - array.reduce((col, cur) => { - col[cur] = { - get() { - return this.$Mock[cur]; - }, - set: function (state) { - this.$Mock[cur] = state; - }, - }; - return col; - }, {}), - ); - }; - class MockXMLHttpRequest extends XMLHttpRequest { - constructor(...args) { - super(...args); - } - _send = SEND; - _open = OPEN; - open(method, url, async, username, password) { - // 不进行同步操作 - this._open(method, url, true, username, password); - this.$url = url; - this.$type = method.toLowerCase(); - } - send(body) { - if (this.$mock) { - this.$template = find({ url: this.$url, type: this.$type }); - if (this.$template) { - defineGetAndSet(this); - this.dispatchEvent(new Event('loadstart')); - - setTimeout(this.$done.bind(this), this.timeout || 100); - return null; - } - } - this._send(body); - } - get mock() { - return this.$mock; - } - set mock(value) { - if (typeof value === 'boolean') this.$mock = value; - } - $Mock = { - // 原生属性的 getter 和 setter - readyState: 0, - status: 200, - response: '', - responseText: '', - statusText: '', - }; - $type = 'get'; - $url = ''; - $mock = true; - $template = null; - - $done() { - this.readyState = this.HEADERS_RECEIVED; - this.dispatchEvent(new Event('readystatechange')); - this.readyState = this.LOADING; - this.dispatchEvent(new Event('readystatechange')); - - this.status = 200; - this.statusText = HTTP_STATUS_CODES[200]; - const data = convert(this.$template, {}); - this.response = data; - this.responseText = this.response; - this.readyState = this.DONE; - this.dispatchEvent(new Event('readystatechange')); - this.dispatchEvent(new Event('load')); - this.dispatchEvent(new Event('loadend')); - } - } - - // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 - typeof window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 - - let XHR; - if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; - - function mock(...args) { - let rurl; - let rtype = 'get'; - let template; - - switch (args.length) { - case 1: - // Mock.mock(template) - [template] = args; - return Handler.gen(template); - // 2 和 3 switch 穿透 - case 2: - // Mock.mock(rurl, template) - [rurl, template] = args; - break; - case 3: - // Mock.mock(rurl,rtype, template) - [rurl, rtype, template] = args; - break; - } - - // 拦截 XHR - XHR && window && (window.XMLHttpRequest = XHR); - - _mocked.$set({ - rurl, - rtype, - template, - }); - return null; - } - - // global require, module, window - - /* ! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 - KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao/ - */ - - const Mock = { - Handler, - Random, - Util, - XHR, - RE, - toJSONSchema, - valid, - heredoc: heredoc, - setup: function (settings) { - return XHR.setup(settings); - }, - _mocked, - mock, - }; - - Mock.version = '1.1.1-es6'; - - return Mock; - -}()); +/** + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ie(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function tn(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Te(e))}var rn=Me&&Me.isRegExp,an=rn?ve(rn):function(e){return s(e)&&"[object RegExp]"==h(e)},on=Math.floor,un=Math.random;function ln(e,n){return e+on(un()*(n-e+1))}var cn=parseFloat,hn=Math.min,sn=Math.random;function fn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=sn();return hn(e+a*(n-e+cn("1e-"+((a+"").length-1))),n)}return ln(e,n)}var mn=Math.ceil,dn=Math.max;var pn,bn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=dn(mn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=En,a=On(e,En);e-=En;for(var o=ie(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=fn(t,r,!1);return parseFloat(fn(e,n,!0).toFixed(a))},In=function(e,n,t=!1){return t?fn(0,e+n)>e?!t:t:fn(10,-10)>0},Bn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Bn.alpha=Bn.lower+Bn.upper,Bn.default=Bn.lower+Bn.upper+Bn.number+Bn.symbol;const Un=function(e="default"){return Bn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Bn[e.toLowerCase()]),yn(e)},Gn=function(...e){let n,t,r,a;switch(e.length){case 0:n=Hn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Hn(r,a));break;case 3:[t,r,a]=e,n=Hn(r,a)}return Sn(n,(()=>Un(t))).join("")};function Wn(e,n){return e(n={exports:{}},n.exports),n.exports}var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Wn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Yn=Wn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Jn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Kn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Kn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Kn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Yn.to,Yn.get;var Vn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Xn=Wn((function(e){var n={};for(var t in Vn)Vn.hasOwnProperty(t)&&(n[Vn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Vn)if(Vn.hasOwnProperty(l)){var c=Vn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Zn(e){var n=function(){for(var e={},n=Object.keys(Xn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var tt=nt,rt=[].slice,at=["keyword","gray","hex"],ot={};Object.keys(tt).forEach((function(e){ot[rt.call(tt[e].labels).sort().join("")]=e}));var ut={};function lt(e,n){if(!(this instanceof lt))return new lt(e,n);if(n&&n in at&&(n=null),n&&!(n in tt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof lt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Yn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=tt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=tt[this.model].channels;var o=rt.call(e,0,r);this.color=st(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ot))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ot[l];var c=tt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return lt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return lt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(tt).forEach((function(e){if(-1===at.indexOf(e)){var n=tt[e].channels;lt.prototype[e]=function(){if(this.model===e)return new lt(this);if(arguments.length)return new lt(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new lt(ht(tt[this.model][e].raw(this.color)).concat(t),e)},lt[e]=function(t){return"number"==typeof t&&(t=st(rt.call(arguments),n)),new lt(t,e)}}}));var ft=lt,mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const dt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,An(e,a);case 2:return[t,r]=n,An(e,fn(t,r))}},pt=function(e,n,t){const r=jn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},bt={},xt=function(...e){1===e.length&&(e=e[0]);const n=xt.options.context.templatePath.join("."),t=bt[n]=bt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var gt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function vt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ft.hsv(360*yt,100*e,100*n)}function wt(){return vt().hex()}var kt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:At,lastName:Mt,cfirstName:Ct,clastName:jt}=kt;function Et(){const e=At.male.concat();return dt(e)}function Ot(){return dt(Mt)}function St(){return dt(Ct)}function Rt(){return dt(jt)}var Tt,Ft=new Uint8Array(16);function _t(){if(!Tt&&!(Tt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tt(Ft)}var Dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function qt(e){return"string"==typeof e&&Dt.test(e)}for(var $t=[],Pt=0;Pt<256;++Pt)$t.push((Pt+256).toString(16).substr(1));function zt(e,n,t){var r=(e=e||{}).random||(e.rng||_t)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=($t[e[n+0]]+$t[e[n+1]]+$t[e[n+2]]+$t[e[n+3]]+"-"+$t[e[n+4]]+$t[e[n+5]]+"-"+$t[e[n+6]]+$t[e[n+7]]+"-"+$t[e[n+8]]+$t[e[n+9]]+"-"+$t[e[n+10]]+$t[e[n+11]]+$t[e[n+12]]+$t[e[n+13]]+$t[e[n+14]]+$t[e[n+15]]).toLowerCase();if(!qt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Lt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ht=Object.keys(Lt),Nt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Lt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ht.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var It={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Bt=new RegExp(`(${Object.keys(It).join("|")})`,"g");function Ut(e="yyyy-MM-dd"){return Gt(Wt(),e)}function Gt(e,n){return n.replace(Bt,(function n(t,r){const a=It[r];return"function"==typeof a?a(e):a in It?n(t,a):e[a]()}))}function Wt(e=new Date(0),n=new Date){return new Date(Ln(e.getTime(),n.getTime()))}let Jt=0;const Kt=function(e){return Jt+=+e||1},Yt=Kt;function Vt(e=12,n=18){return en(Sn(fn(e,n),(()=>Xt())).join(" "))+"."}function Xt(e=3,n=10){return Sn(fn(e,n),(()=>Un("lower"))).join("")}function Zt(e=12,n=18){return Sn(fn(e,n),(()=>Qt())).join("")+"。"}function Qt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Hn(n,t));break;case 3:[a,n,t]=e,r=Hn(n,t)}return An(a,r).join("")}const er="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),nr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function tr(){return dt(er)}function rr(e){return`${Xt()}.${e||ar()}`}function ar(){return dt(nr)}var or={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ur={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:lr,_screenSize:cr,_videoSize:ir}=or,hr=Object.keys(ur);function sr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=dt(lr)),r=(r||wt()).replace(/^#/,""),t=(t||wt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const fr=["东北","华北","华东","华中","华南","西南","西北"];function mr(e){let n;switch(Rn(e)){case"array":n=e;break;default:n=[e]}return n}var dr=Object.freeze({__proto__:null,integer:Ln,isNumber:Pn,random:fn,natural:Hn,int:Ln,float:Nn,boolean:In,bool:In,character:Un,char:Un,string:Gn,str:Gn,range:bn,color:function(e){return e||mt[e]?mt[e].nicer:dt(gt).hex},hex:wt,rgb:function(){return vt().hsv().string()},rgba:function(){return vt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return vt().hsl().string()},_goldenRatioColor:vt,first:Et,last:Ot,name:function(e){return e=e?` ${Et()} `:" ",`${Et()}${e}${Ot()}`},cfirst:St,clast:Rt,cname:function(){return St()+Rt()},capitalize:en,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:dt,shuffle:pt,order:xt,d4:function(){return Hn(1,4)},d6:function(){return Hn(1,6)},d8:function(){return Hn(1,8)},d12:function(){return Hn(1,12)},d20:function(){return Hn(1,20)},d100:function(){return Hn(1,100)},guid:function(){return zt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:zt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=dt(Nt).id+Ut("yyyyMMdd")+Gn("number",3);for(let r=0;rVt())).join("\n")},word:Xt,sentence:Vt,title:function(e=3,n=7){return Sn(fn(e,n),(()=>en(Xt()))).join("")},ctitle:function(e=3,n=7){return Sn(fn(e,n),(()=>Qt())).join("")},csentence:Zt,cparagraph:function(e=3,n=7){return Sn(fn(e,n),(()=>Zt())).join("\n")},cword:Qt,protocol:tr,domain:rr,tld:ar,email:function(e){return`${Un("lower")}.${Xt()}@${e||Xt()+"."+ar()}`},ip:function(){return[...Array(4)].map((()=>Hn(0,255))).join(".")},url:function(e,n){return`${e||tr()}://${n||rr()}/${Xt()}`},_patternLetters:It,_rformat:Bt,_formatDate:Gt,_randomDate:Wt,time:function(e="HH:mm:ss"){return Ut(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ut(e)},date:Ut,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Gt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Wt(e,n).getTime():Wt().getTime()},_adSize:lr,_screenSize:cr,_videoSize:ir,image:sr,img:sr,_brandColors:ur,_brandNames:hr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=dt(lr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=ur[dt(hr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return dt(fr)},province:function(){return dt(Nt).name},city:function(e){const n=dt(Nt),t=dt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=dt(Nt),t=dt(n.children),r=dt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Hn(0,9);return n},genFile:function(e){return new File(mr(e),Xt())},genBlob:function(e){return new Blob(mr(e))}}),pr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function br(e=""){"string"!=typeof e&&(e+="");const n=e.match(pr.RE_KEY),t=n&&n[3]&&n[3].match(pr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Ln(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(pr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Ln(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function xr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=dt(aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(aa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(aa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function gr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?In(n,e,r):r}function yr(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function vr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Nn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function wr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=pt(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(pr.RE_KEY);c&&c[2]&&"number"===Rn(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function kr(e){this.type=e,this.offset=kr.offset(),this.text=kr.text()}function Ar(e,n){kr.call(this,"alternate"),this.left=e,this.right=n}function Mr(e){kr.call(this,"match"),this.body=e.filter(Boolean)}function Cr(e,n){kr.call(this,e),this.body=n}function jr(e){Cr.call(this,"capture-group"),this.index=Lr[this.offset]||(Lr[this.offset]=zr++),this.body=e}function Er(e,n){kr.call(this,"quantified"),this.body=e,this.quantifier=n}function Or(e,n){kr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Sr(e,n){kr.call(this,"charset"),this.invert=e,this.body=n}function Rr(e,n){kr.call(this,"range"),this.start=e,this.end=n}function Tr(e){kr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Fr(e){kr.call(this,"unicode"),this.code=e.toUpperCase()}function _r(e){kr.call(this,"hex"),this.code=e.toUpperCase()}function Dr(e){kr.call(this,"octal"),this.code=e.toUpperCase()}function qr(e){kr.call(this,"back-reference"),this.code=e.toUpperCase()}function $r(e){kr.call(this,"control-character"),this.code=e.toUpperCase()}var Pr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t){if(r=[],Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new Ar(e,n[1]):e},me=function(e,n,t){return new Mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new kr("start")},xe="$",ge='"$"',ye=function(){return new kr("end")},ve=function(e,n){return new Er(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ce=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Or(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Or(e,1/0)},_e=function(e){return new Or(e,e)},De="+",qe='"+"',$e=function(){return new Or(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Or(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Or(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new jr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Cr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Cr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Cr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Sr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Rr(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Tr(e)},kn=".",An='"."',Mn=function(){return new kr("any-character")},Cn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new kr("backspace")},Tn=function(){return new kr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new kr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new kr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new kr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new kr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new kr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new kr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new kr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new kr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new kr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new kr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new kr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new kr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new $r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new qr(e)},At="\\0",Mt='"\\\\0"',Ct=/^[0-7]/,jt="[0-7]",Et=function(e){return new Dr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new _r(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Fr(e.join(""))},$t=function(){return new kr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(kr.offset=r,kr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Hr.gen=function(e,n,t){return t=t||{guid:1},Hr[e.type]?Hr[e.type](e,n,t):Hr.token(e,n,t)},Hr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Un();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return dt(Br.split(""));case"non-digit":return dt((Nr+Ir+Ur).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return dt(Wr.split(""));case"non-white-space":return dt((Nr+Ir+Br).split(""));case"tab":case"vertical-tab":break;case"word":return dt((Nr+Ir+Br).split(""));case"non-word":return dt(Ur.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(In()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Zr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Xr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=aa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in dr)&&!(u in dr))return e;o=o?o.split(/\s*,\s*/).map((e=>(pr.RE_PLACEHOLDER.exec(""),pr.RE_PLACEHOLDER.test(e)?ea(e,n,t,r):e))):[];const c=dr[a]||dr[u];switch(Rn(c)){case"array":return dt(c);case"function":{c.options=r;const e=c.apply(dr,o)||"";return delete c.options,e}}}function na(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(pr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=ea(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Tn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Gn(t):o;return u}var ta=Object.freeze({__proto__:null,array:xr,boolean:gr,function:yr,number:vr,object:wr,regexp:Vr,string:na});let ra=1;function aa(e,n="",t={}){const r={path:t.path||[ra],templatePath:t.templatePath||[ra++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Rn(e),o=ta[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(pr.RE_KEY,"$1"):n,rule:br(n),context:r}),r.root||(r.root=u),u):e}const oa={gen:aa,extend:Fn};function ua(e,n,t=[]){const r={name:"string"==typeof n?n.replace(pr.RE_KEY,"$1"):n,template:e,type:Rn(e),rule:br.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ua(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ua(e,n,r.path)))}return r}function la(e,n){const t=ua(e),r=ca.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:ea,getValueByKeyPath:Xr,normalizePath:Zr,splitPathToArray:Qr});const ca={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ia.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(pr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ia.equal("type",e.path,Rn(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ia.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(pr.RE_PLACEHOLDER))return r.length===a}return ia.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ia.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ia.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ia.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ia.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=qn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ia.equal("properties length",e.path,u.length,o.min,r)):ia.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ia.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1}};la.Diff=ca,la.Assert=ia;const ha={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function sa({url:e,type:n}){n=n.toLowerCase();for(const t in ha){const r=ha[t],{rurl:a,rtype:o}=r;if(fa(a,e)&&fa(o,n))return r}return!1}function fa(e,n){switch(Rn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ma({template:e},n){return R(e)?e(n):aa(e)}const da=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],pa=Symbol("Body internals"),ba=Symbol("Response internals");async function xa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class ga{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):da(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[pa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[pa].body}get bodyUsed(){return this[pa].disturbed}async arrayBuffer(){return(await xa(this[pa])).arrayBuffer()}async blob(){return xa(this[pa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await xa(this[pa])).text()}}Object.defineProperties(ga.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]),va=globalThis.window&&globalThis.window.Response||class{};class wa extends ga{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":da(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[pa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ba]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ba].type}get url(){return this[ba].url||""}get status(){return this[ba].status}get ok(){return this[ba].status>=200&&this[ba].status<300}get redirected(){return this[ba].counter>0}get statusText(){return this[ba].statusText}get headers(){return this[ba].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new va(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new va(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new va(null,{status:0,statusText:""});return e[ba].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(va.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ka=globalThis.window||{},Aa=ka&&ka.fetch;async function Ma(e,n={}){if(!0===ka.fetch.$mock){const t=sa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ma(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),Aa(e,n)}var Ca="OK";let ja,Ea;void 0!==globalThis.window&&(ja=XMLHttpRequest.prototype.send,Ea=XMLHttpRequest.prototype.open);class Oa extends XMLHttpRequest{constructor(...e){super(...e)}_send=ja;_open=Ea;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=sa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ca;const e=ma(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ka.fetch&&!ka.fetch.hasOwnProperty("$mock")&&(ka.fetch=Ma,ka.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Sa={Handler:oa,Random:dr,Util:$n,XHR:Oa,RE:Yr,toJSONSchema:ua,valid:la,heredoc:Dn,setup:function(e){return Oa.setup(e)},_mocked:ha,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,oa.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Oa||(globalThis.XMLHttpRequest=Oa),ha.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return Sa}(); diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js index edaf72fa..77a1d978 100644 --- a/dist/mock.cjs.js +++ b/dist/mock.cjs.js @@ -1,51 +1,15401 @@ +'use strict'; + +var crypto = require('crypto'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto); + +/** Detect free variable `global` from Node.js. */ +var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + +/** Detect free variable `self`. */ +var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + +/** Used as a reference to the global object. */ +var root = freeGlobal || freeSelf || Function('return this')(); + +/** Built-in value references. */ +var Symbol$1 = root.Symbol; + +/** Used for built-in method references. */ +var objectProto$8 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$6 = objectProto$8.hasOwnProperty; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString$1 = objectProto$8.toString; + +/** Built-in value references. */ +var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ +function getRawTag(value) { + var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), + tag = value[symToStringTag$1]; + + try { + value[symToStringTag$1] = undefined; + var unmasked = true; + } catch (e) {} + + var result = nativeObjectToString$1.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag$1] = tag; + } else { + delete value[symToStringTag$1]; + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto$7 = Object.prototype; + +/** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ +var nativeObjectToString = objectProto$7.toString; + +/** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ +function objectToString(value) { + return nativeObjectToString.call(value); +} + +/** `Object#toString` result references. */ +var nullTag = '[object Null]', + undefinedTag = '[object Undefined]'; + +/** Built-in value references. */ +var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; + +/** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ +function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); +} + +/** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ +function isObjectLike(value) { + return value != null && typeof value == 'object'; +} + +/** `Object#toString` result references. */ +var symbolTag = '[object Symbol]'; + +/** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ +function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); +} + +/** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ +function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; +} + +/** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ +var isArray = Array.isArray; + +/** Used as references for various `Number` constants. */ +var INFINITY$1 = 1 / 0; + +/** Used to convert symbols to primitives and strings. */ +var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + +/** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ +function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; +} + +/** Used to match a single whitespace character. */ +var reWhitespace = /\s/; + +/** + * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace + * character of `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the index of the last non-whitespace character. + */ +function trimmedEndIndex(string) { + var index = string.length; + + while (index-- && reWhitespace.test(string.charAt(index))) {} + return index; +} + +/** Used to match leading whitespace. */ +var reTrimStart = /^\s+/; + +/** + * The base implementation of `_.trim`. + * + * @private + * @param {string} string The string to trim. + * @returns {string} Returns the trimmed string. + */ +function baseTrim(string) { + return string + ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') + : string; +} + +/** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ +function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); +} + +/** Used as references for various `Number` constants. */ +var NAN = 0 / 0; + +/** Used to detect bad signed hexadecimal string values. */ +var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + +/** Used to detect binary string values. */ +var reIsBinary = /^0b[01]+$/i; + +/** Used to detect octal string values. */ +var reIsOctal = /^0o[0-7]+$/i; + +/** Built-in method references without a dependency on `root`. */ +var freeParseInt = parseInt; + +/** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ +function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = baseTrim(value); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); +} + +/** Used as references for various `Number` constants. */ +var INFINITY = 1 / 0, + MAX_INTEGER = 1.7976931348623157e+308; + +/** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ +function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; +} + +/** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ +function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; +} + +/** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ +function identity(value) { + return value; +} + +/** `Object#toString` result references. */ +var asyncTag = '[object AsyncFunction]', + funcTag$1 = '[object Function]', + genTag = '[object GeneratorFunction]', + proxyTag = '[object Proxy]'; + +/** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ +function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; +} + +/** Used to detect overreaching core-js shims. */ +var coreJsData = root['__core-js_shared__']; + +/** Used to detect methods masquerading as native. */ +var maskSrcKey = (function() { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; +}()); + +/** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ +function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); +} + +/** Used for built-in method references. */ +var funcProto$1 = Function.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString$1 = funcProto$1.toString; + +/** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ +function toSource(func) { + if (func != null) { + try { + return funcToString$1.call(func); + } catch (e) {} + try { + return (func + ''); + } catch (e) {} + } + return ''; +} + +/** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ +var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + +/** Used to detect host constructors (Safari). */ +var reIsHostCtor = /^\[object .+?Constructor\]$/; + +/** Used for built-in method references. */ +var funcProto = Function.prototype, + objectProto$6 = Object.prototype; + +/** Used to resolve the decompiled source of functions. */ +var funcToString = funcProto.toString; + +/** Used to check objects for own properties. */ +var hasOwnProperty$5 = objectProto$6.hasOwnProperty; + +/** Used to detect if a method is native. */ +var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' +); + +/** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ +function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); +} + +/** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ +function getValue(object, key) { + return object == null ? undefined : object[key]; +} + +/** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ +function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; +} + +/** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ +function apply(func, thisArg, args) { + switch (args.length) { + case 0: return func.call(thisArg); + case 1: return func.call(thisArg, args[0]); + case 2: return func.call(thisArg, args[0], args[1]); + case 3: return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); +} + +/** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ +function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; +} + +/** Used to detect hot functions by number of calls within a span of milliseconds. */ +var HOT_COUNT = 800, + HOT_SPAN = 16; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeNow = Date.now; + +/** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ +function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function() { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; +} + +/** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ +function constant(value) { + return function() { + return value; + }; +} + +var defineProperty = (function() { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) {} +}()); + +/** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var baseSetToString = !defineProperty ? identity : function(func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); +}; + +/** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ +var setToString = shortOut(baseSetToString); + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$2 = 9007199254740991; + +/** Used to detect unsigned integer values. */ +var reIsUint = /^(?:0|[1-9]\d*)$/; + +/** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ +function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER$2 : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); +} + +/** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } +} + +/** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ +function eq(value, other) { + return value === other || (value !== value && other !== other); +} + +/** Used for built-in method references. */ +var objectProto$5 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$4 = objectProto$5.hasOwnProperty; + +/** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ +function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } +} + +/** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ +function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMax$1 = Math.max; + +/** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ +function overRest(func, start, transform) { + start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); + return function() { + var args = arguments, + index = -1, + length = nativeMax$1(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; +} + +/** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ +function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER$1 = 9007199254740991; + +/** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ +function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; +} + +/** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ +function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); +} + +/** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ +function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; +} + +/** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return baseRest(function(object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); +} + +/** Used for built-in method references. */ +var objectProto$4 = Object.prototype; + +/** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ +function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; + + return value === proto; +} + +/** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ +function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} + +/** `Object#toString` result references. */ +var argsTag$1 = '[object Arguments]'; + +/** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ +function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag$1; +} + +/** Used for built-in method references. */ +var objectProto$3 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$3 = objectProto$3.hasOwnProperty; + +/** Built-in value references. */ +var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; + +/** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ +var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { + return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); +}; + +/** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ +function stubFalse() { + return false; +} + +/** Detect free variable `exports`. */ +var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; + +/** Built-in value references. */ +var Buffer = moduleExports$1 ? root.Buffer : undefined; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; + +/** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ +var isBuffer = nativeIsBuffer || stubFalse; + +/** `Object#toString` result references. */ +var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + mapTag = '[object Map]', + numberTag = '[object Number]', + objectTag = '[object Object]', + regexpTag$1 = '[object RegExp]', + setTag = '[object Set]', + stringTag$1 = '[object String]', + weakMapTag = '[object WeakMap]'; + +var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + +/** Used to identify `toStringTag` values of typed arrays. */ +var typedArrayTags = {}; +typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = +typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = +typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = +typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = +typedArrayTags[uint32Tag] = true; +typedArrayTags[argsTag] = typedArrayTags[arrayTag] = +typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = +typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = +typedArrayTags[errorTag] = typedArrayTags[funcTag] = +typedArrayTags[mapTag] = typedArrayTags[numberTag] = +typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = +typedArrayTags[setTag] = typedArrayTags[stringTag$1] = +typedArrayTags[weakMapTag] = false; + +/** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ +function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; +} + +/** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ +function baseUnary(func) { + return function(value) { + return func(value); + }; +} + +/** Detect free variable `exports`. */ +var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + +/** Detect free variable `module`. */ +var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + +/** Detect the popular CommonJS extension `module.exports`. */ +var moduleExports = freeModule && freeModule.exports === freeExports; + +/** Detect free variable `process` from Node.js. */ +var freeProcess = moduleExports && freeGlobal.process; + +/** Used to access faster Node.js helpers. */ +var nodeUtil = (function() { + try { + // Use `util.types` for Node.js 10+. + var types = freeModule && freeModule.require && freeModule.require('util').types; + + if (types) { + return types; + } + + // Legacy `process.binding('util')` for Node.js < 10. + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) {} +}()); + +/* Node.js helper references. */ +var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + +/** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ +var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + +/** Used for built-in method references. */ +var objectProto$2 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$2 = objectProto$2.hasOwnProperty; + +/** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ +function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty$2.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; +} + +/** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ +function overArg(func, transform) { + return function(arg) { + return func(transform(arg)); + }; +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeKeys = overArg(Object.keys, Object); + +/** Used for built-in method references. */ +var objectProto$1 = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty$1 = objectProto$1.hasOwnProperty; + +/** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty$1.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ +function keys$1(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); +} + +/** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; +} + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ +function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; +} + +/** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ +function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); +} + +/** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ +var assignIn = createAssigner(function(object, source) { + copyObject(source, keysIn(source), object); +}); + +/** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ +function toString(value) { + return value == null ? '' : baseToString(value); +} + +/** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ +function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; +} + +/** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ +function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange$1 = '\\ud800-\\udfff', + rsComboMarksRange$1 = '\\u0300-\\u036f', + reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', + rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', + rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, + rsVarRange$1 = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsZWJ$1 = '\\u200d'; + +/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ +var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); + +/** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ +function hasUnicode(string) { + return reHasUnicode.test(string); +} + +/** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function asciiToArray(string) { + return string.split(''); +} + +/** Used to compose unicode character classes. */ +var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + +/** Used to compose unicode capture groups. */ +var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + +/** Used to compose unicode regexes. */ +var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + +/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ +var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + +/** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function unicodeToArray(string) { + return string.match(reUnicode) || []; +} + +/** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ +function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); +} + +/** + * Creates a function like `_.lowerFirst`. + * + * @private + * @param {string} methodName The name of the `String` case method to use. + * @returns {Function} Returns the new case function. + */ +function createCaseFirst(methodName) { + return function(string) { + string = toString(string); + + var strSymbols = hasUnicode(string) + ? stringToArray(string) + : undefined; + + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); + + return chr[methodName]() + trailing; + }; +} + +/** + * Converts the first character of `string` to upper case. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category String + * @param {string} [string=''] The string to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.upperFirst('fred'); + * // => 'Fred' + * + * _.upperFirst('FRED'); + * // => 'FRED' + */ +var upperFirst = createCaseFirst('toUpperCase'); + +/** + * Converts the first character of `string` to upper case and the remaining + * to lower case. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to capitalize. + * @returns {string} Returns the capitalized string. + * @example + * + * _.capitalize('FRED'); + * // => 'Fred' + */ +function capitalize(string) { + return upperFirst(toString(string).toLowerCase()); +} + +/** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ +function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; +} + +/** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ +function castFunction(value) { + return typeof value == 'function' ? value : identity; +} + +/** `Object#toString` result references. */ +var stringTag = '[object String]'; + +/** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ +function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); +} + +/** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ +function baseValues(object, props) { + return arrayMap(props, function(key) { + return object[key]; + }); +} + +/** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ +function values$1(object) { + return object == null ? [] : baseValues(object, keys$1(object)); +} + +/** `Object#toString` result references. */ +var regexpTag = '[object RegExp]'; + +/** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ +function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; +} + +/* Node.js helper references. */ +var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; + +/** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ +var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeFloor = Math.floor, + nativeRandom$1 = Math.random; + +/** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ +function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); +} + +/** Built-in method references without a dependency on `root`. */ +var freeParseFloat = parseFloat; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin$1 = Math.min, + nativeRandom = Math.random; + +/** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ +function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } + else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } + else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin$1(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); +} + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeCeil = Math.ceil, + nativeMax = Math.max; + +/** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ +function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; +} + +/** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ +function createRange(fromRight) { + return function(start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; +} + +/** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ +var range = createRange(); + +/** + * A specialized version of `_.sample` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @returns {*} Returns the random element. + */ +function arraySample(array) { + var length = array.length; + return length ? array[baseRandom(0, length - 1)] : undefined; +} + +/** + * The base implementation of `_.sample`. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + */ +function baseSample(collection) { + return arraySample(values$1(collection)); +} + +/** + * Gets a random element from `collection`. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @returns {*} Returns the random element. + * @example + * + * _.sample([1, 2, 3, 4]); + * // => 2 + */ +function sample(collection) { + var func = isArray(collection) ? arraySample : baseSample; + return func(collection); +} + +/** + * A specialized version of `_.shuffle` which mutates and sets the size of `array`. + * + * @private + * @param {Array} array The array to shuffle. + * @param {number} [size=array.length] The size of `array`. + * @returns {Array} Returns `array`. + */ +function shuffleSelf(array, size) { + var index = -1, + length = array.length, + lastIndex = length - 1; + + size = size === undefined ? length : size; + while (++index < size) { + var rand = baseRandom(index, lastIndex), + value = array[rand]; + + array[rand] = array[index]; + array[index] = value; + } + array.length = size; + return array; +} + +/** + * A specialized version of `_.sampleSize` for arrays. + * + * @private + * @param {Array} array The array to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function arraySampleSize(array, n) { + return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); +} + +/** + * The base implementation of `_.sampleSize` without param guards. + * + * @private + * @param {Array|Object} collection The collection to sample. + * @param {number} n The number of elements to sample. + * @returns {Array} Returns the random elements. + */ +function baseSampleSize(collection, n) { + var array = values$1(collection); + return shuffleSelf(array, baseClamp(n, 0, array.length)); +} + +/** + * Gets `n` random elements at unique keys from `collection` up to the + * size of `collection`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Collection + * @param {Array|Object} collection The collection to sample. + * @param {number} [n=1] The number of elements to sample. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the random elements. + * @example + * + * _.sampleSize([1, 2, 3], 2); + * // => [3, 1] + * + * _.sampleSize([1, 2, 3], 4); + * // => [2, 3, 1] + */ +function sampleSize(collection, n, guard) { + if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { + n = 1; + } else { + n = toInteger(n); + } + var func = isArray(collection) ? arraySampleSize : baseSampleSize; + return func(collection, n); +} + +/** + * A specialized version of `_.shuffle` for arrays. + * + * @private + * @param {Array} array The array to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function arrayShuffle(array) { + return shuffleSelf(copyArray(array)); +} + +/** + * The base implementation of `_.shuffle`. + * + * @private + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + */ +function baseShuffle(collection) { + return shuffleSelf(values$1(collection)); +} + +/** + * Creates an array of shuffled values, using a version of the + * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to shuffle. + * @returns {Array} Returns the new shuffled array. + * @example + * + * _.shuffle([1, 2, 3, 4]); + * // => [4, 1, 3, 2] + */ +function shuffle$1(collection) { + var func = isArray(collection) ? arrayShuffle : baseShuffle; + return func(collection); +} + +/** Used as references for various `Number` constants. */ +var MAX_SAFE_INTEGER = 9007199254740991; + +/** Used as references for the maximum length and index of an array. */ +var MAX_ARRAY_LENGTH = 4294967295; + +/* Built-in method references for those with the same name as other `lodash` methods. */ +var nativeMin = Math.min; + +/** + * Invokes the iteratee `n` times, returning an array of the results of + * each invocation. The iteratee is invoked with one argument; (index). + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the array of results. + * @example + * + * _.times(3, String); + * // => ['0', '1', '2'] + * + * _.times(4, _.constant(0)); + * // => [0, 0, 0, 0] + */ +function times(n, iteratee) { + n = toInteger(n); + if (n < 1 || n > MAX_SAFE_INTEGER) { + return []; + } + var index = MAX_ARRAY_LENGTH, + length = nativeMin(n, MAX_ARRAY_LENGTH); + + iteratee = castFunction(iteratee); + n -= MAX_ARRAY_LENGTH; + + var result = baseTimes(length, iteratee); + while (++index < n) { + iteratee(index); + } + return result; +} + +// 使用 lodash 提供的方式 +function type(obj) { + return obj === null || obj === undefined + ? String(obj) + : Object.prototype.toString + .call(obj) + .match(/\[object (\w+)\]/)[1] + .toLowerCase(); +} + +function isObjectOrArray(value) { + return isObject(value) || isArray(value); +} + +function isNumeric(value) { + return !isNaN(parseFloat(value)) && isFinite(value); +} + +// import { isObject, isArray } from "./type.js"; +function extend(...args) { + return assignIn(this, ...args); +} + +function each(obj, iterator, context) { + // each + let i; + let key; + if (type(obj) === 'number') { + // 表示重复几次 + [...Array(obj).keys()].forEach((index) => iterator(index, index)); + } else if (obj.length === +obj.length) { + for (i = 0; i < obj.length; i++) { + if (iterator.call(context, obj[i], i, obj) === false) break; + } + } else { + for (key in obj) { + if (iterator.call(context, obj[key], key, obj) === false) break; + } + } +} + +/* + ### Mock.heredoc(fn) + + * Mock.heredoc(fn) + + 以直观、安全的方式书写(多行)HTML 模板。 + + **使用示例**如下所示: + + var tpl = Mock.heredoc(function() { + /*! + {{email}}{{age}} + + *\/ + }) + + **相关阅读** + * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 +*/ +function heredoc(fn) { + // 1. 移除起始的 function(){ /*! + // 2. 移除末尾的 */ } + // 3. 移除起始和末尾的空格 + return fn + .toString() + .replace(/^[^\/]+\/\*!?/, '') + .replace(/\*\/[^\/]+$/, '') + .replace(/^[\s\xA0]+/, '') + .replace(/[\s\xA0]+$/, ''); // .trim() +} + +/* + ## Utilities +*/ +function keys(obj) { + return Object.keys(obj); +} +function values(obj) { + return Object.values(obj); +} +function noop() {} + +var Util = /*#__PURE__*/Object.freeze({ + __proto__: null, + keys: keys, + values: values, + noop: noop, + type: type, + extend: extend, + isObjectOrArray: isObjectOrArray, + isNumeric: isNumeric, + isString: isString, + isObject: isObject, + isArray: isArray, + isRegExp: isRegExp, + isFunction: isFunction, + each: each, + heredoc: heredoc +}); + +const isNumber = function (el) { + return typeof el === 'number' && !isNaN(el); +}; +const numberGate = function (input) { + if (isNumber(input)) return input; + const res = parseInt(input); + return isNumber(res) ? res : undefined; +}; +// 返回一个随机的整数。 +const integer = function (min, max) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + return random(min, max, false); +}; +const natural = function (min, max) { + return Math.abs(integer(min, max)); +}; + +const float = function (min, max, dmin, dmax) { + min = numberGate(min); + if (!isNumber(min)) min = -9007199254740992; + max = numberGate(max); + if (!isNumber(max)) max = 9007199254740992; + dmin = numberGate(dmin) || 1; + dmax = numberGate(dmax) || 17; + if (dmin < 1) dmin = 1; + if (dmax > 17) dmax = 17; + const dcount = random(dmin, dmax, false); + return parseFloat(random(min, max, true).toFixed(dcount)); +}; + +const boolean$1 = function (min, max, cur = false) { + // ! cur:boolean 是划分概率的一个启动符号 + // if (cur) { + // min = isNumber(min) ? parseInt(min, 10) : 1; + // max = isNumber(max) ? parseInt(max, 10) : 1; + // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; + // } + if (cur) { + return random(0, min + max) > min ? !cur : cur; + } + return random(10, -10) > 0; +}; + +const pools = { + lower: 'abcdefghijklmnopqrstuvwxyz', + upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', + number: '0123456789', + symbol: '!@#$%^&*()[]', +}; +pools.alpha = pools.lower + pools.upper; +pools.default = pools.lower + pools.upper + pools.number + pools.symbol; + +const character = function (pool = 'default') { + if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { + pool = pools[pool.toLowerCase()]; + } + return sample(pool); +}; + +const string$1 = function (...args) { + let len; + let pool; + let min; + let max; + switch (args.length) { + case 0: // () + len = natural(3, 7); + break; + case 1: // ( length ) + [len] = args; + break; + case 2: + // ( pool, length ) + if (typeof args[0] === 'string') { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + return times(len, () => character(pool)).join(''); +}; + +function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; +} + +var colorName$1 = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var isArrayish = function isArrayish(obj) { + if (!obj || typeof obj === 'string') { + return false; + } + + return obj instanceof Array || Array.isArray(obj) || + (obj.length >= 0 && (obj.splice instanceof Function || + (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); +}; + +var simpleSwizzle = createCommonjsModule(function (module) { + + + +var concat = Array.prototype.concat; +var slice = Array.prototype.slice; + +var swizzle = module.exports = function swizzle(args) { + var results = []; + + for (var i = 0, len = args.length; i < len; i++) { + var arg = args[i]; + + if (isArrayish(arg)) { + // http://jsperf.com/javascript-array-concat-vs-push/98 + results = concat.call(results, slice.call(arg)); + } else { + results.push(arg); + } + } + + return results; +}; + +swizzle.wrap = function (fn) { + return function () { + return fn(swizzle(arguments)); + }; +}; +}); + +var colorString = createCommonjsModule(function (module) { +/* MIT license */ + + + +var reverseNames = {}; + +// create a list of reverse color names +for (var name in colorName$1) { + if (colorName$1.hasOwnProperty(name)) { + reverseNames[colorName$1[name]] = name; + } +} + +var cs = module.exports = { + to: {}, + get: {} +}; + +cs.get = function (string) { + var prefix = string.substring(0, 3).toLowerCase(); + var val; + var model; + switch (prefix) { + case 'hsl': + val = cs.get.hsl(string); + model = 'hsl'; + break; + case 'hwb': + val = cs.get.hwb(string); + model = 'hwb'; + break; + default: + val = cs.get.rgb(string); + model = 'rgb'; + break; + } + + if (!val) { + return null; + } + + return {model: model, value: val}; +}; + +cs.get.rgb = function (string) { + if (!string) { + return null; + } + + var abbr = /^#([a-f0-9]{3,4})$/i; + var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; + var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var keyword = /(\D+)/; + + var rgb = [0, 0, 0, 1]; + var match; + var i; + var hexAlpha; + + if (match = string.match(hex)) { + hexAlpha = match[2]; + match = match[1]; + + for (i = 0; i < 3; i++) { + // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 + var i2 = i * 2; + rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha, 16) / 255; + } + } else if (match = string.match(abbr)) { + match = match[1]; + hexAlpha = match[3]; + + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i] + match[i], 16); + } + + if (hexAlpha) { + rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; + } + } else if (match = string.match(rgba)) { + for (i = 0; i < 3; i++) { + rgb[i] = parseInt(match[i + 1], 0); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(per)) { + for (i = 0; i < 3; i++) { + rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); + } + + if (match[4]) { + rgb[3] = parseFloat(match[4]); + } + } else if (match = string.match(keyword)) { + if (match[1] === 'transparent') { + return [0, 0, 0, 0]; + } + + rgb = colorName$1[match[1]]; + + if (!rgb) { + return null; + } + + rgb[3] = 1; + + return rgb; + } else { + return null; + } + + for (i = 0; i < 3; i++) { + rgb[i] = clamp(rgb[i], 0, 255); + } + rgb[3] = clamp(rgb[3], 0, 1); + + return rgb; +}; + +cs.get.hsl = function (string) { + if (!string) { + return null; + } + + var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hsl); + + if (match) { + var alpha = parseFloat(match[4]); + var h = (parseFloat(match[1]) + 360) % 360; + var s = clamp(parseFloat(match[2]), 0, 100); + var l = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + + return [h, s, l, a]; + } + + return null; +}; + +cs.get.hwb = function (string) { + if (!string) { + return null; + } + + var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; + var match = string.match(hwb); + + if (match) { + var alpha = parseFloat(match[4]); + var h = ((parseFloat(match[1]) % 360) + 360) % 360; + var w = clamp(parseFloat(match[2]), 0, 100); + var b = clamp(parseFloat(match[3]), 0, 100); + var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); + return [h, w, b, a]; + } + + return null; +}; + +cs.to.hex = function () { + var rgba = simpleSwizzle(arguments); + + return ( + '#' + + hexDouble(rgba[0]) + + hexDouble(rgba[1]) + + hexDouble(rgba[2]) + + (rgba[3] < 1 + ? (hexDouble(Math.round(rgba[3] * 255))) + : '') + ); +}; + +cs.to.rgb = function () { + var rgba = simpleSwizzle(arguments); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' + : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; +}; + +cs.to.rgb.percent = function () { + var rgba = simpleSwizzle(arguments); + + var r = Math.round(rgba[0] / 255 * 100); + var g = Math.round(rgba[1] / 255 * 100); + var b = Math.round(rgba[2] / 255 * 100); + + return rgba.length < 4 || rgba[3] === 1 + ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' + : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; +}; + +cs.to.hsl = function () { + var hsla = simpleSwizzle(arguments); + return hsla.length < 4 || hsla[3] === 1 + ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' + : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; +}; + +// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax +// (hwb have alpha optional & 1 is default value) +cs.to.hwb = function () { + var hwba = simpleSwizzle(arguments); + + var a = ''; + if (hwba.length >= 4 && hwba[3] !== 1) { + a = ', ' + hwba[3]; + } + + return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; +}; + +cs.to.keyword = function (rgb) { + return reverseNames[rgb.slice(0, 3)]; +}; + +// helpers +function clamp(num, min, max) { + return Math.min(Math.max(min, num), max); +} + +function hexDouble(num) { + var str = num.toString(16).toUpperCase(); + return (str.length < 2) ? '0' + str : str; +} +}); +colorString.to; +colorString.get; + +var colorName = { + "aliceblue": [240, 248, 255], + "antiquewhite": [250, 235, 215], + "aqua": [0, 255, 255], + "aquamarine": [127, 255, 212], + "azure": [240, 255, 255], + "beige": [245, 245, 220], + "bisque": [255, 228, 196], + "black": [0, 0, 0], + "blanchedalmond": [255, 235, 205], + "blue": [0, 0, 255], + "blueviolet": [138, 43, 226], + "brown": [165, 42, 42], + "burlywood": [222, 184, 135], + "cadetblue": [95, 158, 160], + "chartreuse": [127, 255, 0], + "chocolate": [210, 105, 30], + "coral": [255, 127, 80], + "cornflowerblue": [100, 149, 237], + "cornsilk": [255, 248, 220], + "crimson": [220, 20, 60], + "cyan": [0, 255, 255], + "darkblue": [0, 0, 139], + "darkcyan": [0, 139, 139], + "darkgoldenrod": [184, 134, 11], + "darkgray": [169, 169, 169], + "darkgreen": [0, 100, 0], + "darkgrey": [169, 169, 169], + "darkkhaki": [189, 183, 107], + "darkmagenta": [139, 0, 139], + "darkolivegreen": [85, 107, 47], + "darkorange": [255, 140, 0], + "darkorchid": [153, 50, 204], + "darkred": [139, 0, 0], + "darksalmon": [233, 150, 122], + "darkseagreen": [143, 188, 143], + "darkslateblue": [72, 61, 139], + "darkslategray": [47, 79, 79], + "darkslategrey": [47, 79, 79], + "darkturquoise": [0, 206, 209], + "darkviolet": [148, 0, 211], + "deeppink": [255, 20, 147], + "deepskyblue": [0, 191, 255], + "dimgray": [105, 105, 105], + "dimgrey": [105, 105, 105], + "dodgerblue": [30, 144, 255], + "firebrick": [178, 34, 34], + "floralwhite": [255, 250, 240], + "forestgreen": [34, 139, 34], + "fuchsia": [255, 0, 255], + "gainsboro": [220, 220, 220], + "ghostwhite": [248, 248, 255], + "gold": [255, 215, 0], + "goldenrod": [218, 165, 32], + "gray": [128, 128, 128], + "green": [0, 128, 0], + "greenyellow": [173, 255, 47], + "grey": [128, 128, 128], + "honeydew": [240, 255, 240], + "hotpink": [255, 105, 180], + "indianred": [205, 92, 92], + "indigo": [75, 0, 130], + "ivory": [255, 255, 240], + "khaki": [240, 230, 140], + "lavender": [230, 230, 250], + "lavenderblush": [255, 240, 245], + "lawngreen": [124, 252, 0], + "lemonchiffon": [255, 250, 205], + "lightblue": [173, 216, 230], + "lightcoral": [240, 128, 128], + "lightcyan": [224, 255, 255], + "lightgoldenrodyellow": [250, 250, 210], + "lightgray": [211, 211, 211], + "lightgreen": [144, 238, 144], + "lightgrey": [211, 211, 211], + "lightpink": [255, 182, 193], + "lightsalmon": [255, 160, 122], + "lightseagreen": [32, 178, 170], + "lightskyblue": [135, 206, 250], + "lightslategray": [119, 136, 153], + "lightslategrey": [119, 136, 153], + "lightsteelblue": [176, 196, 222], + "lightyellow": [255, 255, 224], + "lime": [0, 255, 0], + "limegreen": [50, 205, 50], + "linen": [250, 240, 230], + "magenta": [255, 0, 255], + "maroon": [128, 0, 0], + "mediumaquamarine": [102, 205, 170], + "mediumblue": [0, 0, 205], + "mediumorchid": [186, 85, 211], + "mediumpurple": [147, 112, 219], + "mediumseagreen": [60, 179, 113], + "mediumslateblue": [123, 104, 238], + "mediumspringgreen": [0, 250, 154], + "mediumturquoise": [72, 209, 204], + "mediumvioletred": [199, 21, 133], + "midnightblue": [25, 25, 112], + "mintcream": [245, 255, 250], + "mistyrose": [255, 228, 225], + "moccasin": [255, 228, 181], + "navajowhite": [255, 222, 173], + "navy": [0, 0, 128], + "oldlace": [253, 245, 230], + "olive": [128, 128, 0], + "olivedrab": [107, 142, 35], + "orange": [255, 165, 0], + "orangered": [255, 69, 0], + "orchid": [218, 112, 214], + "palegoldenrod": [238, 232, 170], + "palegreen": [152, 251, 152], + "paleturquoise": [175, 238, 238], + "palevioletred": [219, 112, 147], + "papayawhip": [255, 239, 213], + "peachpuff": [255, 218, 185], + "peru": [205, 133, 63], + "pink": [255, 192, 203], + "plum": [221, 160, 221], + "powderblue": [176, 224, 230], + "purple": [128, 0, 128], + "rebeccapurple": [102, 51, 153], + "red": [255, 0, 0], + "rosybrown": [188, 143, 143], + "royalblue": [65, 105, 225], + "saddlebrown": [139, 69, 19], + "salmon": [250, 128, 114], + "sandybrown": [244, 164, 96], + "seagreen": [46, 139, 87], + "seashell": [255, 245, 238], + "sienna": [160, 82, 45], + "silver": [192, 192, 192], + "skyblue": [135, 206, 235], + "slateblue": [106, 90, 205], + "slategray": [112, 128, 144], + "slategrey": [112, 128, 144], + "snow": [255, 250, 250], + "springgreen": [0, 255, 127], + "steelblue": [70, 130, 180], + "tan": [210, 180, 140], + "teal": [0, 128, 128], + "thistle": [216, 191, 216], + "tomato": [255, 99, 71], + "turquoise": [64, 224, 208], + "violet": [238, 130, 238], + "wheat": [245, 222, 179], + "white": [255, 255, 255], + "whitesmoke": [245, 245, 245], + "yellow": [255, 255, 0], + "yellowgreen": [154, 205, 50] +}; + +var conversions = createCommonjsModule(function (module) { +/* MIT license */ + + +// NOTE: conversions should only return primitive values (i.e. arrays, or +// values that give correct `typeof` results). +// do not use box values types (i.e. Number(), String(), etc.) + +var reverseKeywords = {}; +for (var key in colorName) { + if (colorName.hasOwnProperty(key)) { + reverseKeywords[colorName[key]] = key; + } +} + +var convert = module.exports = { + rgb: {channels: 3, labels: 'rgb'}, + hsl: {channels: 3, labels: 'hsl'}, + hsv: {channels: 3, labels: 'hsv'}, + hwb: {channels: 3, labels: 'hwb'}, + cmyk: {channels: 4, labels: 'cmyk'}, + xyz: {channels: 3, labels: 'xyz'}, + lab: {channels: 3, labels: 'lab'}, + lch: {channels: 3, labels: 'lch'}, + hex: {channels: 1, labels: ['hex']}, + keyword: {channels: 1, labels: ['keyword']}, + ansi16: {channels: 1, labels: ['ansi16']}, + ansi256: {channels: 1, labels: ['ansi256']}, + hcg: {channels: 3, labels: ['h', 'c', 'g']}, + apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, + gray: {channels: 1, labels: ['gray']} +}; + +// hide .channels and .labels properties +for (var model in convert) { + if (convert.hasOwnProperty(model)) { + if (!('channels' in convert[model])) { + throw new Error('missing channels property: ' + model); + } + + if (!('labels' in convert[model])) { + throw new Error('missing channel labels property: ' + model); + } + + if (convert[model].labels.length !== convert[model].channels) { + throw new Error('channel and label counts mismatch: ' + model); + } + + var channels = convert[model].channels; + var labels = convert[model].labels; + delete convert[model].channels; + delete convert[model].labels; + Object.defineProperty(convert[model], 'channels', {value: channels}); + Object.defineProperty(convert[model], 'labels', {value: labels}); + } +} + +convert.rgb.hsl = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var min = Math.min(r, g, b); + var max = Math.max(r, g, b); + var delta = max - min; + var h; + var s; + var l; + + if (max === min) { + h = 0; + } else if (r === max) { + h = (g - b) / delta; + } else if (g === max) { + h = 2 + (b - r) / delta; + } else if (b === max) { + h = 4 + (r - g) / delta; + } + + h = Math.min(h * 60, 360); + + if (h < 0) { + h += 360; + } + + l = (min + max) / 2; + + if (max === min) { + s = 0; + } else if (l <= 0.5) { + s = delta / (max + min); + } else { + s = delta / (2 - max - min); + } + + return [h, s * 100, l * 100]; +}; + +convert.rgb.hsv = function (rgb) { + var rdif; + var gdif; + var bdif; + var h; + var s; + + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var v = Math.max(r, g, b); + var diff = v - Math.min(r, g, b); + var diffc = function (c) { + return (v - c) / 6 / diff + 1 / 2; + }; + + if (diff === 0) { + h = s = 0; + } else { + s = diff / v; + rdif = diffc(r); + gdif = diffc(g); + bdif = diffc(b); + + if (r === v) { + h = bdif - gdif; + } else if (g === v) { + h = (1 / 3) + rdif - bdif; + } else if (b === v) { + h = (2 / 3) + gdif - rdif; + } + if (h < 0) { + h += 1; + } else if (h > 1) { + h -= 1; + } + } + + return [ + h * 360, + s * 100, + v * 100 + ]; +}; + +convert.rgb.hwb = function (rgb) { + var r = rgb[0]; + var g = rgb[1]; + var b = rgb[2]; + var h = convert.rgb.hsl(rgb)[0]; + var w = 1 / 255 * Math.min(r, Math.min(g, b)); + + b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); + + return [h, w * 100, b * 100]; +}; + +convert.rgb.cmyk = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var c; + var m; + var y; + var k; + + k = Math.min(1 - r, 1 - g, 1 - b); + c = (1 - r - k) / (1 - k) || 0; + m = (1 - g - k) / (1 - k) || 0; + y = (1 - b - k) / (1 - k) || 0; + + return [c * 100, m * 100, y * 100, k * 100]; +}; + +/** + * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance + * */ +function comparativeDistance(x, y) { + return ( + Math.pow(x[0] - y[0], 2) + + Math.pow(x[1] - y[1], 2) + + Math.pow(x[2] - y[2], 2) + ); +} + +convert.rgb.keyword = function (rgb) { + var reversed = reverseKeywords[rgb]; + if (reversed) { + return reversed; + } + + var currentClosestDistance = Infinity; + var currentClosestKeyword; + + for (var keyword in colorName) { + if (colorName.hasOwnProperty(keyword)) { + var value = colorName[keyword]; + + // Compute comparative distance + var distance = comparativeDistance(rgb, value); + + // Check if its less, if so set as closest + if (distance < currentClosestDistance) { + currentClosestDistance = distance; + currentClosestKeyword = keyword; + } + } + } + + return currentClosestKeyword; +}; + +convert.keyword.rgb = function (keyword) { + return colorName[keyword]; +}; + +convert.rgb.xyz = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + + // assume sRGB + r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); + g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); + b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); + + var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); + var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); + var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); + + return [x * 100, y * 100, z * 100]; +}; + +convert.rgb.lab = function (rgb) { + var xyz = convert.rgb.xyz(rgb); + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.hsl.rgb = function (hsl) { + var h = hsl[0] / 360; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var t1; + var t2; + var t3; + var rgb; + var val; + + if (s === 0) { + val = l * 255; + return [val, val, val]; + } + + if (l < 0.5) { + t2 = l * (1 + s); + } else { + t2 = l + s - l * s; + } + + t1 = 2 * l - t2; + + rgb = [0, 0, 0]; + for (var i = 0; i < 3; i++) { + t3 = h + 1 / 3 * -(i - 1); + if (t3 < 0) { + t3++; + } + if (t3 > 1) { + t3--; + } + + if (6 * t3 < 1) { + val = t1 + (t2 - t1) * 6 * t3; + } else if (2 * t3 < 1) { + val = t2; + } else if (3 * t3 < 2) { + val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; + } else { + val = t1; + } + + rgb[i] = val * 255; + } + + return rgb; +}; + +convert.hsl.hsv = function (hsl) { + var h = hsl[0]; + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var smin = s; + var lmin = Math.max(l, 0.01); + var sv; + var v; + + l *= 2; + s *= (l <= 1) ? l : 2 - l; + smin *= lmin <= 1 ? lmin : 2 - lmin; + v = (l + s) / 2; + sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); + + return [h, sv * 100, v * 100]; +}; + +convert.hsv.rgb = function (hsv) { + var h = hsv[0] / 60; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var hi = Math.floor(h) % 6; + + var f = h - Math.floor(h); + var p = 255 * v * (1 - s); + var q = 255 * v * (1 - (s * f)); + var t = 255 * v * (1 - (s * (1 - f))); + v *= 255; + + switch (hi) { + case 0: + return [v, t, p]; + case 1: + return [q, v, p]; + case 2: + return [p, v, t]; + case 3: + return [p, q, v]; + case 4: + return [t, p, v]; + case 5: + return [v, p, q]; + } +}; + +convert.hsv.hsl = function (hsv) { + var h = hsv[0]; + var s = hsv[1] / 100; + var v = hsv[2] / 100; + var vmin = Math.max(v, 0.01); + var lmin; + var sl; + var l; + + l = (2 - s) * v; + lmin = (2 - s) * vmin; + sl = s * vmin; + sl /= (lmin <= 1) ? lmin : 2 - lmin; + sl = sl || 0; + l /= 2; + + return [h, sl * 100, l * 100]; +}; + +// http://dev.w3.org/csswg/css-color/#hwb-to-rgb +convert.hwb.rgb = function (hwb) { + var h = hwb[0] / 360; + var wh = hwb[1] / 100; + var bl = hwb[2] / 100; + var ratio = wh + bl; + var i; + var v; + var f; + var n; + + // wh + bl cant be > 1 + if (ratio > 1) { + wh /= ratio; + bl /= ratio; + } + + i = Math.floor(6 * h); + v = 1 - bl; + f = 6 * h - i; + + if ((i & 0x01) !== 0) { + f = 1 - f; + } + + n = wh + f * (v - wh); // linear interpolation + + var r; + var g; + var b; + switch (i) { + default: + case 6: + case 0: r = v; g = n; b = wh; break; + case 1: r = n; g = v; b = wh; break; + case 2: r = wh; g = v; b = n; break; + case 3: r = wh; g = n; b = v; break; + case 4: r = n; g = wh; b = v; break; + case 5: r = v; g = wh; b = n; break; + } + + return [r * 255, g * 255, b * 255]; +}; + +convert.cmyk.rgb = function (cmyk) { + var c = cmyk[0] / 100; + var m = cmyk[1] / 100; + var y = cmyk[2] / 100; + var k = cmyk[3] / 100; + var r; + var g; + var b; + + r = 1 - Math.min(1, c * (1 - k) + k); + g = 1 - Math.min(1, m * (1 - k) + k); + b = 1 - Math.min(1, y * (1 - k) + k); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.rgb = function (xyz) { + var x = xyz[0] / 100; + var y = xyz[1] / 100; + var z = xyz[2] / 100; + var r; + var g; + var b; + + r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); + g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); + b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); + + // assume sRGB + r = r > 0.0031308 + ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) + : r * 12.92; + + g = g > 0.0031308 + ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) + : g * 12.92; + + b = b > 0.0031308 + ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) + : b * 12.92; + + r = Math.min(Math.max(0, r), 1); + g = Math.min(Math.max(0, g), 1); + b = Math.min(Math.max(0, b), 1); + + return [r * 255, g * 255, b * 255]; +}; + +convert.xyz.lab = function (xyz) { + var x = xyz[0]; + var y = xyz[1]; + var z = xyz[2]; + var l; + var a; + var b; + + x /= 95.047; + y /= 100; + z /= 108.883; + + x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); + y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); + z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); + + l = (116 * y) - 16; + a = 500 * (x - y); + b = 200 * (y - z); + + return [l, a, b]; +}; + +convert.lab.xyz = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var x; + var y; + var z; + + y = (l + 16) / 116; + x = a / 500 + y; + z = y - b / 200; + + var y2 = Math.pow(y, 3); + var x2 = Math.pow(x, 3); + var z2 = Math.pow(z, 3); + y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; + x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; + z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; + + x *= 95.047; + y *= 100; + z *= 108.883; + + return [x, y, z]; +}; + +convert.lab.lch = function (lab) { + var l = lab[0]; + var a = lab[1]; + var b = lab[2]; + var hr; + var h; + var c; + + hr = Math.atan2(b, a); + h = hr * 360 / 2 / Math.PI; + + if (h < 0) { + h += 360; + } + + c = Math.sqrt(a * a + b * b); + + return [l, c, h]; +}; + +convert.lch.lab = function (lch) { + var l = lch[0]; + var c = lch[1]; + var h = lch[2]; + var a; + var b; + var hr; + + hr = h / 360 * 2 * Math.PI; + a = c * Math.cos(hr); + b = c * Math.sin(hr); + + return [l, a, b]; +}; + +convert.rgb.ansi16 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization + + value = Math.round(value / 50); + + if (value === 0) { + return 30; + } + + var ansi = 30 + + ((Math.round(b / 255) << 2) + | (Math.round(g / 255) << 1) + | Math.round(r / 255)); + + if (value === 2) { + ansi += 60; + } + + return ansi; +}; + +convert.hsv.ansi16 = function (args) { + // optimization here; we already know the value and don't need to get + // it converted for us. + return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); +}; + +convert.rgb.ansi256 = function (args) { + var r = args[0]; + var g = args[1]; + var b = args[2]; + + // we use the extended greyscale palette here, with the exception of + // black and white. normal palette only has 4 greyscale shades. + if (r === g && g === b) { + if (r < 8) { + return 16; + } + + if (r > 248) { + return 231; + } + + return Math.round(((r - 8) / 247) * 24) + 232; + } + + var ansi = 16 + + (36 * Math.round(r / 255 * 5)) + + (6 * Math.round(g / 255 * 5)) + + Math.round(b / 255 * 5); + + return ansi; +}; + +convert.ansi16.rgb = function (args) { + var color = args % 10; + + // handle greyscale + if (color === 0 || color === 7) { + if (args > 50) { + color += 3.5; + } + + color = color / 10.5 * 255; + + return [color, color, color]; + } + + var mult = (~~(args > 50) + 1) * 0.5; + var r = ((color & 1) * mult) * 255; + var g = (((color >> 1) & 1) * mult) * 255; + var b = (((color >> 2) & 1) * mult) * 255; + + return [r, g, b]; +}; + +convert.ansi256.rgb = function (args) { + // handle greyscale + if (args >= 232) { + var c = (args - 232) * 10 + 8; + return [c, c, c]; + } + + args -= 16; + + var rem; + var r = Math.floor(args / 36) / 5 * 255; + var g = Math.floor((rem = args % 36) / 6) / 5 * 255; + var b = (rem % 6) / 5 * 255; + + return [r, g, b]; +}; + +convert.rgb.hex = function (args) { + var integer = ((Math.round(args[0]) & 0xFF) << 16) + + ((Math.round(args[1]) & 0xFF) << 8) + + (Math.round(args[2]) & 0xFF); + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.hex.rgb = function (args) { + var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); + if (!match) { + return [0, 0, 0]; + } + + var colorString = match[0]; + + if (match[0].length === 3) { + colorString = colorString.split('').map(function (char) { + return char + char; + }).join(''); + } + + var integer = parseInt(colorString, 16); + var r = (integer >> 16) & 0xFF; + var g = (integer >> 8) & 0xFF; + var b = integer & 0xFF; + + return [r, g, b]; +}; + +convert.rgb.hcg = function (rgb) { + var r = rgb[0] / 255; + var g = rgb[1] / 255; + var b = rgb[2] / 255; + var max = Math.max(Math.max(r, g), b); + var min = Math.min(Math.min(r, g), b); + var chroma = (max - min); + var grayscale; + var hue; + + if (chroma < 1) { + grayscale = min / (1 - chroma); + } else { + grayscale = 0; + } + + if (chroma <= 0) { + hue = 0; + } else + if (max === r) { + hue = ((g - b) / chroma) % 6; + } else + if (max === g) { + hue = 2 + (b - r) / chroma; + } else { + hue = 4 + (r - g) / chroma + 4; + } + + hue /= 6; + hue %= 1; + + return [hue * 360, chroma * 100, grayscale * 100]; +}; + +convert.hsl.hcg = function (hsl) { + var s = hsl[1] / 100; + var l = hsl[2] / 100; + var c = 1; + var f = 0; + + if (l < 0.5) { + c = 2.0 * s * l; + } else { + c = 2.0 * s * (1.0 - l); + } + + if (c < 1.0) { + f = (l - 0.5 * c) / (1.0 - c); + } + + return [hsl[0], c * 100, f * 100]; +}; + +convert.hsv.hcg = function (hsv) { + var s = hsv[1] / 100; + var v = hsv[2] / 100; + + var c = s * v; + var f = 0; + + if (c < 1.0) { + f = (v - c) / (1 - c); + } + + return [hsv[0], c * 100, f * 100]; +}; + +convert.hcg.rgb = function (hcg) { + var h = hcg[0] / 360; + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + if (c === 0.0) { + return [g * 255, g * 255, g * 255]; + } + + var pure = [0, 0, 0]; + var hi = (h % 1) * 6; + var v = hi % 1; + var w = 1 - v; + var mg = 0; + + switch (Math.floor(hi)) { + case 0: + pure[0] = 1; pure[1] = v; pure[2] = 0; break; + case 1: + pure[0] = w; pure[1] = 1; pure[2] = 0; break; + case 2: + pure[0] = 0; pure[1] = 1; pure[2] = v; break; + case 3: + pure[0] = 0; pure[1] = w; pure[2] = 1; break; + case 4: + pure[0] = v; pure[1] = 0; pure[2] = 1; break; + default: + pure[0] = 1; pure[1] = 0; pure[2] = w; + } + + mg = (1.0 - c) * g; + + return [ + (c * pure[0] + mg) * 255, + (c * pure[1] + mg) * 255, + (c * pure[2] + mg) * 255 + ]; +}; + +convert.hcg.hsv = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var v = c + g * (1.0 - c); + var f = 0; + + if (v > 0.0) { + f = c / v; + } + + return [hcg[0], f * 100, v * 100]; +}; + +convert.hcg.hsl = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + + var l = g * (1.0 - c) + 0.5 * c; + var s = 0; + + if (l > 0.0 && l < 0.5) { + s = c / (2 * l); + } else + if (l >= 0.5 && l < 1.0) { + s = c / (2 * (1 - l)); + } + + return [hcg[0], s * 100, l * 100]; +}; + +convert.hcg.hwb = function (hcg) { + var c = hcg[1] / 100; + var g = hcg[2] / 100; + var v = c + g * (1.0 - c); + return [hcg[0], (v - c) * 100, (1 - v) * 100]; +}; + +convert.hwb.hcg = function (hwb) { + var w = hwb[1] / 100; + var b = hwb[2] / 100; + var v = 1 - b; + var c = v - w; + var g = 0; + + if (c < 1) { + g = (v - c) / (1 - c); + } + + return [hwb[0], c * 100, g * 100]; +}; + +convert.apple.rgb = function (apple) { + return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; +}; + +convert.rgb.apple = function (rgb) { + return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; +}; + +convert.gray.rgb = function (args) { + return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; +}; + +convert.gray.hsl = convert.gray.hsv = function (args) { + return [0, 0, args[0]]; +}; + +convert.gray.hwb = function (gray) { + return [0, 100, gray[0]]; +}; + +convert.gray.cmyk = function (gray) { + return [0, 0, 0, gray[0]]; +}; + +convert.gray.lab = function (gray) { + return [gray[0], 0, 0]; +}; + +convert.gray.hex = function (gray) { + var val = Math.round(gray[0] / 100 * 255) & 0xFF; + var integer = (val << 16) + (val << 8) + val; + + var string = integer.toString(16).toUpperCase(); + return '000000'.substring(string.length) + string; +}; + +convert.rgb.gray = function (rgb) { + var val = (rgb[0] + rgb[1] + rgb[2]) / 3; + return [val / 255 * 100]; +}; +}); +conversions.rgb; +conversions.hsl; +conversions.hsv; +conversions.hwb; +conversions.cmyk; +conversions.xyz; +conversions.lab; +conversions.lch; +conversions.hex; +conversions.keyword; +conversions.ansi16; +conversions.ansi256; +conversions.hcg; +conversions.apple; +conversions.gray; + +/* + this function routes a model to all other models. + + all functions that are routed have a property `.conversion` attached + to the returned synthetic function. This property is an array + of strings, each with the steps in between the 'from' and 'to' + color models (inclusive). + + conversions that are not possible simply are not included. +*/ + +function buildGraph() { + var graph = {}; + // https://jsperf.com/object-keys-vs-for-in-with-closure/3 + var models = Object.keys(conversions); + + for (var len = models.length, i = 0; i < len; i++) { + graph[models[i]] = { + // http://jsperf.com/1-vs-infinity + // micro-opt, but this is simple. + distance: -1, + parent: null + }; + } + + return graph; +} + +// https://en.wikipedia.org/wiki/Breadth-first_search +function deriveBFS(fromModel) { + var graph = buildGraph(); + var queue = [fromModel]; // unshift -> queue -> pop + + graph[fromModel].distance = 0; + + while (queue.length) { + var current = queue.pop(); + var adjacents = Object.keys(conversions[current]); + + for (var len = adjacents.length, i = 0; i < len; i++) { + var adjacent = adjacents[i]; + var node = graph[adjacent]; + + if (node.distance === -1) { + node.distance = graph[current].distance + 1; + node.parent = current; + queue.unshift(adjacent); + } + } + } + + return graph; +} + +function link(from, to) { + return function (args) { + return to(from(args)); + }; +} + +function wrapConversion(toModel, graph) { + var path = [graph[toModel].parent, toModel]; + var fn = conversions[graph[toModel].parent][toModel]; + + var cur = graph[toModel].parent; + while (graph[cur].parent) { + path.unshift(graph[cur].parent); + fn = link(conversions[graph[cur].parent][cur], fn); + cur = graph[cur].parent; + } + + fn.conversion = path; + return fn; +} + +var route = function (fromModel) { + var graph = deriveBFS(fromModel); + var conversion = {}; + + var models = Object.keys(graph); + for (var len = models.length, i = 0; i < len; i++) { + var toModel = models[i]; + var node = graph[toModel]; + + if (node.parent === null) { + // no possible conversion, or this node is the source model. + continue; + } + + conversion[toModel] = wrapConversion(toModel, graph); + } + + return conversion; +}; + +var convert$1 = {}; + +var models = Object.keys(conversions); + +function wrapRaw(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + return fn(args); + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +function wrapRounded(fn) { + var wrappedFn = function (args) { + if (args === undefined || args === null) { + return args; + } + + if (arguments.length > 1) { + args = Array.prototype.slice.call(arguments); + } + + var result = fn(args); + + // we're assuming the result is an array here. + // see notice in conversions.js; don't use box types + // in conversion functions. + if (typeof result === 'object') { + for (var len = result.length, i = 0; i < len; i++) { + result[i] = Math.round(result[i]); + } + } + + return result; + }; + + // preserve .conversion property if there is one + if ('conversion' in fn) { + wrappedFn.conversion = fn.conversion; + } + + return wrappedFn; +} + +models.forEach(function (fromModel) { + convert$1[fromModel] = {}; + + Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); + Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); + + var routes = route(fromModel); + var routeModels = Object.keys(routes); + + routeModels.forEach(function (toModel) { + var fn = routes[toModel]; + + convert$1[fromModel][toModel] = wrapRounded(fn); + convert$1[fromModel][toModel].raw = wrapRaw(fn); + }); +}); + +var colorConvert = convert$1; + +var _slice = [].slice; + +var skippedModels = [ + // to be honest, I don't really feel like keyword belongs in color convert, but eh. + 'keyword', + + // gray conflicts with some method names, and has its own method defined. + 'gray', + + // shouldn't really be in color-convert either... + 'hex' +]; + +var hashedModelKeys = {}; +Object.keys(colorConvert).forEach(function (model) { + hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; +}); + +var limiters = {}; + +function Color(obj, model) { + if (!(this instanceof Color)) { + return new Color(obj, model); + } + + if (model && model in skippedModels) { + model = null; + } + + if (model && !(model in colorConvert)) { + throw new Error('Unknown model: ' + model); + } + + var i; + var channels; + + if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq + this.model = 'rgb'; + this.color = [0, 0, 0]; + this.valpha = 1; + } else if (obj instanceof Color) { + this.model = obj.model; + this.color = obj.color.slice(); + this.valpha = obj.valpha; + } else if (typeof obj === 'string') { + var result = colorString.get(obj); + if (result === null) { + throw new Error('Unable to parse color from string: ' + obj); + } + + this.model = result.model; + channels = colorConvert[this.model].channels; + this.color = result.value.slice(0, channels); + this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; + } else if (obj.length) { + this.model = model || 'rgb'; + channels = colorConvert[this.model].channels; + var newArr = _slice.call(obj, 0, channels); + this.color = zeroArray(newArr, channels); + this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; + } else if (typeof obj === 'number') { + // this is always RGB - can be converted later on. + obj &= 0xFFFFFF; + this.model = 'rgb'; + this.color = [ + (obj >> 16) & 0xFF, + (obj >> 8) & 0xFF, + obj & 0xFF + ]; + this.valpha = 1; + } else { + this.valpha = 1; + + var keys = Object.keys(obj); + if ('alpha' in obj) { + keys.splice(keys.indexOf('alpha'), 1); + this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; + } + + var hashedKeys = keys.sort().join(''); + if (!(hashedKeys in hashedModelKeys)) { + throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); + } + + this.model = hashedModelKeys[hashedKeys]; + + var labels = colorConvert[this.model].labels; + var color = []; + for (i = 0; i < labels.length; i++) { + color.push(obj[labels[i]]); + } + + this.color = zeroArray(color); + } + + // perform limitations (clamping, etc.) + if (limiters[this.model]) { + channels = colorConvert[this.model].channels; + for (i = 0; i < channels; i++) { + var limit = limiters[this.model][i]; + if (limit) { + this.color[i] = limit(this.color[i]); + } + } + } + + this.valpha = Math.max(0, Math.min(1, this.valpha)); + + if (Object.freeze) { + Object.freeze(this); + } +} + +Color.prototype = { + toString: function () { + return this.string(); + }, + + toJSON: function () { + return this[this.model](); + }, + + string: function (places) { + var self = this.model in colorString.to ? this : this.rgb(); + self = self.round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to[self.model](args); + }, + + percentString: function (places) { + var self = this.rgb().round(typeof places === 'number' ? places : 1); + var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); + return colorString.to.rgb.percent(args); + }, + + array: function () { + return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); + }, + + object: function () { + var result = {}; + var channels = colorConvert[this.model].channels; + var labels = colorConvert[this.model].labels; + + for (var i = 0; i < channels; i++) { + result[labels[i]] = this.color[i]; + } + + if (this.valpha !== 1) { + result.alpha = this.valpha; + } + + return result; + }, + + unitArray: function () { + var rgb = this.rgb().color; + rgb[0] /= 255; + rgb[1] /= 255; + rgb[2] /= 255; + + if (this.valpha !== 1) { + rgb.push(this.valpha); + } + + return rgb; + }, + + unitObject: function () { + var rgb = this.rgb().object(); + rgb.r /= 255; + rgb.g /= 255; + rgb.b /= 255; + + if (this.valpha !== 1) { + rgb.alpha = this.valpha; + } + + return rgb; + }, + + round: function (places) { + places = Math.max(places || 0, 0); + return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); + }, + + alpha: function (val) { + if (arguments.length) { + return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); + } + + return this.valpha; + }, + + // rgb + red: getset('rgb', 0, maxfn(255)), + green: getset('rgb', 1, maxfn(255)), + blue: getset('rgb', 2, maxfn(255)), + + hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style + + saturationl: getset('hsl', 1, maxfn(100)), + lightness: getset('hsl', 2, maxfn(100)), + + saturationv: getset('hsv', 1, maxfn(100)), + value: getset('hsv', 2, maxfn(100)), + + chroma: getset('hcg', 1, maxfn(100)), + gray: getset('hcg', 2, maxfn(100)), + + white: getset('hwb', 1, maxfn(100)), + wblack: getset('hwb', 2, maxfn(100)), + + cyan: getset('cmyk', 0, maxfn(100)), + magenta: getset('cmyk', 1, maxfn(100)), + yellow: getset('cmyk', 2, maxfn(100)), + black: getset('cmyk', 3, maxfn(100)), + + x: getset('xyz', 0, maxfn(100)), + y: getset('xyz', 1, maxfn(100)), + z: getset('xyz', 2, maxfn(100)), + + l: getset('lab', 0, maxfn(100)), + a: getset('lab', 1), + b: getset('lab', 2), + + keyword: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorConvert[this.model].keyword(this.color); + }, + + hex: function (val) { + if (arguments.length) { + return new Color(val); + } + + return colorString.to.hex(this.rgb().round().color); + }, + + rgbNumber: function () { + var rgb = this.rgb().color; + return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); + }, + + luminosity: function () { + // http://www.w3.org/TR/WCAG20/#relativeluminancedef + var rgb = this.rgb().color; + + var lum = []; + for (var i = 0; i < rgb.length; i++) { + var chan = rgb[i] / 255; + lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); + } + + return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; + }, + + contrast: function (color2) { + // http://www.w3.org/TR/WCAG20/#contrast-ratiodef + var lum1 = this.luminosity(); + var lum2 = color2.luminosity(); + + if (lum1 > lum2) { + return (lum1 + 0.05) / (lum2 + 0.05); + } + + return (lum2 + 0.05) / (lum1 + 0.05); + }, + + level: function (color2) { + var contrastRatio = this.contrast(color2); + if (contrastRatio >= 7.1) { + return 'AAA'; + } + + return (contrastRatio >= 4.5) ? 'AA' : ''; + }, + + isDark: function () { + // YIQ equation from http://24ways.org/2010/calculating-color-contrast + var rgb = this.rgb().color; + var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; + return yiq < 128; + }, + + isLight: function () { + return !this.isDark(); + }, + + negate: function () { + var rgb = this.rgb(); + for (var i = 0; i < 3; i++) { + rgb.color[i] = 255 - rgb.color[i]; + } + return rgb; + }, + + lighten: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] += hsl.color[2] * ratio; + return hsl; + }, + + darken: function (ratio) { + var hsl = this.hsl(); + hsl.color[2] -= hsl.color[2] * ratio; + return hsl; + }, + + saturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] += hsl.color[1] * ratio; + return hsl; + }, + + desaturate: function (ratio) { + var hsl = this.hsl(); + hsl.color[1] -= hsl.color[1] * ratio; + return hsl; + }, + + whiten: function (ratio) { + var hwb = this.hwb(); + hwb.color[1] += hwb.color[1] * ratio; + return hwb; + }, + + blacken: function (ratio) { + var hwb = this.hwb(); + hwb.color[2] += hwb.color[2] * ratio; + return hwb; + }, + + grayscale: function () { + // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale + var rgb = this.rgb().color; + var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; + return Color.rgb(val, val, val); + }, + + fade: function (ratio) { + return this.alpha(this.valpha - (this.valpha * ratio)); + }, + + opaquer: function (ratio) { + return this.alpha(this.valpha + (this.valpha * ratio)); + }, + + rotate: function (degrees) { + var hsl = this.hsl(); + var hue = hsl.color[0]; + hue = (hue + degrees) % 360; + hue = hue < 0 ? 360 + hue : hue; + hsl.color[0] = hue; + return hsl; + }, + + mix: function (mixinColor, weight) { + // ported from sass implementation in C + // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 + if (!mixinColor || !mixinColor.rgb) { + throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); + } + var color1 = mixinColor.rgb(); + var color2 = this.rgb(); + var p = weight === undefined ? 0.5 : weight; + + var w = 2 * p - 1; + var a = color1.alpha() - color2.alpha(); + + var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; + var w2 = 1 - w1; + + return Color.rgb( + w1 * color1.red() + w2 * color2.red(), + w1 * color1.green() + w2 * color2.green(), + w1 * color1.blue() + w2 * color2.blue(), + color1.alpha() * p + color2.alpha() * (1 - p)); + } +}; + +// model conversion methods and static constructors +Object.keys(colorConvert).forEach(function (model) { + if (skippedModels.indexOf(model) !== -1) { + return; + } + + var channels = colorConvert[model].channels; + + // conversion methods + Color.prototype[model] = function () { + if (this.model === model) { + return new Color(this); + } + + if (arguments.length) { + return new Color(arguments, model); + } + + var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; + return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); + }; + + // 'static' construction methods + Color[model] = function (color) { + if (typeof color === 'number') { + color = zeroArray(_slice.call(arguments), channels); + } + return new Color(color, model); + }; +}); + +function roundTo(num, places) { + return Number(num.toFixed(places)); +} + +function roundToPlace(places) { + return function (num) { + return roundTo(num, places); + }; +} + +function getset(model, channel, modifier) { + model = Array.isArray(model) ? model : [model]; + + model.forEach(function (m) { + (limiters[m] || (limiters[m] = []))[channel] = modifier; + }); + + model = model[0]; + + return function (val) { + var result; + + if (arguments.length) { + if (modifier) { + val = modifier(val); + } + + result = this[model](); + result.color[channel] = val; + return result; + } + + result = this[model]().color[channel]; + if (modifier) { + result = modifier(result); + } + + return result; + }; +} + +function maxfn(max) { + return function (v) { + return Math.max(0, Math.min(max, v)); + }; +} + +function assertArray(val) { + return Array.isArray(val) ? val : [val]; +} + +function zeroArray(arr, length) { + for (var i = 0; i < length; i++) { + if (typeof arr[i] !== 'number') { + arr[i] = 0; + } + } + + return arr; +} + +var color$1 = Color; + +/* + ## Color 字典数据 + + 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) +*/ +var DICT$1 = { + // name value nicer + navy: { + value: '#000080', + nicer: '#001F3F', + }, + blue: { + value: '#0000ff', + nicer: '#0074D9', + }, + aqua: { + value: '#00ffff', + nicer: '#7FDBFF', + }, + teal: { + value: '#008080', + nicer: '#39CCCC', + }, + olive: { + value: '#008000', + nicer: '#3D9970', + }, + green: { + value: '#008000', + nicer: '#2ECC40', + }, + lime: { + value: '#00ff00', + nicer: '#01FF70', + }, + yellow: { + value: '#ffff00', + nicer: '#FFDC00', + }, + orange: { + value: '#ffa500', + nicer: '#FF851B', + }, + red: { + value: '#ff0000', + nicer: '#FF4136', + }, + maroon: { + value: '#800000', + nicer: '#85144B', + }, + fuchsia: { + value: '#ff00ff', + nicer: '#F012BE', + }, + purple: { + value: '#800080', + nicer: '#B10DC9', + }, + silver: { + value: '#c0c0c0', + nicer: '#DDDDDD', + }, + gray: { + value: '#808080', + nicer: '#AAAAAA', + }, + black: { + value: '#000000', + nicer: '#111111', + }, + white: { + value: '#FFFFFF', + nicer: '#FFFFFF', + }, +}; + +/* + ## Helpers +*/ + +const upper = function (str) { + return (str + '').toUpperCase(); +}; + +const lower = function (str) { + return (str + '').toLowerCase(); +}; + +// 从数组中随机选取一个元素,并返回。 +// 更改 pick 函数 , 函数不进行重载 +const pick = function (arr, ...args) { + let min; + let max; + let count; + switch (args.length) { + case 0: + return sample(arr); + case 1: + [count] = args; + return sampleSize(arr, count); + case 2: + [min, max] = args; + return sampleSize(arr, random(min, max)); + } +}; +/* + 打乱数组中元素的顺序,并返回。 + Given an array, scramble the order and return it. +*/ +const shuffle = function (arr, min, max) { + const result = shuffle$1(arr); + switch (arguments.length) { + case 0: + case 1: + return result; + case 2: + max = min; // 这里 max = undefined + /* falls through */ + case 3: + return result.slice(min, max); + } +}; +/* + * Random.order(item, item) + * Random.order([item, item ...]) + + 顺序获取数组中的元素 + + [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) + + 不支持单独调用! + */ +const Cache = {}; +const order = function (...array) { + // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) + if (array.length === 1) array = array[0]; + + // options.context.path/templatePath + const options = order.options; + const templatePath = options.context.templatePath.join('.'); + + const cache = (Cache[templatePath] = Cache[templatePath] || { + index: 0, + array: array, + }); + + return cache.array[cache.index++ % cache.array.length]; +}; + +var RandomColor = [ + { + hex: "#5c2223", + name: "暗玉紫" + }, + { + hex: "#eea2a4", + name: "牡丹粉红" + }, + { + hex: "#5a191b", + name: "栗紫" + }, + { + hex: "#f07c82", + name: "香叶红" + }, + { + hex: "#5a1216", + name: "葡萄酱紫" + }, + { + hex: "#ed5a65", + name: "艳红" + }, + { + hex: "#c04851", + name: "玉红" + }, + { + hex: "#ee3f4d", + name: "茶花红" + }, + { + hex: "#c02c38", + name: "高粱红" + }, + { + hex: "#a7535a", + name: "满江红" + }, + { + hex: "#e3b4b8", + name: "鼠鼻红" + }, + { + hex: "#f0a1a8", + name: "合欢红" + }, + { + hex: "#f1939c", + name: "春梅红" + }, + { + hex: "#a61b29", + name: "苋菜红" + }, + { + hex: "#894e54", + name: "烟红" + }, + { + hex: "#c45a65", + name: "莓红" + }, + { + hex: "#d11a2d", + name: "鹅冠红" + }, + { + hex: "#c21f30", + name: "枫叶红" + }, + { + hex: "#de1c31", + name: "唐菖蒲红" + }, + { + hex: "#7c1823", + name: "枣红" + }, + { + hex: "#541e24", + name: "猪肝紫" + }, + { + hex: "#4c1f24", + name: "葡萄紫" + }, + { + hex: "#82202b", + name: "暗紫苑红" + }, + { + hex: "#82111f", + name: "殷红" + }, + { + hex: "#ef475d", + name: "草茉莉红" + }, + { + hex: "#4d1018", + name: "酱紫" + }, + { + hex: "#ed556a", + name: "山茶红" + }, + { + hex: "#7a7374", + name: "锌灰" + }, + { + hex: "#f03752", + name: "海棠红" + }, + { + hex: "#e6d2d5", + name: "蓟粉红" + }, + { + hex: "#f0c9cf", + name: "石蕊红" + }, + { + hex: "#ee2746", + name: "淡曙红" + }, + { + hex: "#2b1216", + name: "李紫" + }, + { + hex: "#ee4863", + name: "石竹红" + }, + { + hex: "#e77c8e", + name: "淡茜红" + }, + { + hex: "#500a16", + name: "金鱼紫" + }, + { + hex: "#c27c88", + name: "山黎豆红" + }, + { + hex: "#73575c", + name: "鼠背灰" + }, + { + hex: "#ee4866", + name: "淡蕊香红" + }, + { + hex: "#621624", + name: "甘蔗紫" + }, + { + hex: "#ce5777", + name: "月季红" + }, + { + hex: "#cc163a", + name: "尖晶玉红" + }, + { + hex: "#f1c4cd", + name: "水红" + }, + { + hex: "#eeb8c3", + name: "姜红" + }, + { + hex: "#856d72", + name: "芦灰" + }, + { + hex: "#2d0c13", + name: "茄皮紫" + }, + { + hex: "#36282b", + name: "苍蝇灰" + }, + { + hex: "#bf3553", + name: "锦葵红" + }, + { + hex: "#ec9bad", + name: "粉团花红" + }, + { + hex: "#63071c", + name: "石竹紫" + }, + { + hex: "#30161c", + name: "卵石紫" + }, + { + hex: "#eea6b7", + name: "晶红" + }, + { + hex: "#e9ccd3", + name: "芝兰紫" + }, + { + hex: "#eba0b3", + name: "芍药耕红" + }, + { + hex: "#4f383e", + name: "暮云灰" + }, + { + hex: "#ed9db2", + name: "豇豆红" + }, + { + hex: "#ec8aa4", + name: "报春红" + }, + { + hex: "#ec7696", + name: "淡绛红" + }, + { + hex: "#ea7293", + name: "凤仙花红" + }, + { + hex: "#ef82a0", + name: "霞光红" + }, + { + hex: "#ec2c64", + name: "喜蛋红" + }, + { + hex: "#eb507e", + name: "夹竹桃红" + }, + { + hex: "#eb3c70", + name: "松叶牡丹红" + }, + { + hex: "#ea517f", + name: "莲瓣红" + }, + { + hex: "#de7897", + name: "白芨红" + }, + { + hex: "#b598a1", + name: "隐红灰" + }, + { + hex: "#ed2f6a", + name: "榲桲红" + }, + { + hex: "#c5708b", + name: "酢酱草红" + }, + { + hex: "#33141e", + name: "火鹅紫" + }, + { + hex: "#621d34", + name: "鹞冠紫" + }, + { + hex: "#ef3473", + name: "品红" + }, + { + hex: "#382129", + name: "磨石紫" + }, + { + hex: "#310f1b", + name: "墨紫" + }, + { + hex: "#381924", + name: "檀紫" + }, + { + hex: "#e16c96", + name: "初荷红" + }, + { + hex: "#951c48", + name: "菜头紫" + }, + { + hex: "#62102e", + name: "葡萄酒红" + }, + { + hex: "#e0c8d1", + name: "淡青紫" + }, + { + hex: "#d13c74", + name: "菠根红" + }, + { + hex: "#4b1e2f", + name: "海象紫" + }, + { + hex: "#ec4e8a", + name: "兔眼红" + }, + { + hex: "#de3f7c", + name: "嫩菱红" + }, + { + hex: "#a8456b", + name: "洋葱紫" + }, + { + hex: "#ce5e8a", + name: "吊钟花红" + }, + { + hex: "#461629", + name: "绀紫" + }, + { + hex: "#ee2c79", + name: "紫荆红" + }, + { + hex: "#ef498b", + name: "扁豆花红" + }, + { + hex: "#ede3e7", + name: "马鞭草紫" + }, + { + hex: "#ec2d7a", + name: "藏花红" + }, + { + hex: "#482936", + name: "斑鸠灰" + }, + { + hex: "#440e25", + name: "古铜紫" + }, + { + hex: "#d2568c", + name: "丹紫红" + }, + { + hex: "#e9d7df", + name: "丁香淡紫" + }, + { + hex: "#d2357d", + name: "玫瑰红" + }, + { + hex: "#36292f", + name: "古鼎灰" + }, + { + hex: "#d276a3", + name: "菱锰红" + }, + { + hex: "#c06f98", + name: "樱草紫" + }, + { + hex: "#cc5595", + name: "龙须红" + }, + { + hex: "#c35691", + name: "电气石红" + }, + { + hex: "#ba2f7b", + name: "玫瑰紫" + }, + { + hex: "#9b1e64", + name: "苋菜紫" + }, + { + hex: "#5d3f51", + name: "紫灰" + }, + { + hex: "#4e2a40", + name: "龙睛鱼紫" + }, + { + hex: "#bc84a8", + name: "青蛤壳紫" + }, + { + hex: "#c08eaf", + name: "萝兰紫" + }, + { + hex: "#411c35", + name: "荸荠紫" + }, + { + hex: "#ad6598", + name: "豆蔻紫" + }, + { + hex: "#a35c8f", + name: "扁豆紫" + }, + { + hex: "#681752", + name: "牵牛紫" + }, + { + hex: "#894276", + name: "芓紫" + }, + { + hex: "#7e2065", + name: "葛巾紫" + }, + { + hex: "#8b2671", + name: "青莲" + }, + { + hex: "#983680", + name: "芥花紫" + }, + { + hex: "#c8adc4", + name: "凤信紫" + }, + { + hex: "#1c0d1a", + name: "深牵牛紫" + }, + { + hex: "#7e1671", + name: "魏紫" + }, + { + hex: "#1e131d", + name: "乌梅紫" + }, + { + hex: "#813c85", + name: "桔梗紫" + }, + { + hex: "#d1c2d3", + name: "淡牵牛紫" + }, + { + hex: "#3e3841", + name: "剑锋紫" + }, + { + hex: "#815c94", + name: "蕈紫" + }, + { + hex: "#806d9e", + name: "槿紫" + }, + { + hex: "#e2e1e4", + name: "芡食白" + }, + { + hex: "#322f3b", + name: "龙葵紫" + }, + { + hex: "#8076a3", + name: "藤萝紫" + }, + { + hex: "#35333c", + name: "沙鱼灰" + }, + { + hex: "#22202e", + name: "暗龙胆紫" + }, + { + hex: "#131124", + name: "暗蓝紫" + }, + { + hex: "#302f4b", + name: "野葡萄紫" + }, + { + hex: "#525288", + name: "野菊紫" + }, + { + hex: "#2f2f35", + name: "水牛灰" + }, + { + hex: "#ccccd6", + name: "远山紫" + }, + { + hex: "#74759b", + name: "螺甸紫" + }, + { + hex: "#1f2040", + name: "晶石紫" + }, + { + hex: "#2e317c", + name: "满天星紫" + }, + { + hex: "#a7a8bd", + name: "淡蓝紫" + }, + { + hex: "#61649f", + name: "山梗紫" + }, + { + hex: "#2d2e36", + name: "牛角灰" + }, + { + hex: "#5e616d", + name: "鱼尾灰" + }, + { + hex: "#47484c", + name: "瓦罐灰" + }, + { + hex: "#0f1423", + name: "钢蓝" + }, + { + hex: "#131824", + name: "燕颔蓝" + }, + { + hex: "#475164", + name: "鲸鱼灰" + }, + { + hex: "#2b333e", + name: "青灰" + }, + { + hex: "#1c2938", + name: "鸽蓝" + }, + { + hex: "#101f30", + name: "暗蓝" + }, + { + hex: "#142334", + name: "钢青" + }, + { + hex: "#15559a", + name: "海涛蓝" + }, + { + hex: "#0f59a4", + name: "飞燕草蓝" + }, + { + hex: "#1661ab", + name: "靛青" + }, + { + hex: "#3170a7", + name: "安安蓝" + }, + { + hex: "#346c9c", + name: "海军蓝" + }, + { + hex: "#2775b6", + name: "景泰蓝" + }, + { + hex: "#2b73af", + name: "品蓝" + }, + { + hex: "#2474b5", + name: "尼罗蓝" + }, + { + hex: "#4e7ca1", + name: "蝶翅蓝" + }, + { + hex: "#2376b7", + name: "花青" + }, + { + hex: "#144a74", + name: "鷃蓝" + }, + { + hex: "#93b5cf", + name: "星蓝" + }, + { + hex: "#2177b8", + name: "虹蓝" + }, + { + hex: "#126bae", + name: "柏林蓝" + }, + { + hex: "#1772b4", + name: "群青" + }, + { + hex: "#baccd9", + name: "云水蓝" + }, + { + hex: "#619ac3", + name: "羽扇豆蓝" + }, + { + hex: "#495c69", + name: "战舰灰" + }, + { + hex: "#8fb2c9", + name: "晴山蓝" + }, + { + hex: "#5698c3", + name: "睛蓝" + }, + { + hex: "#11659a", + name: "搪磁蓝" + }, + { + hex: "#2983bb", + name: "潮蓝" + }, + { + hex: "#1677b3", + name: "天蓝" + }, + { + hex: "#c4cbcf", + name: "大理石灰" + }, + { + hex: "#1177b0", + name: "牵牛花蓝" + }, + { + hex: "#2486b9", + name: "宝石蓝" + }, + { + hex: "#5e7987", + name: "淡蓝灰" + }, + { + hex: "#74787a", + name: "嫩灰" + }, + { + hex: "#cdd1d3", + name: "银鱼白" + }, + { + hex: "#1781b5", + name: "釉蓝" + }, + { + hex: "#66a9c9", + name: "涧石蓝" + }, + { + hex: "#d0dfe6", + name: "远天蓝" + }, + { + hex: "#2f90b9", + name: "云山蓝" + }, + { + hex: "#8abcd1", + name: "秋波蓝" + }, + { + hex: "#c3d7df", + name: "井天蓝" + }, + { + hex: "#158bb8", + name: "鸢尾蓝" + }, + { + hex: "#d8e3e7", + name: "云峰白" + }, + { + hex: "#b2bbbe", + name: "星灰" + }, + { + hex: "#1a94bc", + name: "钴蓝" + }, + { + hex: "#5cb3cc", + name: "碧青" + }, + { + hex: "#134857", + name: "苍蓝" + }, + { + hex: "#132c33", + name: "深灰蓝" + }, + { + hex: "#21373d", + name: "灰蓝" + }, + { + hex: "#b0d5df", + name: "湖水蓝" + }, + { + hex: "#22a2c3", + name: "海青" + }, + { + hex: "#474b4c", + name: "黄昏灰" + }, + { + hex: "#63bbd0", + name: "霁青" + }, + { + hex: "#126e82", + name: "玉鈫蓝" + }, + { + hex: "#0f95b0", + name: "胆矾蓝" + }, + { + hex: "#1491a8", + name: "樫鸟蓝" + }, + { + hex: "#c7d2d4", + name: "鸥蓝" + }, + { + hex: "#1e9eb3", + name: "翠蓝" + }, + { + hex: "#3b818c", + name: "蜻蜓蓝" + }, + { + hex: "#0eb0c9", + name: "孔雀蓝" + }, + { + hex: "#29b7cb", + name: "蔚蓝" + }, + { + hex: "#51c4d3", + name: "瀑布蓝" + }, + { + hex: "#7cabb1", + name: "闪蓝" + }, + { + hex: "#10aec2", + name: "甸子蓝" + }, + { + hex: "#648e93", + name: "晚波蓝" + }, + { + hex: "#93d5dc", + name: "清水蓝" + }, + { + hex: "#617172", + name: "夏云灰" + }, + { + hex: "#c6e6e8", + name: "海天蓝" + }, + { + hex: "#869d9d", + name: "虾壳青" + }, + { + hex: "#57c3c2", + name: "石绿" + }, + { + hex: "#c4d7d6", + name: "穹灰" + }, + { + hex: "#12aa9c", + name: "美蝶绿" + }, + { + hex: "#737c7b", + name: "垩灰" + }, + { + hex: "#12a182", + name: "蓝绿" + }, + { + hex: "#1ba784", + name: "竹绿" + }, + { + hex: "#428675", + name: "亚丁绿" + }, + { + hex: "#c0c4c3", + name: "月影白" + }, + { + hex: "#248067", + name: "海王绿" + }, + { + hex: "#1a3b32", + name: "深海绿" + }, + { + hex: "#314a43", + name: "绿灰" + }, + { + hex: "#2c9678", + name: "青矾绿" + }, + { + hex: "#223e36", + name: "苍绿" + }, + { + hex: "#497568", + name: "飞泉绿" + }, + { + hex: "#141e1b", + name: "莽丛绿" + }, + { + hex: "#69a794", + name: "梧枝绿" + }, + { + hex: "#2bae85", + name: "铜绿" + }, + { + hex: "#9abeaf", + name: "草原远绿" + }, + { + hex: "#45b787", + name: "蛙绿" + }, + { + hex: "#92b3a5", + name: "浪花绿" + }, + { + hex: "#1f2623", + name: "苷蓝绿" + }, + { + hex: "#83cbac", + name: "粉绿" + }, + { + hex: "#70887d", + name: "淡绿灰" + }, + { + hex: "#55bb8a", + name: "麦苗绿" + }, + { + hex: "#20a162", + name: "翠绿" + }, + { + hex: "#40a070", + name: "葱绿" + }, + { + hex: "#1a6840", + name: "荷叶绿" + }, + { + hex: "#61ac85", + name: "淡绿" + }, + { + hex: "#68b88e", + name: "田园绿" + }, + { + hex: "#a4cab6", + name: "玉簪绿" + }, + { + hex: "#3c9566", + name: "蟾绿" + }, + { + hex: "#5dbe8a", + name: "蔻梢绿" + }, + { + hex: "#207f4c", + name: "薄荷绿" + }, + { + hex: "#eef7f2", + name: "月白" + }, + { + hex: "#579572", + name: "蛋白石绿" + }, + { + hex: "#b9dec9", + name: "竹篁绿" + }, + { + hex: "#229453", + name: "孔雀绿" + }, + { + hex: "#20894d", + name: "宫殿绿" + }, + { + hex: "#15231b", + name: "云杉绿" + }, + { + hex: "#66c18c", + name: "毛绿" + }, + { + hex: "#a4aca7", + name: "冰山蓝" + }, + { + hex: "#8a988e", + name: "明灰" + }, + { + hex: "#9eccab", + name: "明绿" + }, + { + hex: "#83a78d", + name: "松霜绿" + }, + { + hex: "#485b4d", + name: "白屈菜绿" + }, + { + hex: "#5d655f", + name: "狼烟灰" + }, + { + hex: "#6e8b74", + name: "瓦松绿" + }, + { + hex: "#2b312c", + name: "槲寄生绿" + }, + { + hex: "#c6dfc8", + name: "淡翠绿" + }, + { + hex: "#41b349", + name: "玉髓绿" + }, + { + hex: "#43b244", + name: "鲜绿" + }, + { + hex: "#253d24", + name: "油绿" + }, + { + hex: "#41ae3c", + name: "宝石绿" + }, + { + hex: "#add5a2", + name: "嘉陵水绿" + }, + { + hex: "#5e665b", + name: "田螺绿" + }, + { + hex: "#8cc269", + name: "水绿" + }, + { + hex: "#5bae23", + name: "鹦鹉绿" + }, + { + hex: "#dfecd5", + name: "艾背绿" + }, + { + hex: "#cad3c3", + name: "艾绿" + }, + { + hex: "#9fa39a", + name: "镍灰" + }, + { + hex: "#b2cf87", + name: "橄榄石绿" + }, + { + hex: "#96c24e", + name: "芽绿" + }, + { + hex: "#f0f5e5", + name: "嫩菊绿" + }, + { + hex: "#b7d07a", + name: "芦苇绿" + }, + { + hex: "#d0deaa", + name: "姚黄" + }, + { + hex: "#373834", + name: "蒽油绿" + }, + { + hex: "#bacf65", + name: "苹果绿" + }, + { + hex: "#e2e7bf", + name: "海沬绿" + }, + { + hex: "#bec936", + name: "橄榄黄绿" + }, + { + hex: "#d2d97a", + name: "槐花黄绿" + }, + { + hex: "#e2d849", + name: "蝶黄" + }, + { + hex: "#fffef8", + name: "象牙白" + }, + { + hex: "#5e5314", + name: "橄榄绿" + }, + { + hex: "#fffef9", + name: "雪白" + }, + { + hex: "#ad9e5f", + name: "淡灰绿" + }, + { + hex: "#fed71a", + name: "佛手黄" + }, + { + hex: "#f9f4dc", + name: "乳白" + }, + { + hex: "#e4bf11", + name: "香蕉黄" + }, + { + hex: "#d2b116", + name: "新禾绿" + }, + { + hex: "#fbda41", + name: "油菜花黄" + }, + { + hex: "#eed045", + name: "秋葵黄" + }, + { + hex: "#f1ca17", + name: "柚黄" + }, + { + hex: "#d2b42c", + name: "草黄" + }, + { + hex: "#f2ce2b", + name: "硫华黄" + }, + { + hex: "#e2c027", + name: "姜黄" + }, + { + hex: "#645822", + name: "潭水绿" + }, + { + hex: "#fcd217", + name: "金瓜黄" + }, + { + hex: "#f8df70", + name: "麦秆黄" + }, + { + hex: "#dfc243", + name: "蒿黄" + }, + { + hex: "#f8df72", + name: "茉莉黄" + }, + { + hex: "#ffd111", + name: "藤黄" + }, + { + hex: "#ddc871", + name: "芒果黄" + }, + { + hex: "#fffefa", + name: "海参灰" + }, + { + hex: "#867018", + name: "碧螺春绿" + }, + { + hex: "#887322", + name: "苔绿" + }, + { + hex: "#fcd337", + name: "柠檬黄" + }, + { + hex: "#8e804b", + name: "草灰绿" + }, + { + hex: "#fecc11", + name: "向日葵黄" + }, + { + hex: "#fccb16", + name: "素馨黄" + }, + { + hex: "#ffc90c", + name: "乳鸭黄" + }, + { + hex: "#b7ae8f", + name: "月灰" + }, + { + hex: "#f8d86a", + name: "葵扇黄" + }, + { + hex: "#fbcd31", + name: "大豆黄" + }, + { + hex: "#fcc307", + name: "金盏黄" + }, + { + hex: "#e9ddb6", + name: "菊蕾白" + }, + { + hex: "#fcc515", + name: "黄连黄" + }, + { + hex: "#f7e8aa", + name: "杏仁黄" + }, + { + hex: "#e8b004", + name: "谷黄" + }, + { + hex: "#f9c116", + name: "木瓜黄" + }, + { + hex: "#f9d770", + name: "淡茧黄" + }, + { + hex: "#fbc82f", + name: "雅梨黄" + }, + { + hex: "#f1f0ed", + name: "银白" + }, + { + hex: "#5b4913", + name: "棕榈绿" + }, + { + hex: "#f6c430", + name: "鹦鹉冠黄" + }, + { + hex: "#b78d12", + name: "枯绿" + }, + { + hex: "#f9bd10", + name: "浅烙黄" + }, + { + hex: "#f9d367", + name: "淡密黄" + }, + { + hex: "#d9a40e", + name: "芥黄" + }, + { + hex: "#ebb10d", + name: "栀子黄" + }, + { + hex: "#584717", + name: "暗海水绿" + }, + { + hex: "#f7de98", + name: "篾黄" + }, + { + hex: "#f9f1db", + name: "蚌肉白" + }, + { + hex: "#f4ce69", + name: "炒米黄" + }, + { + hex: "#feba07", + name: "琥珀黄" + }, + { + hex: "#8a6913", + name: "灰绿" + }, + { + hex: "#876818", + name: "粽叶绿" + }, + { + hex: "#b6a476", + name: "尘灰" + }, + { + hex: "#fcb70a", + name: "鼬黄" + }, + { + hex: "#f0d695", + name: "象牙黄" + }, + { + hex: "#87723e", + name: "鲛青" + }, + { + hex: "#f8e8c1", + name: "豆汁黄" + }, + { + hex: "#d6a01d", + name: "土黄" + }, + { + hex: "#f7da94", + name: "香水玫瑰黄" + }, + { + hex: "#eaad1a", + name: "虎皮黄" + }, + { + hex: "#fbb612", + name: "鸡蛋黄" + }, + { + hex: "#b5aa90", + name: "银鼠灰" + }, + { + hex: "#f7f4ed", + name: "鱼肚白" + }, + { + hex: "#f8bc31", + name: "初熟杏黄" + }, + { + hex: "#b78b26", + name: "山鸡黄" + }, + { + hex: "#e5d3aa", + name: "莲子白" + }, + { + hex: "#695e45", + name: "蟹壳灰" + }, + { + hex: "#e5b751", + name: "沙石黄" + }, + { + hex: "#f3bf4c", + name: "甘草黄" + }, + { + hex: "#685e48", + name: "燕羽灰" + }, + { + hex: "#fbb929", + name: "鹅掌黄" + }, + { + hex: "#f9d27d", + name: "麦芽糖黄" + }, + { + hex: "#e2c17c", + name: "浅驼色" + }, + { + hex: "#b4a992", + name: "百灵鸟灰" + }, + { + hex: "#f6dead", + name: "酪黄" + }, + { + hex: "#f2e6ce", + name: "荔肉白" + }, + { + hex: "#f8e0b0", + name: "淡肉色" + }, + { + hex: "#393733", + name: "河豚灰" + }, + { + hex: "#835e1d", + name: "蜴蜊绿" + }, + { + hex: "#f8f4ed", + name: "汉白玉" + }, + { + hex: "#fca104", + name: "橙皮黄" + }, + { + hex: "#815f25", + name: "莱阳梨黄" + }, + { + hex: "#fca106", + name: "枇杷黄" + }, + { + hex: "#ffa60f", + name: "金叶黄" + }, + { + hex: "#806332", + name: "苍黄" + }, + { + hex: "#fbf2e3", + name: "粉白" + }, + { + hex: "#fba414", + name: "淡橘橙" + }, + { + hex: "#e4dfd7", + name: "珍珠灰" + }, + { + hex: "#826b48", + name: "龟背黄" + }, + { + hex: "#dad4cb", + name: "浅灰" + }, + { + hex: "#bbb5ac", + name: "铅灰" + }, + { + hex: "#bbb5ac", + name: "中灰" + }, + { + hex: "#ff9900", + name: "雄黄" + }, + { + hex: "#fbb957", + name: "蜜黄" + }, + { + hex: "#dc9123", + name: "风帆黄" + }, + { + hex: "#c09351", + name: "桂皮淡棕" + }, + { + hex: "#f4a83a", + name: "金莺黄" + }, + { + hex: "#f7c173", + name: "肉色" + }, + { + hex: "#e7a23f", + name: "凋叶棕" + }, + { + hex: "#533c1b", + name: "古铜绿" + }, + { + hex: "#f9e8d0", + name: "落英淡粉" + }, + { + hex: "#de9e44", + name: "软木黄" + }, + { + hex: "#f9cb8b", + name: "瓜瓤粉" + }, + { + hex: "#f9a633", + name: "榴萼黄" + }, + { + hex: "#daa45a", + name: "玳瑁黄" + }, + { + hex: "#553b18", + name: "焦茶绿" + }, + { + hex: "#513c20", + name: "蟹壳绿" + }, + { + hex: "#986524", + name: "山鸡褐" + }, + { + hex: "#97846c", + name: "猴毛灰" + }, + { + hex: "#e3bd8d", + name: "鹿角棕" + }, + { + hex: "#4d4030", + name: "淡松烟" + }, + { + hex: "#fb8b05", + name: "万寿菊黄" + }, + { + hex: "#f8c387", + name: "蛋壳黄" + }, + { + hex: "#f28e16", + name: "杏黄" + }, + { + hex: "#503e2a", + name: "橄榄灰" + }, + { + hex: "#4a4035", + name: "鹤灰" + }, + { + hex: "#cfccc9", + name: "玛瑙灰" + }, + { + hex: "#c1b2a3", + name: "淡银灰" + }, + { + hex: "#867e76", + name: "瓦灰" + }, + { + hex: "#847c74", + name: "夜灰" + }, + { + hex: "#fc8c23", + name: "北瓜黄" + }, + { + hex: "#fbecde", + name: "荷花白" + }, + { + hex: "#4f4032", + name: "松鼠灰" + }, + { + hex: "#fbeee2", + name: "淡米粉" + }, + { + hex: "#81776e", + name: "深灰" + }, + { + hex: "#9a8878", + name: "海鸥灰" + }, + { + hex: "#5d3d21", + name: "茶褐" + }, + { + hex: "#66462a", + name: "驼色" + }, + { + hex: "#918072", + name: "银灰" + }, + { + hex: "#d99156", + name: "鹿皮褐" + }, + { + hex: "#c1651a", + name: "槟榔综" + }, + { + hex: "#d4c4b7", + name: "晓灰" + }, + { + hex: "#be7e4a", + name: "淡赭" + }, + { + hex: "#5c3719", + name: "古铜褐" + }, + { + hex: "#de7622", + name: "麂棕" + }, + { + hex: "#db8540", + name: "醉瓜肉" + }, + { + hex: "#80766e", + name: "雁灰" + }, + { + hex: "#f09c5a", + name: "鲑鱼红" + }, + { + hex: "#f97d1c", + name: "橘橙" + }, + { + hex: "#f26b1f", + name: "金黄" + }, + { + hex: "#f8b37f", + name: "玫瑰粉" + }, + { + hex: "#fa7e23", + name: "美人焦橙" + }, + { + hex: "#f9e9cd", + name: "米色" + }, + { + hex: "#b7a091", + name: "蛛网灰" + }, + { + hex: "#945833", + name: "淡咖啡" + }, + { + hex: "#f0945d", + name: "海螺橙" + }, + { + hex: "#964d22", + name: "岩石棕" + }, + { + hex: "#954416", + name: "芒果棕" + }, + { + hex: "#e16723", + name: "陶瓷红" + }, + { + hex: "#fc7930", + name: "菠萝红" + }, + { + hex: "#cf7543", + name: "余烬红" + }, + { + hex: "#f86b1d", + name: "金莲花橙" + }, + { + hex: "#cd6227", + name: "火砖红" + }, + { + hex: "#f6dcce", + name: "初桃粉红" + }, + { + hex: "#d85916", + name: "铁棕" + }, + { + hex: "#f7cfba", + name: "介壳淡粉红" + }, + { + hex: "#f27635", + name: "蟹壳红" + }, + { + hex: "#e46828", + name: "金驼" + }, + { + hex: "#fc6315", + name: "燕颔红" + }, + { + hex: "#b7511d", + name: "淡可可棕" + }, + { + hex: "#ea8958", + name: "晨曦红" + }, + { + hex: "#e8b49a", + name: "玉粉红" + }, + { + hex: "#fb9968", + name: "野蔷薇红" + }, + { + hex: "#edc3ae", + name: "藕荷" + }, + { + hex: "#363433", + name: "长石灰" + }, + { + hex: "#8b614d", + name: "中红灰" + }, + { + hex: "#aa6a4c", + name: "火泥棕" + }, + { + hex: "#a6522c", + name: "绀红" + }, + { + hex: "#fa5d19", + name: "莓酱红" + }, + { + hex: "#71361d", + name: "丁香棕" + }, + { + hex: "#b89485", + name: "淡玫瑰灰" + }, + { + hex: "#f68c60", + name: "瓜瓤红" + }, + { + hex: "#f6ad8f", + name: "淡藏花红" + }, + { + hex: "#732e12", + name: "筍皮棕" + }, + { + hex: "#f7cdbc", + name: "润红" + }, + { + hex: "#ef632b", + name: "龙睛鱼红" + }, + { + hex: "#8c4b31", + name: "淡土黄" + }, + { + hex: "#64483d", + name: "珠母灰" + }, + { + hex: "#f9723d", + name: "芙蓉红" + }, + { + hex: "#cf4813", + name: "落霞红" + }, + { + hex: "#ee8055", + name: "法螺红" + }, + { + hex: "#f8ebe6", + name: "草珠红" + }, + { + hex: "#753117", + name: "咖啡" + }, + { + hex: "#603d30", + name: "中灰驼" + }, + { + hex: "#883a1e", + name: "椰壳棕" + }, + { + hex: "#b14b28", + name: "蟹蝥红" + }, + { + hex: "#873d24", + name: "淡豆沙" + }, + { + hex: "#f6cec1", + name: "淡桃红" + }, + { + hex: "#5b423a", + name: "淡铁灰" + }, + { + hex: "#624941", + name: "石板灰" + }, + { + hex: "#673424", + name: "淡栗棕" + }, + { + hex: "#f43e06", + name: "银朱" + }, + { + hex: "#ef6f48", + name: "草莓红" + }, + { + hex: "#f4c7ba", + name: "洋水仙红" + }, + { + hex: "#ed5126", + name: "朱红" + }, + { + hex: "#f34718", + name: "榴花红" + }, + { + hex: "#f2481b", + name: "柿红" + }, + { + hex: "#652b1c", + name: "可可棕" + }, + { + hex: "#eea08c", + name: "淡罂粟红" + }, + { + hex: "#f04b22", + name: "大红" + }, + { + hex: "#692a1b", + name: "柞叶棕" + }, + { + hex: "#f1441d", + name: "蜻蜓红" + }, + { + hex: "#773d31", + name: "橡树棕" + }, + { + hex: "#eeaa9c", + name: "颊红" + }, + { + hex: "#f0ada0", + name: "桃红" + }, + { + hex: "#863020", + name: "火岩棕" + }, + { + hex: "#f2e7e5", + name: "淡藤萝紫" + }, + { + hex: "#862617", + name: "赭石" + }, + { + hex: "#f5391c", + name: "铁水红" + }, + { + hex: "#f03f24", + name: "胭脂红" + }, + { + hex: "#f33b1f", + name: "极光红" + }, + { + hex: "#f23e23", + name: "红汞红" + }, + { + hex: "#f13c22", + name: "萝卜红" + }, + { + hex: "#f05a46", + name: "曲红" + }, + { + hex: "#f17666", + name: "谷鞘红" + }, + { + hex: "#f15642", + name: "苹果红" + }, + { + hex: "#f25a47", + name: "桂红" + }, + { + hex: "#f2b9b2", + name: "粉红" + }, + { + hex: "#592620", + name: "暗驼棕" + }, + { + hex: "#de2a18", + name: "夕阳红" + }, + { + hex: "#ed3321", + name: "樱桃红" + }, + { + hex: "#f04a3a", + name: "珊瑚红" + }, + { + hex: "#482522", + name: "火山棕" + }, + { + hex: "#5c1e19", + name: "栗棕" + }, + { + hex: "#d42517", + name: "鹤顶红" + }, + { + hex: "#f19790", + name: "舌红" + }, + { + hex: "#ab372f", + name: "鹅血石红" + }, + { + hex: "#5a1f1b", + name: "酱棕" + }, + { + hex: "#ed3b2f", + name: "鱼鳃红" + }, + { + hex: "#bdaead", + name: "芦穗灰" + }, + { + hex: "#eb261a", + name: "丽春红" + }, + { + hex: "#ac1f18", + name: "覆盆子红" + }, + { + hex: "#483332", + name: "海报灰" + }, + { + hex: "#481e1c", + name: "豆沙" + }, + { + hex: "#f1908c", + name: "榴子红" + }, + { + hex: "#ec2b24", + name: "秋海棠红" + }, + { + hex: "#efafad", + name: "无花果红" + }, + { + hex: "#f2cac9", + name: "淡绯" + }, + { + hex: "#4b2e2b", + name: "玫瑰灰" + }, + { + hex: "#ed4845", + name: "淡菽红" + }, + { + hex: "#ed3333", + name: "枸枢红" + }, + { + hex: "#5d3131", + name: "貂紫" + } +]; + +/* + ## Color + + http://llllll.li/randomColor/ + A color generator for JavaScript. + randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. + + http://randomcolour.com/ + var bg_colour = Math.floor(Math.random() * 16777215).toString(16); + bg_colour = "#" + ("000000" + bg_colour).slice(-6); + document.bgColor = bg_colour; + + http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ + Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. + https://github.com/devongovett/color-generator + + http://www.paulirish.com/2009/random-hex-color-code-snippets/ + Random Hex Color Code Generator in JavaScript + + http://chancejs.com/#color + chance.color() + // => '#79c157' + chance.color({format: 'hex'}) + // => '#d67118' + chance.color({format: 'shorthex'}) + // => '#60f' + chance.color({format: 'rgb'}) + // => 'rgb(110,52,164)' + + http://tool.c7sky.com/webcolor + 网页设计常用色彩搭配表 + + https://github.com/One-com/one-color + An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. + API 很赞 + + https://github.com/harthur/color + JavaScript color conversion and manipulation library + + https://github.com/leaverou/css-colors + Share & convert CSS colors + http://leaverou.github.io/css-colors/#slategray + Type a CSS color keyword, #hex, hsl(), rgba(), whatever: + + 色调 hue + http://baike.baidu.com/view/23368.htm + 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 + 饱和度 saturation + http://baike.baidu.com/view/189644.htm + 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 + 亮度 brightness + http://baike.baidu.com/view/34773.htm + 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 + 照度 luminosity + 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 + + http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript + var letters = '0123456789ABCDEF'.split('') + var color = '#' + for (var i = 0; i < 6; i++) { + color += letters[Math.floor(Math.random() * 16)] + } + return color + + // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 + // _brainlessColor() + var color = Math.floor( + Math.random() * + (16 * 16 * 16 * 16 * 16 * 16 - 1) + ).toString(16) + color = "#" + ("000000" + color).slice(-6) + return color.toUpperCase() +*/ + +let _hue; +function _goldenRatioColor(saturation, value) { + const _goldenRatio = 0.618033988749895; + _hue = _hue || Math.random(); + _hue += _goldenRatio; + _hue %= 1; + + if (typeof saturation !== 'number') saturation = 0.5; + if (typeof value !== 'number') value = 0.95; + + return color$1.hsv(_hue * 360, saturation * 100, value * 100); +} + +// 中国色 数据来自于 http://zhongguose.com + +// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 +function color(name) { + if (name || DICT$1[name]) return DICT$1[name].nicer; + return pick(RandomColor).hex; +} + +// #DAC0DE +function hex() { + const hsv = _goldenRatioColor(); + return hsv.hex(); +} + +// rgb(128,255,255) +function rgb() { + const hsv = _goldenRatioColor(); + return hsv.hsv().string(); +} +// rgba(128,255,255,0.3) +function rgba() { + const hsv = _goldenRatioColor(); + return hsv.alpha(Math.random().toFixed(2)).hsv().string(); +} + +// hsl(300,80%,90%) +function hsl() { + const hsv = _goldenRatioColor(); + return hsv.hsl().string(); +} + +var firstName$1 = { + male: [ + "James", + "John", + "Robert", + "Michael", + "William", + "David", + "Richard", + "Charles", + "Joseph", + "Thomas", + "Christopher", + "Daniel", + "Paul", + "Mark", + "Donald", + "George", + "Kenneth", + "Steven", + "Edward", + "Brian", + "Ronald", + "Anthony", + "Kevin", + "Jason", + "Matthew", + "Gary", + "Timothy", + "Jose", + "Larry", + "Jeffrey", + "Frank", + "Scott", + "Eric" + ], + female: [ + "Mary", + "Patricia", + "Linda", + "Barbara", + "Elizabeth", + "Jennifer", + "Maria", + "Susan", + "Margaret", + "Dorothy", + "Lisa", + "Nancy", + "Karen", + "Betty", + "Helen", + "Sandra", + "Donna", + "Carol", + "Ruth", + "Sharon", + "Michelle", + "Laura", + "Sarah", + "Kimberly", + "Deborah", + "Jessica", + "Shirley", + "Cynthia", + "Angela", + "Melissa", + "Brenda", + "Amy", + "Anna" + ] +}; +var lastName$1 = [ + "Smith", + "Johnson", + "Williams", + "Brown", + "Jones", + "Miller", + "Davis", + "Garcia", + "Rodriguez", + "Wilson", + "Martinez", + "Anderson", + "Taylor", + "Thomas", + "Hernandez", + "Moore", + "Martin", + "Jackson", + "Thompson", + "White", + "Lopez", + "Lee", + "Gonzalez", + "Harris", + "Clark", + "Lewis", + "Robinson", + "Walker", + "Perez", + "Hall", + "Young", + "Allen" +]; +var cfirstName$1 = [ + "王", + "李", + "张", + "刘", + "陈", + "杨", + "赵", + "黄", + "周", + "吴", + "徐", + "孙", + "胡", + "朱", + "高", + "林", + "何", + "郭", + "马", + "罗", + "梁", + "宋", + "郑", + "谢", + "韩", + "唐", + "冯", + "于", + "董", + "萧", + "程", + "曹", + "袁", + "邓", + "许", + "傅", + "沈", + "曾", + "彭", + "吕", + "苏", + "卢", + "蒋", + "蔡", + "贾", + "丁", + "魏", + "薛", + "叶", + "阎", + "余", + "潘", + "杜", + "戴", + "夏", + "锺", + "汪", + "田", + "任", + "姜", + "范", + "方", + "石", + "姚", + "谭", + "廖", + "邹", + "熊", + "金", + "陆", + "郝", + "孔", + "白", + "崔", + "康", + "毛", + "邱", + "秦", + "江", + "史", + "顾", + "侯", + "邵", + "孟", + "龙", + "万", + "段", + "雷", + "钱", + "汤", + "尹", + "黎", + "易", + "常", + "武", + "乔", + "贺", + "赖", + "龚", + "文" +]; +var clastName$1 = [ + "伟", + "芳", + "娜", + "秀英", + "敏", + "静", + "丽", + "强", + "磊", + "军", + "洋", + "勇", + "艳", + "杰", + "娟", + "涛", + "明", + "超", + "秀兰", + "霞", + "平", + "刚", + "桂英" +]; +var Name = { + firstName: firstName$1, + lastName: lastName$1, + cfirstName: cfirstName$1, + clastName: clastName$1 +}; + +/* + ## Name + + [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) +*/ +const { firstName, lastName, cfirstName, clastName } = Name; + +// 随机生成一个常见的英文名。 +function first() { + const names = firstName.male.concat(); + return pick(names); +} + +// 随机生成一个常见的英文姓。 +function last() { + return pick(lastName); +} + +// 随机生成一个常见的英文姓名。 +function name(middle) { + middle = middle ? ` ${first()} ` : ' '; + return `${first()}${middle}${last()}`; +} + +/* + 随机生成一个常见的中文姓。 + [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) + [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) +*/ +function cfirst() { + return pick(cfirstName); +} /* + 随机生成一个常见的中文名。 + [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) +*/ +function clast() { + return pick(clastName); +} +// 随机生成一个常见的中文姓名。 +function cname() { + return cfirst() + clast(); +} + +const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate + +let poolPtr = rnds8Pool.length; +function rng() { + if (poolPtr > rnds8Pool.length - 16) { + crypto__default['default'].randomFillSync(rnds8Pool); + poolPtr = 0; + } + + return rnds8Pool.slice(poolPtr, poolPtr += 16); +} + +var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; + +function validate(uuid) { + return typeof uuid === 'string' && REGEX.test(uuid); +} + +/** + * Convert array of 16 byte values to UUID string format of the form: + * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX + */ + +const byteToHex = []; + +for (let i = 0; i < 256; ++i) { + byteToHex.push((i + 0x100).toString(16).substr(1)); +} + +function stringify(arr, offset = 0) { + // Note: Be careful editing this code! It's been tuned for performance + // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 + const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one + // of the following: + // - One or more input array values don't map to a hex octet (leading to + // "undefined" in the uuid) + // - Invalid input values for the RFC `version` or `variant` fields + + if (!validate(uuid)) { + throw TypeError('Stringified UUID is invalid'); + } + + return uuid; +} + +function v4(options, buf, offset) { + options = options || {}; + const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` + + rnds[6] = rnds[6] & 0x0f | 0x40; + rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided + + if (buf) { + offset = offset || 0; + + for (let i = 0; i < 16; ++i) { + buf[offset + i] = rnds[i]; + } + + return buf; + } + + return stringify(rnds); +} + +var DICT = { + "110000": "北京", + "110100": "北京市", + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110228": "密云县", + "110229": "延庆县", + "110230": "其它区", + "120000": "天津", + "120100": "天津市", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120221": "宁河县", + "120223": "静海县", + "120225": "蓟县", + "120226": "其它区", + "130000": "河北省", + "130100": "石家庄市", + "130102": "长安区", + "130103": "桥东区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130121": "井陉县", + "130123": "正定县", + "130124": "栾城县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130181": "辛集市", + "130182": "藁城市", + "130183": "晋州市", + "130184": "新乐市", + "130185": "鹿泉市", + "130186": "其它区", + "130200": "唐山市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130223": "滦县", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130230": "曹妃甸区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "其它区", + "130300": "秦皇岛市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130323": "抚宁县", + "130324": "卢龙县", + "130398": "其它区", + "130400": "邯郸市", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130421": "邯郸县", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130428": "肥乡县", + "130429": "永年县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130481": "武安市", + "130482": "其它区", + "130500": "邢台市", + "130502": "桥东区", + "130503": "桥西区", + "130521": "邢台县", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130526": "任县", + "130527": "南和县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130581": "南宫市", + "130582": "沙河市", + "130583": "其它区", + "130600": "保定市", + "130602": "新市区", + "130603": "北市区", + "130604": "南市区", + "130621": "满城县", + "130622": "清苑县", + "130623": "涞水县", + "130624": "阜平县", + "130625": "徐水县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130699": "其它区", + "130700": "张家口市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130721": "宣化县", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130729": "万全县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130733": "崇礼县", + "130734": "其它区", + "130800": "承德市", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130823": "平泉县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130829": "其它区", + "130900": "沧州市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "130985": "其它区", + "131000": "廊坊市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131081": "霸州市", + "131082": "三河市", + "131083": "其它区", + "131100": "衡水市", + "131102": "桃城区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131181": "冀州市", + "131182": "深州市", + "131183": "其它区", + "140000": "山西省", + "140100": "太原市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140182": "其它区", + "140200": "大同市", + "140202": "城区", + "140203": "矿区", + "140211": "南郊区", + "140212": "新荣区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140227": "大同县", + "140228": "其它区", + "140300": "阳泉市", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140323": "其它区", + "140400": "长治市", + "140421": "长治县", + "140423": "襄垣县", + "140424": "屯留县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140481": "潞城市", + "140482": "城区", + "140483": "郊区", + "140485": "其它区", + "140500": "晋城市", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140582": "其它区", + "140600": "朔州市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140624": "怀仁县", + "140625": "其它区", + "140700": "晋中市", + "140702": "榆次区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140726": "太谷县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140782": "其它区", + "140800": "运城市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140883": "其它区", + "140900": "忻州市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140981": "原平市", + "140982": "其它区", + "141000": "临汾市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141083": "其它区", + "141100": "吕梁市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "141183": "其它区", + "150000": "内蒙古自治区", + "150100": "呼和浩特市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150126": "其它区", + "150200": "包头市", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150224": "其它区", + "150300": "乌海市", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150305": "其它区", + "150400": "赤峰市", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150431": "其它区", + "150500": "通辽市", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150581": "霍林郭勒市", + "150582": "其它区", + "150600": "鄂尔多斯市", + "150602": "东胜区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150628": "其它区", + "150700": "呼伦贝尔市", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150786": "其它区", + "150800": "巴彦淖尔市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150827": "其它区", + "150900": "乌兰察布市", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "150982": "其它区", + "152200": "兴安盟", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152225": "其它区", + "152500": "锡林郭勒盟", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152532": "其它区", + "152900": "阿拉善盟", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152924": "其它区", + "210000": "辽宁省", + "210100": "沈阳市", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "东陵区", + "210113": "新城子区", + "210114": "于洪区", + "210122": "辽中县", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210184": "沈北新区", + "210185": "其它区", + "210200": "大连市", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210224": "长海县", + "210281": "瓦房店市", + "210282": "普兰店市", + "210283": "庄河市", + "210298": "其它区", + "210300": "鞍山市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210382": "其它区", + "210400": "抚顺市", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210424": "其它区", + "210500": "本溪市", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210523": "其它区", + "210600": "丹东市", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210683": "其它区", + "210700": "锦州市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210783": "其它区", + "210800": "营口市", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210883": "其它区", + "210900": "阜新市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "210923": "其它区", + "211000": "辽阳市", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211082": "其它区", + "211100": "盘锦市", + "211102": "双台子区", + "211103": "兴隆台区", + "211121": "大洼县", + "211122": "盘山县", + "211123": "其它区", + "211200": "铁岭市", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211283": "其它区", + "211300": "朝阳市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211383": "其它区", + "211400": "葫芦岛市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "211482": "其它区", + "220000": "吉林省", + "220100": "长春市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220122": "农安县", + "220181": "九台市", + "220182": "榆树市", + "220183": "德惠市", + "220188": "其它区", + "220200": "吉林市", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220285": "其它区", + "220300": "四平市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220381": "公主岭市", + "220382": "双辽市", + "220383": "其它区", + "220400": "辽源市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220423": "其它区", + "220500": "通化市", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220583": "其它区", + "220600": "白山市", + "220602": "浑江区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220625": "江源区", + "220681": "临江市", + "220682": "其它区", + "220700": "松原市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220724": "扶余市", + "220725": "其它区", + "220800": "白城市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220881": "洮南市", + "220882": "大安市", + "220883": "其它区", + "222400": "延边朝鲜族自治州", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "222427": "其它区", + "230000": "黑龙江省", + "230100": "哈尔滨市", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230106": "香坊区", + "230108": "平房区", + "230109": "松北区", + "230111": "呼兰区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230181": "阿城区", + "230182": "双城市", + "230183": "尚志市", + "230184": "五常市", + "230186": "其它区", + "230200": "齐齐哈尔市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230282": "其它区", + "230300": "鸡西市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230383": "其它区", + "230400": "鹤岗市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230423": "其它区", + "230500": "双鸭山市", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230525": "其它区", + "230600": "大庆市", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230625": "其它区", + "230700": "伊春市", + "230702": "伊春区", + "230703": "南岔区", + "230704": "友好区", + "230705": "西林区", + "230706": "翠峦区", + "230707": "新青区", + "230708": "美溪区", + "230709": "金山屯区", + "230710": "五营区", + "230711": "乌马河区", + "230712": "汤旺河区", + "230713": "带岭区", + "230714": "乌伊岭区", + "230715": "红星区", + "230716": "上甘岭区", + "230722": "嘉荫县", + "230781": "铁力市", + "230782": "其它区", + "230800": "佳木斯市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230833": "抚远县", + "230881": "同江市", + "230882": "富锦市", + "230883": "其它区", + "230900": "七台河市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "230922": "其它区", + "231000": "牡丹江市", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231024": "东宁县", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "其它区", + "231100": "黑河市", + "231102": "爱辉区", + "231121": "嫩江县", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "其它区", + "231200": "绥化市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "231284": "其它区", + "232700": "大兴安岭地区", + "232702": "松岭区", + "232703": "新林区", + "232704": "呼中区", + "232721": "呼玛县", + "232722": "塔河县", + "232723": "漠河县", + "232724": "加格达奇区", + "232725": "其它区", + "310000": "上海", + "310100": "上海市", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310108": "闸北区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310230": "崇明县", + "310231": "其它区", + "320000": "江苏省", + "320100": "南京市", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320124": "溧水区", + "320125": "高淳区", + "320126": "其它区", + "320200": "无锡市", + "320202": "崇安区", + "320203": "南长区", + "320204": "北塘区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320281": "江阴市", + "320282": "宜兴市", + "320297": "其它区", + "320300": "徐州市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320321": "丰县", + "320322": "沛县", + "320323": "铜山区", + "320324": "睢宁县", + "320381": "新沂市", + "320382": "邳州市", + "320383": "其它区", + "320400": "常州市", + "320402": "天宁区", + "320404": "钟楼区", + "320405": "戚墅堰区", + "320411": "新北区", + "320412": "武进区", + "320481": "溧阳市", + "320482": "金坛市", + "320483": "其它区", + "320500": "苏州市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320584": "吴江区", + "320585": "太仓市", + "320596": "其它区", + "320600": "南通市", + "320602": "崇川区", + "320611": "港闸区", + "320612": "通州区", + "320621": "海安县", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320684": "海门市", + "320694": "其它区", + "320700": "连云港市", + "320703": "连云区", + "320705": "新浦区", + "320706": "海州区", + "320721": "赣榆县", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320725": "其它区", + "320800": "淮安市", + "320802": "清河区", + "320803": "淮安区", + "320804": "淮阴区", + "320811": "清浦区", + "320826": "涟水县", + "320829": "洪泽县", + "320830": "盱眙县", + "320831": "金湖县", + "320832": "其它区", + "320900": "盐城市", + "320902": "亭湖区", + "320903": "盐都区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320981": "东台市", + "320982": "大丰市", + "320983": "其它区", + "321000": "扬州市", + "321002": "广陵区", + "321003": "邗江区", + "321023": "宝应县", + "321081": "仪征市", + "321084": "高邮市", + "321088": "江都区", + "321093": "其它区", + "321100": "镇江市", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321184": "其它区", + "321200": "泰州市", + "321202": "海陵区", + "321203": "高港区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321284": "姜堰区", + "321285": "其它区", + "321300": "宿迁市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321325": "其它区", + "330000": "浙江省", + "330100": "杭州市", + "330102": "上城区", + "330103": "下城区", + "330104": "江干区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330183": "富阳市", + "330185": "临安市", + "330186": "其它区", + "330200": "宁波市", + "330203": "海曙区", + "330204": "江东区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330283": "奉化市", + "330284": "其它区", + "330300": "温州市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330322": "洞头县", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "其它区", + "330400": "嘉兴市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330484": "其它区", + "330500": "湖州市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330524": "其它区", + "330600": "绍兴市", + "330602": "越城区", + "330621": "绍兴县", + "330624": "新昌县", + "330681": "诸暨市", + "330682": "上虞市", + "330683": "嵊州市", + "330684": "其它区", + "330700": "金华市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330785": "其它区", + "330800": "衢州市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330882": "其它区", + "330900": "舟山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "330923": "其它区", + "331000": "台州市", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331021": "玉环县", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "其它区", + "331100": "丽水市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "331182": "其它区", + "340000": "安徽省", + "340100": "合肥市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340192": "其它区", + "340200": "芜湖市", + "340202": "镜湖区", + "340203": "弋江区", + "340207": "鸠江区", + "340208": "三山区", + "340221": "芜湖县", + "340222": "繁昌县", + "340223": "南陵县", + "340224": "其它区", + "340300": "蚌埠市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340324": "其它区", + "340400": "淮南市", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "其它区", + "340500": "马鞍山市", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "其它区", + "340600": "淮北市", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340622": "其它区", + "340700": "铜陵市", + "340702": "铜官山区", + "340703": "狮子山区", + "340711": "郊区", + "340721": "铜陵县", + "340722": "其它区", + "340800": "安庆市", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340823": "枞阳县", + "340824": "潜山县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "其它区", + "341000": "黄山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341025": "其它区", + "341100": "滁州市", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341183": "其它区", + "341200": "阜阳市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341282": "界首市", + "341283": "其它区", + "341300": "宿州市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341325": "其它区", + "341400": "巢湖市", + "341421": "庐江县", + "341422": "无为县", + "341423": "含山县", + "341424": "和县", + "341500": "六安市", + "341502": "金安区", + "341503": "裕安区", + "341521": "寿县", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341526": "其它区", + "341600": "亳州市", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341624": "其它区", + "341700": "池州市", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341724": "其它区", + "341800": "宣城市", + "341802": "宣州区", + "341821": "郎溪县", + "341822": "广德县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341881": "宁国市", + "341882": "其它区", + "350000": "福建省", + "350100": "福州市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350182": "长乐市", + "350183": "其它区", + "350200": "厦门市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350214": "其它区", + "350300": "莆田市", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350323": "其它区", + "350400": "三明市", + "350402": "梅列区", + "350403": "三元区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350427": "沙县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350482": "其它区", + "350500": "泉州市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350584": "其它区", + "350600": "漳州市", + "350602": "芗城区", + "350603": "龙文区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350625": "长泰县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350681": "龙海市", + "350682": "其它区", + "350700": "南平市", + "350702": "延平区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350784": "建阳市", + "350785": "其它区", + "350800": "龙岩市", + "350802": "新罗区", + "350821": "长汀县", + "350822": "永定县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350882": "其它区", + "350900": "宁德市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "350983": "其它区", + "360000": "江西省", + "360100": "南昌市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360105": "湾里区", + "360111": "青山湖区", + "360121": "南昌县", + "360122": "新建县", + "360123": "安义县", + "360124": "进贤县", + "360128": "其它区", + "360200": "景德镇市", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360282": "其它区", + "360300": "萍乡市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360324": "其它区", + "360400": "九江市", + "360402": "庐山区", + "360403": "浔阳区", + "360421": "九江县", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360427": "星子县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "其它区", + "360483": "共青城市", + "360500": "新余市", + "360502": "渝水区", + "360521": "分宜县", + "360522": "其它区", + "360600": "鹰潭市", + "360602": "月湖区", + "360622": "余江县", + "360681": "贵溪市", + "360682": "其它区", + "360700": "赣州市", + "360702": "章贡区", + "360721": "赣县", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360727": "龙南县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360782": "南康市", + "360783": "其它区", + "360800": "吉安市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360882": "其它区", + "360900": "宜春市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "360984": "其它区", + "361000": "抚州市", + "361002": "临川区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361029": "东乡县", + "361030": "广昌县", + "361031": "其它区", + "361100": "上饶市", + "361102": "信州区", + "361121": "上饶县", + "361122": "广丰县", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "361182": "其它区", + "370000": "山东省", + "370100": "济南市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370124": "平阴县", + "370125": "济阳县", + "370126": "商河县", + "370181": "章丘市", + "370182": "其它区", + "370200": "青岛市", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370281": "胶州市", + "370282": "即墨市", + "370283": "平度市", + "370285": "莱西市", + "370286": "其它区", + "370300": "淄博市", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370324": "其它区", + "370400": "枣庄市", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370482": "其它区", + "370500": "东营市", + "370502": "东营区", + "370503": "河口区", + "370521": "垦利县", + "370522": "利津县", + "370523": "广饶县", + "370591": "其它区", + "370600": "烟台市", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370634": "长岛县", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370684": "蓬莱市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370688": "其它区", + "370700": "潍坊市", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370787": "其它区", + "370800": "济宁市", + "370802": "市中区", + "370811": "任城区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370881": "曲阜市", + "370882": "兖州市", + "370883": "邹城市", + "370884": "其它区", + "370900": "泰安市", + "370902": "泰山区", + "370903": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "370984": "其它区", + "371000": "威海市", + "371002": "环翠区", + "371081": "文登市", + "371082": "荣成市", + "371083": "乳山市", + "371084": "其它区", + "371100": "日照市", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371123": "其它区", + "371200": "莱芜市", + "371202": "莱城区", + "371203": "钢城区", + "371204": "其它区", + "371300": "临沂市", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "苍山县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371330": "其它区", + "371400": "德州市", + "371402": "德城区", + "371421": "陵县", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371481": "乐陵市", + "371482": "禹城市", + "371483": "其它区", + "371500": "聊城市", + "371502": "东昌府区", + "371521": "阳谷县", + "371522": "莘县", + "371523": "茌平县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371582": "其它区", + "371600": "滨州市", + "371602": "滨城区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371624": "沾化县", + "371625": "博兴县", + "371626": "邹平县", + "371627": "其它区", + "371700": "菏泽市", + "371702": "牡丹区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371727": "定陶县", + "371728": "东明县", + "371729": "其它区", + "410000": "河南省", + "410100": "郑州市", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410188": "其它区", + "410200": "开封市", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410211": "金明区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410224": "开封县", + "410225": "兰考县", + "410226": "其它区", + "410300": "洛阳市", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410306": "吉利区", + "410307": "洛龙区", + "410322": "孟津县", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410381": "偃师市", + "410400": "平顶山市", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410481": "舞钢市", + "410482": "汝州市", + "410483": "其它区", + "410500": "安阳市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410582": "其它区", + "410600": "鹤壁市", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410623": "其它区", + "410700": "新乡市", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410728": "长垣县", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "其它区", + "410800": "焦作市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410881": "济源市", + "410882": "沁阳市", + "410883": "孟州市", + "410884": "其它区", + "410900": "濮阳市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410929": "其它区", + "411000": "许昌市", + "411002": "魏都区", + "411023": "许昌县", + "411024": "鄢陵县", + "411025": "襄城县", + "411081": "禹州市", + "411082": "长葛市", + "411083": "其它区", + "411100": "漯河市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411123": "其它区", + "411200": "三门峡市", + "411202": "湖滨区", + "411221": "渑池县", + "411222": "陕县", + "411224": "卢氏县", + "411281": "义马市", + "411282": "灵宝市", + "411283": "其它区", + "411300": "南阳市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411381": "邓州市", + "411382": "其它区", + "411400": "商丘市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411482": "其它区", + "411500": "信阳市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411529": "其它区", + "411600": "周口市", + "411602": "川汇区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411626": "淮阳县", + "411627": "太康县", + "411628": "鹿邑县", + "411681": "项城市", + "411682": "其它区", + "411700": "驻马店市", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "411730": "其它区", + "420000": "湖北省", + "420100": "武汉市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420118": "其它区", + "420200": "黄石市", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420282": "其它区", + "420300": "十堰市", + "420302": "茅箭区", + "420303": "张湾区", + "420321": "郧县", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420383": "其它区", + "420500": "宜昌市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420584": "其它区", + "420600": "襄阳市", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420685": "其它区", + "420700": "鄂州市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420705": "其它区", + "420800": "荆门市", + "420802": "东宝区", + "420804": "掇刀区", + "420821": "京山县", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "其它区", + "420900": "孝感市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "420985": "其它区", + "421000": "荆州市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421023": "监利县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "其它区", + "421100": "黄冈市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421181": "麻城市", + "421182": "武穴市", + "421183": "其它区", + "421200": "咸宁市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421283": "其它区", + "421300": "随州市", + "421302": "曾都区", + "421321": "随县", + "421381": "广水市", + "421382": "其它区", + "422800": "恩施土家族苗族自治州", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "422829": "其它区", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430000": "湖南省", + "430100": "长沙市", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430121": "长沙县", + "430122": "望城区", + "430124": "宁乡县", + "430181": "浏阳市", + "430182": "其它区", + "430200": "株洲市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430221": "株洲县", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430281": "醴陵市", + "430282": "其它区", + "430300": "湘潭市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430381": "湘乡市", + "430382": "韶山市", + "430383": "其它区", + "430400": "衡阳市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430483": "其它区", + "430500": "邵阳市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430521": "邵东县", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "其它区", + "430600": "岳阳市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430683": "其它区", + "430700": "常德市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430782": "其它区", + "430800": "张家界市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430823": "其它区", + "430900": "益阳市", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430981": "沅江市", + "430982": "其它区", + "431000": "郴州市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431082": "其它区", + "431100": "永州市", + "431102": "零陵区", + "431103": "冷水滩区", + "431121": "祁阳县", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431130": "其它区", + "431200": "怀化市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431281": "洪江市", + "431282": "其它区", + "431300": "娄底市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "431383": "其它区", + "433100": "湘西土家族苗族自治州", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "433131": "其它区", + "440000": "广东省", + "440100": "广州市", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440116": "萝岗区", + "440183": "增城市", + "440184": "从化市", + "440189": "其它区", + "440200": "韶关市", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440283": "其它区", + "440300": "深圳市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "其它区", + "440320": "光明新区", + "440321": "坪山新区", + "440322": "大鹏新区", + "440323": "龙华新区", + "440400": "珠海市", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440488": "其它区", + "440500": "汕头市", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440524": "其它区", + "440600": "佛山市", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440609": "其它区", + "440700": "江门市", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440786": "其它区", + "440800": "湛江市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440884": "其它区", + "440900": "茂名市", + "440902": "茂南区", + "440903": "茂港区", + "440923": "电白县", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "440984": "其它区", + "441200": "肇庆市", + "441202": "端州区", + "441203": "鼎湖区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441283": "高要市", + "441284": "四会市", + "441285": "其它区", + "441300": "惠州市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441325": "其它区", + "441400": "梅州市", + "441402": "梅江区", + "441421": "梅县", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441482": "其它区", + "441500": "汕尾市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441582": "其它区", + "441600": "河源市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441626": "其它区", + "441700": "阳江市", + "441702": "江城区", + "441721": "阳西县", + "441723": "阳东县", + "441781": "阳春市", + "441782": "其它区", + "441800": "清远市", + "441802": "清城区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441827": "清新区", + "441881": "英德市", + "441882": "连州市", + "441883": "其它区", + "441900": "东莞市", + "442000": "中山市", + "442101": "东沙群岛", + "445100": "潮州市", + "445102": "湘桥区", + "445121": "潮安区", + "445122": "饶平县", + "445186": "其它区", + "445200": "揭阳市", + "445202": "榕城区", + "445221": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445285": "其它区", + "445300": "云浮市", + "445302": "云城区", + "445321": "新兴县", + "445322": "郁南县", + "445323": "云安县", + "445381": "罗定市", + "445382": "其它区", + "450000": "广西壮族自治区", + "450100": "南宁市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450122": "武鸣县", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450127": "横县", + "450128": "其它区", + "450200": "柳州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450221": "柳江县", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450227": "其它区", + "450300": "桂林市", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450321": "阳朔县", + "450322": "临桂区", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450331": "荔浦县", + "450332": "恭城瑶族自治县", + "450333": "其它区", + "450400": "梧州市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450482": "其它区", + "450500": "北海市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450522": "其它区", + "450600": "防城港市", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450682": "其它区", + "450700": "钦州市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450723": "其它区", + "450800": "贵港市", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450882": "其它区", + "450900": "玉林市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "450982": "其它区", + "451000": "百色市", + "451002": "右江区", + "451021": "田阳县", + "451022": "田东县", + "451023": "平果县", + "451024": "德保县", + "451025": "靖西县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451032": "其它区", + "451100": "贺州市", + "451102": "八步区", + "451119": "平桂管理区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451124": "其它区", + "451200": "河池市", + "451202": "金城江区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451281": "宜州市", + "451282": "其它区", + "451300": "来宾市", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451382": "其它区", + "451400": "崇左市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "451482": "其它区", + "460000": "海南省", + "460100": "海口市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460109": "其它区", + "460200": "三亚市", + "460300": "三沙市", + "460321": "西沙群岛", + "460322": "南沙群岛", + "460323": "中沙群岛的岛礁及其海域", + "469001": "五指山市", + "469002": "琼海市", + "469003": "儋州市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469025": "定安县", + "469026": "屯昌县", + "469027": "澄迈县", + "469028": "临高县", + "469030": "白沙黎族自治县", + "469031": "昌江黎族自治县", + "469033": "乐东黎族自治县", + "469034": "陵水黎族自治县", + "469035": "保亭黎族苗族自治县", + "469036": "琼中黎族苗族自治县", + "500000": "重庆", + "500100": "重庆市", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "万盛区", + "500111": "双桥区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500222": "綦江区", + "500223": "潼南县", + "500224": "铜梁县", + "500225": "大足区", + "500226": "荣昌县", + "500227": "璧山县", + "500228": "梁平县", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500232": "武隆县", + "500233": "忠县", + "500234": "开县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "500381": "江津区", + "500382": "合川区", + "500383": "永川区", + "500384": "南川区", + "500385": "其它区", + "510000": "四川省", + "510100": "成都市", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510121": "金堂县", + "510122": "双流县", + "510124": "郫县", + "510129": "大邑县", + "510131": "蒲江县", + "510132": "新津县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "其它区", + "510300": "自贡市", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510323": "其它区", + "510400": "攀枝花市", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510423": "其它区", + "510500": "泸州市", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510526": "其它区", + "510600": "德阳市", + "510603": "旌阳区", + "510623": "中江县", + "510626": "罗江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510684": "其它区", + "510700": "绵阳市", + "510703": "涪城区", + "510704": "游仙区", + "510722": "三台县", + "510723": "盐亭县", + "510724": "安县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510782": "其它区", + "510800": "广元市", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510825": "其它区", + "510900": "遂宁市", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510922": "射洪县", + "510923": "大英县", + "510924": "其它区", + "511000": "内江市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511028": "隆昌县", + "511029": "其它区", + "511100": "乐山市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511182": "其它区", + "511300": "南充市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511382": "其它区", + "511400": "眉山市", + "511402": "东坡区", + "511421": "仁寿县", + "511422": "彭山县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511426": "其它区", + "511500": "宜宾市", + "511502": "翠屏区", + "511521": "宜宾县", + "511522": "南溪区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511530": "其它区", + "511600": "广安市", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511683": "其它区", + "511700": "达州市", + "511702": "通川区", + "511721": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511782": "其它区", + "511800": "雅安市", + "511802": "雨城区", + "511821": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511828": "其它区", + "511900": "巴中市", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511924": "其它区", + "512000": "资阳市", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "512081": "简阳市", + "512082": "其它区", + "513200": "阿坝藏族羌族自治州", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513229": "马尔康县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513234": "其它区", + "513300": "甘孜藏族自治州", + "513321": "康定县", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513339": "其它区", + "513400": "凉山彝族自治州", + "513401": "西昌市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513425": "会理县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "513438": "其它区", + "520000": "贵州省", + "520100": "贵阳市", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520151": "观山湖区", + "520181": "清镇市", + "520182": "其它区", + "520200": "六盘水市", + "520201": "钟山区", + "520203": "六枝特区", + "520221": "水城县", + "520222": "盘县", + "520223": "其它区", + "520300": "遵义市", + "520302": "红花岗区", + "520303": "汇川区", + "520321": "遵义县", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520383": "其它区", + "520400": "安顺市", + "520402": "西秀区", + "520421": "平坝县", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520426": "其它区", + "522200": "铜仁市", + "522201": "碧江区", + "522222": "江口县", + "522223": "玉屏侗族自治县", + "522224": "石阡县", + "522225": "思南县", + "522226": "印江土家族苗族自治县", + "522227": "德江县", + "522228": "沿河土家族自治县", + "522229": "松桃苗族自治县", + "522230": "万山区", + "522231": "其它区", + "522300": "黔西南布依族苗族自治州", + "522301": "兴义市", + "522322": "兴仁县", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522329": "其它区", + "522400": "毕节市", + "522401": "七星关区", + "522422": "大方县", + "522423": "黔西县", + "522424": "金沙县", + "522425": "织金县", + "522426": "纳雍县", + "522427": "威宁彝族回族苗族自治县", + "522428": "赫章县", + "522429": "其它区", + "522600": "黔东南苗族侗族自治州", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522637": "其它区", + "522700": "黔南布依族苗族自治州", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "522733": "其它区", + "530000": "云南省", + "530100": "昆明市", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530121": "呈贡区", + "530122": "晋宁县", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530182": "其它区", + "530300": "曲靖市", + "530302": "麒麟区", + "530321": "马龙县", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530328": "沾益县", + "530381": "宣威市", + "530382": "其它区", + "530400": "玉溪市", + "530402": "红塔区", + "530421": "江川县", + "530422": "澄江县", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530429": "其它区", + "530500": "保山市", + "530502": "隆阳区", + "530521": "施甸县", + "530522": "腾冲县", + "530523": "龙陵县", + "530524": "昌宁县", + "530525": "其它区", + "530600": "昭通市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530630": "水富县", + "530631": "其它区", + "530700": "丽江市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530725": "其它区", + "530800": "普洱市", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530830": "其它区", + "530900": "临沧市", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "530928": "其它区", + "532300": "楚雄彝族自治州", + "532301": "楚雄市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532331": "禄丰县", + "532332": "其它区", + "532500": "红河哈尼族彝族自治州", + "532501": "个旧市", + "532502": "开远市", + "532522": "蒙自市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532526": "弥勒市", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532533": "其它区", + "532600": "文山壮族苗族自治州", + "532621": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532629": "其它区", + "532800": "西双版纳傣族自治州", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532824": "其它区", + "532900": "大理白族自治州", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "532933": "其它区", + "533100": "德宏傣族景颇族自治州", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533125": "其它区", + "533300": "怒江傈僳族自治州", + "533321": "泸水县", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533326": "其它区", + "533400": "迪庆藏族自治州", + "533421": "香格里拉县", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "533424": "其它区", + "540000": "西藏自治区", + "540100": "拉萨市", + "540102": "城关区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540125": "堆龙德庆县", + "540126": "达孜县", + "540127": "墨竹工卡县", + "540128": "其它区", + "542100": "昌都地区", + "542121": "昌都县", + "542122": "江达县", + "542123": "贡觉县", + "542124": "类乌齐县", + "542125": "丁青县", + "542126": "察雅县", + "542127": "八宿县", + "542128": "左贡县", + "542129": "芒康县", + "542132": "洛隆县", + "542133": "边坝县", + "542134": "其它区", + "542200": "山南地区", + "542221": "乃东县", + "542222": "扎囊县", + "542223": "贡嘎县", + "542224": "桑日县", + "542225": "琼结县", + "542226": "曲松县", + "542227": "措美县", + "542228": "洛扎县", + "542229": "加查县", + "542231": "隆子县", + "542232": "错那县", + "542233": "浪卡子县", + "542234": "其它区", + "542300": "日喀则地区", + "542301": "日喀则市", + "542322": "南木林县", + "542323": "江孜县", + "542324": "定日县", + "542325": "萨迦县", + "542326": "拉孜县", + "542327": "昂仁县", + "542328": "谢通门县", + "542329": "白朗县", + "542330": "仁布县", + "542331": "康马县", + "542332": "定结县", + "542333": "仲巴县", + "542334": "亚东县", + "542335": "吉隆县", + "542336": "聂拉木县", + "542337": "萨嘎县", + "542338": "岗巴县", + "542339": "其它区", + "542400": "那曲地区", + "542421": "那曲县", + "542422": "嘉黎县", + "542423": "比如县", + "542424": "聂荣县", + "542425": "安多县", + "542426": "申扎县", + "542427": "索县", + "542428": "班戈县", + "542429": "巴青县", + "542430": "尼玛县", + "542431": "其它区", + "542432": "双湖县", + "542500": "阿里地区", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "542528": "其它区", + "542600": "林芝地区", + "542621": "林芝县", + "542622": "工布江达县", + "542623": "米林县", + "542624": "墨脱县", + "542625": "波密县", + "542626": "察隅县", + "542627": "朗县", + "542628": "其它区", + "610000": "陕西省", + "610100": "西安市", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610122": "蓝田县", + "610124": "周至县", + "610125": "户县", + "610126": "高陵县", + "610127": "其它区", + "610200": "铜川市", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610223": "其它区", + "610300": "宝鸡市", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610322": "凤翔县", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610332": "其它区", + "610400": "咸阳市", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610427": "彬县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "其它区", + "610500": "渭南市", + "610502": "临渭区", + "610521": "华县", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610583": "其它区", + "610600": "延安市", + "610602": "宝塔区", + "610621": "延长县", + "610622": "延川县", + "610623": "子长县", + "610624": "安塞县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610633": "其它区", + "610700": "汉中市", + "610702": "汉台区", + "610721": "南郑县", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610731": "其它区", + "610800": "榆林市", + "610802": "榆阳区", + "610821": "神木县", + "610822": "府谷县", + "610823": "横山县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610832": "其它区", + "610900": "安康市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610928": "旬阳县", + "610929": "白河县", + "610930": "其它区", + "611000": "商洛市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "611027": "其它区", + "620000": "甘肃省", + "620100": "兰州市", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620124": "其它区", + "620200": "嘉峪关市", + "620300": "金昌市", + "620302": "金川区", + "620321": "永昌县", + "620322": "其它区", + "620400": "白银市", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620424": "其它区", + "620500": "天水市", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620526": "其它区", + "620600": "武威市", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620624": "其它区", + "620700": "张掖市", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620726": "其它区", + "620800": "平凉市", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620824": "华亭县", + "620825": "庄浪县", + "620826": "静宁县", + "620827": "其它区", + "620900": "酒泉市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "620983": "其它区", + "621000": "庆阳市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621028": "其它区", + "621100": "定西市", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621127": "其它区", + "621200": "陇南市", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "621229": "其它区", + "622900": "临夏回族自治州", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "622928": "其它区", + "623000": "甘南藏族自治州", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "623028": "其它区", + "630000": "青海省", + "630100": "西宁市", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630121": "大通回族土族自治县", + "630122": "湟中县", + "630123": "湟源县", + "630124": "其它区", + "632100": "海东市", + "632121": "平安县", + "632122": "民和回族土族自治县", + "632123": "乐都区", + "632126": "互助土族自治县", + "632127": "化隆回族自治县", + "632128": "循化撒拉族自治县", + "632129": "其它区", + "632200": "海北藏族自治州", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632225": "其它区", + "632300": "黄南藏族自治州", + "632321": "同仁县", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632325": "其它区", + "632500": "海南藏族自治州", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632526": "其它区", + "632600": "果洛藏族自治州", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632627": "其它区", + "632700": "玉树藏族自治州", + "632721": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632727": "其它区", + "632800": "海西蒙古族藏族自治州", + "632801": "格尔木市", + "632802": "德令哈市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632824": "其它区", + "640000": "宁夏回族自治区", + "640100": "银川市", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640182": "其它区", + "640200": "石嘴山市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640222": "其它区", + "640300": "吴忠市", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640382": "其它区", + "640400": "固原市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640426": "其它区", + "640500": "中卫市", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "640523": "其它区", + "650000": "新疆维吾尔自治区", + "650100": "乌鲁木齐市", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650122": "其它区", + "650200": "克拉玛依市", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650206": "其它区", + "652100": "吐鲁番地区", + "652101": "吐鲁番市", + "652122": "鄯善县", + "652123": "托克逊县", + "652124": "其它区", + "652200": "哈密地区", + "652201": "哈密市", + "652222": "巴里坤哈萨克自治县", + "652223": "伊吾县", + "652224": "其它区", + "652300": "昌吉回族自治州", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652329": "其它区", + "652700": "博尔塔拉蒙古自治州", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652724": "其它区", + "652800": "巴音郭楞蒙古自治州", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652830": "其它区", + "652900": "阿克苏地区", + "652901": "阿克苏市", + "652922": "温宿县", + "652923": "库车县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "652930": "其它区", + "653000": "克孜勒苏柯尔克孜自治州", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653025": "其它区", + "653100": "喀什地区", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653132": "其它区", + "653200": "和田地区", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "653228": "其它区", + "654000": "伊犁哈萨克自治州", + "654002": "伊宁市", + "654003": "奎屯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654029": "其它区", + "654200": "塔城地区", + "654201": "塔城市", + "654202": "乌苏市", + "654221": "额敏县", + "654223": "沙湾县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654227": "其它区", + "654300": "阿勒泰地区", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "654327": "其它区", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "710000": "台湾", + "710100": "台北市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710113": "其它区", + "710200": "高雄市", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710212": "其它区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710300": "台南市", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710307": "其它区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710400": "台中市", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710409": "其它区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710500": "金门县", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710600": "南投县", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710700": "基隆市", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710708": "其它区", + "710800": "新竹市", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710804": "其它区", + "710900": "嘉义市", + "710901": "东区", + "710902": "西区", + "710903": "其它区", + "711100": "新北市", + "711130": "万里区", + "711131": "金山区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711200": "宜兰县", + "711214": "宜兰市", + "711215": "头城镇", + "711216": "礁溪乡", + "711217": "壮围乡", + "711218": "员山乡", + "711219": "罗东镇", + "711220": "三星乡", + "711221": "大同乡", + "711222": "五结乡", + "711223": "冬山乡", + "711224": "苏澳镇", + "711225": "南澳乡", + "711226": "钓鱼台", + "711300": "新竹县", + "711314": "竹北市", + "711315": "湖口乡", + "711316": "新丰乡", + "711317": "新埔镇", + "711318": "关西镇", + "711319": "芎林乡", + "711320": "宝山乡", + "711321": "竹东镇", + "711322": "五峰乡", + "711323": "横山乡", + "711324": "尖石乡", + "711325": "北埔乡", + "711326": "峨眉乡", + "711400": "桃园县", + "711414": "中坜市", + "711415": "平镇市", + "711416": "龙潭乡", + "711417": "杨梅市", + "711418": "新屋乡", + "711419": "观音乡", + "711420": "桃园市", + "711421": "龟山乡", + "711422": "八德市", + "711423": "大溪镇", + "711424": "复兴乡", + "711425": "大园乡", + "711426": "芦竹乡", + "711500": "苗栗县", + "711519": "竹南镇", + "711520": "头份镇", + "711521": "三湾乡", + "711522": "南庄乡", + "711523": "狮潭乡", + "711524": "后龙镇", + "711525": "通霄镇", + "711526": "苑里镇", + "711527": "苗栗市", + "711528": "造桥乡", + "711529": "头屋乡", + "711530": "公馆乡", + "711531": "大湖乡", + "711532": "泰安乡", + "711533": "铜锣乡", + "711534": "三义乡", + "711535": "西湖乡", + "711536": "卓兰镇", + "711700": "彰化县", + "711727": "彰化市", + "711728": "芬园乡", + "711729": "花坛乡", + "711730": "秀水乡", + "711731": "鹿港镇", + "711732": "福兴乡", + "711733": "线西乡", + "711734": "和美镇", + "711735": "伸港乡", + "711736": "员林镇", + "711737": "社头乡", + "711738": "永靖乡", + "711739": "埔心乡", + "711740": "溪湖镇", + "711741": "大村乡", + "711742": "埔盐乡", + "711743": "田中镇", + "711744": "北斗镇", + "711745": "田尾乡", + "711746": "埤头乡", + "711747": "溪州乡", + "711748": "竹塘乡", + "711749": "二林镇", + "711750": "大城乡", + "711751": "芳苑乡", + "711752": "二水乡", + "711900": "嘉义县", + "711919": "番路乡", + "711920": "梅山乡", + "711921": "竹崎乡", + "711922": "阿里山乡", + "711923": "中埔乡", + "711924": "大埔乡", + "711925": "水上乡", + "711926": "鹿草乡", + "711927": "太保市", + "711928": "朴子市", + "711929": "东石乡", + "711930": "六脚乡", + "711931": "新港乡", + "711932": "民雄乡", + "711933": "大林镇", + "711934": "溪口乡", + "711935": "义竹乡", + "711936": "布袋镇", + "712100": "云林县", + "712121": "斗南镇", + "712122": "大埤乡", + "712123": "虎尾镇", + "712124": "土库镇", + "712125": "褒忠乡", + "712126": "东势乡", + "712127": "台西乡", + "712128": "仑背乡", + "712129": "麦寮乡", + "712130": "斗六市", + "712131": "林内乡", + "712132": "古坑乡", + "712133": "莿桐乡", + "712134": "西螺镇", + "712135": "二仑乡", + "712136": "北港镇", + "712137": "水林乡", + "712138": "口湖乡", + "712139": "四湖乡", + "712140": "元长乡", + "712400": "屏东县", + "712434": "屏东市", + "712435": "三地门乡", + "712436": "雾台乡", + "712437": "玛家乡", + "712438": "九如乡", + "712439": "里港乡", + "712440": "高树乡", + "712441": "盐埔乡", + "712442": "长治乡", + "712443": "麟洛乡", + "712444": "竹田乡", + "712445": "内埔乡", + "712446": "万丹乡", + "712447": "潮州镇", + "712448": "泰武乡", + "712449": "来义乡", + "712450": "万峦乡", + "712451": "崁顶乡", + "712452": "新埤乡", + "712453": "南州乡", + "712454": "林边乡", + "712455": "东港镇", + "712456": "琉球乡", + "712457": "佳冬乡", + "712458": "新园乡", + "712459": "枋寮乡", + "712460": "枋山乡", + "712461": "春日乡", + "712462": "狮子乡", + "712463": "车城乡", + "712464": "牡丹乡", + "712465": "恒春镇", + "712466": "满州乡", + "712500": "台东县", + "712517": "台东市", + "712518": "绿岛乡", + "712519": "兰屿乡", + "712520": "延平乡", + "712521": "卑南乡", + "712522": "鹿野乡", + "712523": "关山镇", + "712524": "海端乡", + "712525": "池上乡", + "712526": "东河乡", + "712527": "成功镇", + "712528": "长滨乡", + "712529": "金峰乡", + "712530": "大武乡", + "712531": "达仁乡", + "712532": "太麻里乡", + "712600": "花莲县", + "712615": "花莲市", + "712616": "新城乡", + "712617": "太鲁阁", + "712618": "秀林乡", + "712619": "吉安乡", + "712620": "寿丰乡", + "712621": "凤林镇", + "712622": "光复乡", + "712623": "丰滨乡", + "712624": "瑞穗乡", + "712625": "万荣乡", + "712626": "玉里镇", + "712627": "卓溪乡", + "712628": "富里乡", + "712700": "澎湖县", + "712707": "马公市", + "712708": "西屿乡", + "712709": "望安乡", + "712710": "七美乡", + "712711": "白沙乡", + "712712": "湖西乡", + "712800": "连江县", + "712805": "南竿乡", + "712806": "北竿乡", + "712807": "莒光乡", + "712808": "东引乡", + "810000": "香港特别行政区", + "810100": "香港岛", + "810101": "中西区", + "810102": "湾仔", + "810103": "东区", + "810104": "南区", + "810200": "九龙", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810300": "新界", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820000": "澳门特别行政区", + "820100": "澳门半岛", + "820200": "离岛", + "990000": "海外", + "990100": "海外" +}; + +/* + ## Address 字典数据 + + 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 + + 国标 省(市)级行政区划码表 + + 华北 北京市 天津市 河北省 山西省 内蒙古自治区 + 东北 辽宁省 吉林省 黑龙江省 + 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 + 华南 广东省 广西壮族自治区 海南省 + 华中 河南省 湖北省 湖南省 + 西南 重庆市 四川省 贵州省 云南省 西藏自治区 + 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 + 港澳台 香港特别行政区 澳门特别行政区 台湾省 +*/ + +// id pid/parentId name children + +// 将扁平数组转化为树状 +function createTree(list) { + const bugList = []; // 用于一次遍历后没有找到父级元素的元素 + const { result, mapped } = list.reduce( + (all, item) => { + const { mapped, result } = all; + const { id, pid } = item; + mapped[id] = item; // 记录这个点 + + if (pid === id) { + // 自己为自己父级则为 + result.push(item); + return { mapped, result }; + } + const hasParent = mapped.hasOwnProperty(pid); + if (!hasParent) { + // 父级尚未插入到mapped记录中 + bugList.push(item); + return { mapped, result }; + } + const parent = mapped[pid]; + parent.children = [...(parent.children || []), item]; + return { mapped, result }; + }, + { + mapped: {}, // 缓存已经记录过的数据 + result: [], + }, + ); + bugList.forEach((item) => { + const parent = mapped[item.pid]; + parent.children = [...(parent.children || []), item]; + }); + return result; +} +const ids = Object.keys(DICT); + +// 转化数组内对象的表现形式 +const fixed = Object.entries(DICT).map(([id, value]) => { + let pid = + id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; + if (!ids.includes(pid)) { + // 修复 pid 并不存在,但是是归属于顶级的错误 + pid = id.slice(0, 2) + '0000'; + } + return { + id, + pid, + name: value, + }; +}); + +const DICT_FIXED = createTree(fixed); + +var _patternLetters = { + yyyy: 'getFullYear', + yy: function (date) { + return ('' + date.getFullYear()).slice(2); + }, + y: 'yy', + + MM: function (date) { + const m = date.getMonth() + 1; + return m < 10 ? '0' + m : m; + }, + M: function (date) { + return date.getMonth() + 1; + }, + + dd: function (date) { + const d = date.getDate(); + return d < 10 ? '0' + d : d; + }, + d: 'getDate', + + HH: function (date) { + const h = date.getHours(); + return h < 10 ? '0' + h : h; + }, + H: 'getHours', + hh: function (date) { + const h = date.getHours() % 12; + return h < 10 ? '0' + h : h; + }, + h: function (date) { + return date.getHours() % 12; + }, + + mm: function (date) { + const m = date.getMinutes(); + return m < 10 ? '0' + m : m; + }, + m: 'getMinutes', + + ss: function (date) { + const s = date.getSeconds(); + return s < 10 ? '0' + s : s; + }, + s: 'getSeconds', + + SS: function (date) { + const ms = date.getMilliseconds(); + return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; + }, + S: 'getMilliseconds', + + A: function (date) { + return date.getHours() < 12 ? 'AM' : 'PM'; + }, + a: function (date) { + return date.getHours() < 12 ? 'am' : 'pm'; + }, + T: 'getTime', +}; + +/* eslint-disable no-fallthrough*/ + +const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); + +// 返回一个随机的日期字符串。 +function date(format = 'yyyy-MM-dd') { + return _formatDate(_randomDate(), format); +} +function datetime(format = 'yyyy-MM-dd HH:mm:ss') { + return date(format); +} +function time(format = 'HH:mm:ss') { + return date(format); +} +function now(unit, format) { + // now(unit) now(format) + if (arguments.length === 1) { + // now(format) + if (!/year|month|day|hour|minute|second|week/.test(unit)) { + format = unit; + unit = ''; + } + } + unit = (unit || '').toLowerCase(); + format = format || 'yyyy-MM-dd HH:mm:ss'; + + const date = new Date(); + + /* jshint -W086 */ + // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ + switch (unit) { + case 'year': + date.setMonth(0); + case 'month': + date.setDate(1); + case 'week': + case 'day': + date.setHours(0); + case 'hour': + date.setMinutes(0); + case 'minute': + date.setSeconds(0); + case 'second': + date.setMilliseconds(0); + } + switch (unit) { + case 'week': + date.setDate(date.getDate() - date.getDay()); + } + + return _formatDate(date, format); +} + +function _formatDate(date, format) { + return format.replace(_rformat, function creatNewSubString($0, flag) { + // 这个函数用于捕获格式化日期的关键字,然后进行替换 + const targetPattern = _patternLetters[flag]; + return typeof targetPattern === 'function' + ? targetPattern(date) + : targetPattern in _patternLetters + ? creatNewSubString($0, targetPattern) + : date[targetPattern](); + }); +} + +function _randomDate(min = new Date(0), max = new Date()) { + return new Date(integer(min.getTime(), max.getTime())); +} + +function timestamp(min, max) { + if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); + return _randomDate().getTime(); +} + +/* + 随机生成一个 18 位身份证。 + + [身份证](http://baike.baidu.com/view/1697.htm#4) + 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 + [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) +*/ +function id() { + let id; + let sum = 0; + const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; + const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; + + id = pick(DICT_FIXED).id + date('yyyyMMdd') + string$1('number', 3); + + for (let i = 0; i < id.length; i++) { + sum += id[i] * rank[i]; + } + id += last[sum % 11]; + + return id; +} + +/* + 随机生成一个 GUID。 + + http://www.broofa.com/2008/09/javascript-uuid-function/ + [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) + UUIDs (Universally Unique IDentifier) + GUIDs (Globally Unique IDentifier) + The formal definition of the UUID string representation is provided by the following ABNF [7]: + UUID = time-low "-" time-mid "-" + time-high-and-version "-" + clock-seq-and-reserved + clock-seq-low "-" node + time-low = 4hexOctet + time-mid = 2hexOctet + time-high-and-version = 2hexOctet + clock-seq-and-reserved = hexOctet + clock-seq-low = hexOctet + node = 6hexOctet + hexOctet = hexDigit hexDigit + hexDigit = + "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / + "a" / "b" / "c" / "d" / "e" / "f" / + "A" / "B" / "C" / "D" / "E" / "F" + + https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 + + KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 + + UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) + GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) + */ +function guid() { + return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); +} + +/* + ## Miscellaneous +*/ +/* + 生成一个全局的自增整数。 + 类似自增主键(auto increment primary key)。 +*/ +let key = 0; +const increment = function (step) { + return (key += +step || 1); +}; +const inc = increment; + +// Dice +function d4() { + return natural(1, 4); +} +function d6() { + return natural(1, 6); +} +function d8() { + return natural(1, 8); +} +function d12() { + return natural(1, 12); +} +function d20() { + return natural(1, 20); +} +function d100() { + return natural(1, 100); +} + +// 随机生成一个句子,第一个单词的首字母大写。 +function sentence(min = 12, max = 18) { + const len = random(min, max); + const string = times(len, () => word()).join(' '); + return capitalize(string) + '.'; +} + +// 随机生成一个单词。 +function word(min = 3, max = 10) { + const len = random(min, max); + return times(len, () => character('lower')).join(''); +} + +// 随机生成一段文本。 +function paragraph(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => sentence()).join('\n'); +} + +// 随机生成一句标题,其中每个单词的首字母大写。 +function title(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => capitalize(word())).join(''); +} + +function cparagraph(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => csentence()).join('\n'); +} + +// 随机生成一个中文句子。 +function csentence(min = 12, max = 18) { + const len = random(min, max); + return times(len, () => cword()).join('') + '。'; +} +// 随机生成一句中文标题。 +function ctitle(min = 3, max = 7) { + const len = random(min, max); + return times(len, () => cword()).join(''); +} +// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm +const DICT_HANZI = + '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; +// 随机生成一个或多个汉字。 +function cword(...args) { + let len = 1; + let pool = DICT_HANZI; + let min; + let max; + switch (args.length) { + case 0: // () + break; + case 1: // ( pool ) + if (typeof args[0] === 'string') { + [pool] = args; + } else { + // ( length ) + [len] = args; + } + break; + case 2: + // ( pool, length ) + if (typeof args[0] === 'string') { + [pool, len] = args; + } else { + // ( min, max ) + [min, max] = args; + len = natural(min, max); + } + break; + case 3: + // (pool,min,max) + [pool, min, max] = args; + len = natural(min, max); + break; + } + + return sampleSize(pool, len).join(''); +} + +// 协议簇 +const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); +// 域名后缀 +const tlds = ( + 'com net org edu gov int mil cn ' + + // 国内域名 + 'com.cn net.cn gov.cn org.cn ' + + // 中文国内域名 + '中国 中国互联.公司 中国互联.网络 ' + + // 新国际域名 + 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + + // 世界各国域名后缀 + 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' +).split(' '); + +/* + 随机生成一个 URL。 + + [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) + http Hypertext Transfer Protocol + ftp File Transfer protocol + gopher The Gopher protocol + mailto Electronic mail address + mid Message identifiers for electronic mail + cid Content identifiers for MIME body part + news Usenet news + nntp Usenet news for local NNTP access only + prospero Access using the prospero protocols + telnet rlogin tn3270 Reference to interactive sessions + wais Wide Area Information Servers +*/ +function url(Protocol, host) { + return `${Protocol || protocol()}://${host || domain()}/${word()}`; +} + +// 随机生成一个 URL 协议。 +function protocol() { + return pick(protocols); +} +// 随机生成一个域名。 +function domain(Tld) { + return `${word()}.${Tld || tld()}`; +} +/* + 随机生成一个顶级域名。 + 国际顶级域名 international top-level domain-names, iTLDs + 国家顶级域名 national top-level domainnames, nTLDs + [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) +*/ +function tld() { + // Top Level Domain + return pick(tlds); +} + +// 随机生成一个邮件地址。 +function email(domain) { + return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; +} +// 随机生成一个 IP 地址。 +function ip() { + // 这里不能用 Array(4).fill fill 是向数组注入同一个值 + return [...Array(4)].map(() => natural(0, 255)).join('.'); +} + +var _adSize$1 = [ + "300x250", + "250x250", + "240x400", + "336x280", + "180x150", + "720x300", + "468x60", + "234x60", + "88x31", + "120x90", + "120x60", + "120x240", + "125x125", + "728x90", + "160x600", + "120x600", + "300x600" +]; +var _screenSize$1 = [ + "320x200", + "320x240", + "640x480", + "800x480", + "800x480", + "1024x600", + "1024x768", + "1280x800", + "1440x900", + "1920x1200", + "2560x1600" +]; +var _videoSize$1 = [ + "720x480", + "768x576", + "1280x720", + "1920x1080" +]; +var size = { + _adSize: _adSize$1, + _screenSize: _screenSize$1, + _videoSize: _videoSize$1 +}; + +var Addvocate = "#ff6138"; +var Adobe = "#ff0000"; +var Aim = "#fcd20b"; +var Amazon = "#e47911"; +var Android = "#a4c639"; +var AOL = "#0060a3"; +var Atlassian = "#003366"; +var Behance = "#053eff"; +var bitly = "#ee6123"; +var Blogger = "#fc4f08"; +var Boeing = "#0039a6"; +var Carbonmade = "#613854"; +var Cheddar = "#ff7243"; +var Delicious = "#205cc0"; +var Dell = "#3287c1"; +var Designmoo = "#e54a4f"; +var Deviantart = "#4e6252"; +var Devour = "#fd0001"; +var DEWALT = "#febd17"; +var Dribbble = "#ea4c89"; +var Dropbox = "#3d9ae8"; +var Drupal = "#0c76ab"; +var Dunked = "#2a323a"; +var eBay = "#89c507"; +var Ember = "#f05e1b"; +var Engadget = "#00bdf6"; +var Envato = "#528036"; +var Etsy = "#eb6d20"; +var Evernote = "#5ba525"; +var Facebook = "#3b5998"; +var Firefox = "#e66000"; +var Forrst = "#5b9a68"; +var Foursquare = "#25a0ca"; +var Garmin = "#007cc3"; +var GetGlue = "#2d75a2"; +var Gimmebar = "#f70078"; +var GitHub = "#171515"; +var Grooveshark = "#f77f00"; +var Groupon = "#82b548"; +var HelloWallet = "#0085ca"; +var HootSuite = "#003366"; +var Houzz = "#73ba37"; +var HTML5 = "#ec6231"; +var IKEA = "#ffcc33"; +var IMDb = "#f3ce13"; +var Instagram = "#3f729b"; +var Intel = "#0071c5"; +var Intuit = "#365ebf"; +var Kickstarter = "#76cc1e"; +var kippt = "#e03500"; +var Kodery = "#00af81"; +var LastFM = "#c3000d"; +var LinkedIn = "#0e76a8"; +var Livestream = "#cf0005"; +var Lumo = "#576396"; +var Mixpanel = "#a086d3"; +var Meetup = "#e51937"; +var Nokia = "#183693"; +var NVIDIA = "#76b900"; +var Opera = "#cc0f16"; +var Path = "#e41f11"; +var Pinboard = "#0000e6"; +var Pinterest = "#c8232c"; +var PlayStation = "#665cbe"; +var Pocket = "#ee4056"; +var Prezi = "#318bff"; +var Pusha = "#0f71b4"; +var Quora = "#a82400"; +var Rdio = "#008fd5"; +var Readability = "#9c0000"; +var Resource = "#7eb400"; +var Rockpack = "#0ba6ab"; +var Roon = "#62b0d9"; +var RSS = "#ee802f"; +var Salesforce = "#1798c1"; +var Samsung = "#0c4da2"; +var Shopify = "#96bf48"; +var Skype = "#00aff0"; +var Snagajob = "#f47a20"; +var Softonic = "#008ace"; +var SoundCloud = "#ff7700"; +var Spotify = "#81b71a"; +var Sprint = "#fee100"; +var Squarespace = "#121212"; +var StackOverflow = "#ef8236"; +var Staples = "#cc0000"; +var Stripe = "#008cdd"; +var StudyBlue = "#00afe1"; +var StumbleUpon = "#f74425"; +var Technorati = "#40a800"; +var Treehouse = "#5cb868"; +var Trulia = "#5eab1f"; +var Tumblr = "#34526f"; +var Twitter = "#00acee"; +var TYPO3 = "#ff8700"; +var Ubuntu = "#dd4814"; +var Ustream = "#3388ff"; +var Verizon = "#ef1d1d"; +var Vimeo = "#86c9ef"; +var Vine = "#00a478"; +var Virb = "#06afd8"; +var Wooga = "#5b009c"; +var Wunderlist = "#2b88d9"; +var XBOX = "#9bc848"; +var XING = "#126567"; +var Yandex = "#ffcc00"; +var Yelp = "#c41200"; +var YouTube = "#c4302b"; +var Zalongo = "#5498dc"; +var Zendesk = "#78a300"; +var Zerply = "#9dcc7a"; +var Zootool = "#5e8b1d"; +var _brandColors = { + "4ormat": "#fb0a2a", + "500px": "#02adea", + "About.me (blue)": "#00405d", + "About.me (yellow)": "#ffcc33", + Addvocate: Addvocate, + Adobe: Adobe, + Aim: Aim, + Amazon: Amazon, + Android: Android, + "Angie's List": "#7fbb00", + AOL: AOL, + Atlassian: Atlassian, + Behance: Behance, + "Big Cartel": "#97b538", + bitly: bitly, + Blogger: Blogger, + Boeing: Boeing, + "Booking.com": "#003580", + Carbonmade: Carbonmade, + Cheddar: Cheddar, + "Code School": "#3d4944", + Delicious: Delicious, + Dell: Dell, + Designmoo: Designmoo, + Deviantart: Deviantart, + "Designer News": "#2d72da", + Devour: Devour, + DEWALT: DEWALT, + "Disqus (blue)": "#59a3fc", + "Disqus (orange)": "#db7132", + Dribbble: Dribbble, + Dropbox: Dropbox, + Drupal: Drupal, + Dunked: Dunked, + eBay: eBay, + Ember: Ember, + Engadget: Engadget, + Envato: Envato, + Etsy: Etsy, + Evernote: Evernote, + "Fab.com": "#dd0017", + Facebook: Facebook, + Firefox: Firefox, + "Flickr (blue)": "#0063dc", + "Flickr (pink)": "#ff0084", + Forrst: Forrst, + Foursquare: Foursquare, + Garmin: Garmin, + GetGlue: GetGlue, + Gimmebar: Gimmebar, + GitHub: GitHub, + "Google Blue": "#0140ca", + "Google Green": "#16a61e", + "Google Red": "#dd1812", + "Google Yellow": "#fcca03", + "Google+": "#dd4b39", + Grooveshark: Grooveshark, + Groupon: Groupon, + "Hacker News": "#ff6600", + HelloWallet: HelloWallet, + "Heroku (light)": "#c7c5e6", + "Heroku (dark)": "#6567a5", + HootSuite: HootSuite, + Houzz: Houzz, + HTML5: HTML5, + IKEA: IKEA, + IMDb: IMDb, + Instagram: Instagram, + Intel: Intel, + Intuit: Intuit, + Kickstarter: Kickstarter, + kippt: kippt, + Kodery: Kodery, + LastFM: LastFM, + LinkedIn: LinkedIn, + Livestream: Livestream, + Lumo: Lumo, + Mixpanel: Mixpanel, + Meetup: Meetup, + Nokia: Nokia, + NVIDIA: NVIDIA, + Opera: Opera, + Path: Path, + "PayPal (dark)": "#1e477a", + "PayPal (light)": "#3b7bbf", + Pinboard: Pinboard, + Pinterest: Pinterest, + PlayStation: PlayStation, + Pocket: Pocket, + Prezi: Prezi, + Pusha: Pusha, + Quora: Quora, + "QUOTE.fm": "#66ceff", + Rdio: Rdio, + Readability: Readability, + "Red Hat": "#cc0000", + Resource: Resource, + Rockpack: Rockpack, + Roon: Roon, + RSS: RSS, + Salesforce: Salesforce, + Samsung: Samsung, + Shopify: Shopify, + Skype: Skype, + Snagajob: Snagajob, + Softonic: Softonic, + SoundCloud: SoundCloud, + "Space Box": "#f86960", + Spotify: Spotify, + Sprint: Sprint, + Squarespace: Squarespace, + StackOverflow: StackOverflow, + Staples: Staples, + "Status Chart": "#d7584f", + Stripe: Stripe, + StudyBlue: StudyBlue, + StumbleUpon: StumbleUpon, + "T-Mobile": "#ea0a8e", + Technorati: Technorati, + "The Next Web": "#ef4423", + Treehouse: Treehouse, + Trulia: Trulia, + Tumblr: Tumblr, + "Twitch.tv": "#6441a5", + Twitter: Twitter, + TYPO3: TYPO3, + Ubuntu: Ubuntu, + Ustream: Ustream, + Verizon: Verizon, + Vimeo: Vimeo, + Vine: Vine, + Virb: Virb, + "Virgin Media": "#cc0000", + Wooga: Wooga, + "WordPress (blue)": "#21759b", + "WordPress (orange)": "#d54e21", + "WordPress (grey)": "#464646", + Wunderlist: Wunderlist, + XBOX: XBOX, + XING: XING, + "Yahoo!": "#720e9e", + Yandex: Yandex, + Yelp: Yelp, + YouTube: YouTube, + Zalongo: Zalongo, + Zendesk: Zendesk, + Zerply: Zerply, + Zootool: Zootool +}; + +/* eslint-disable no-redeclare*/ +const { _adSize, _screenSize, _videoSize } = size; +const _brandNames = Object.keys(_brandColors); + +/* + 生成一个随机的图片地址。 + + 使用 api 替代图片源 + http://fpoimg.com/ + 参考自 + http://rensanning.iteye.com/blog/1933310 + http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 +*/ +function image(...args) { + let size; + let background; + let foreground; + let format; + let text; + switch (arguments.length) { + case 4: + [size, background, foreground, text] = args; + break; + case 3: + [size, background, text] = args; + break; + default: + [size, background, foreground, format, text] = args; + } + + // Random.image() + if (!size) size = pick(_adSize); + + // 去除前面的 # 号 + foreground = (foreground || hex()).replace(/^#/, ''); + background = (background || hex()).replace(/^#/, ''); + + // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello + return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ + format ? '.' + format : '' + }${text ? '&text=' + text : ''}`; +} +/* + 生成一段随机的 Base64 图片编码。 + + https://github.com/imsky/holder + Holder renders image placeholders entirely on the client side. + + dataImageHolder: function(size) { + return 'holder.js/' + size + }, +*/ +function dataImage(size, text) { + let canvas; + if (typeof document !== 'undefined') { + canvas = document.createElement('canvas'); + } else { + /* + https://github.com/Automattic/node-canvas + npm install canvas --save + 安装问题: + * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva + * https://github.com/Automattic/node-canvas/issues/415 + * https://github.com/Automattic/node-canvas/wiki/_pages + + PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 + */ + const Canvas = module.require('canvas'); + canvas = new Canvas(); + } + + const ctx = canvas && canvas.getContext && canvas.getContext('2d'); + if (!canvas || !ctx) return ''; + + if (!size) size = pick(_adSize); + text = text !== undefined ? text : size; + + size = size.split('x'); + + const width = parseInt(size[0], 10); + const height = parseInt(size[1], 10); + const background = _brandColors[pick(_brandNames)]; + const foreground = '#FFF'; + const textHeight = 14; + const font = 'sans-serif'; + + canvas.width = width; + canvas.height = height; + ctx.textAlign = 'center'; + ctx.textBaseline = 'middle'; + ctx.fillStyle = background; + ctx.fillRect(0, 0, width, height); + ctx.fillStyle = foreground; + ctx.font = 'bold ' + textHeight + 'px ' + font; + ctx.fillText(text, width / 2, height / 2, width); + return canvas.toDataURL('image/png'); +} + +/* + ## Address +*/ +const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; + +// 随机生成一个大区。 +function region() { + return pick(REGION); +} +// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 +function province() { + return pick(DICT_FIXED).name; +} +// 随机生成一个(中国)市。 +function city(prefix) { + const province = pick(DICT_FIXED); + const city = pick(province.children); + return prefix ? [province.name, city.name].join(' ') : city.name; +} +// 随机生成一个(中国)县。 +function county(prefix) { + const province = pick(DICT_FIXED); + const city = pick(province.children); + const county = pick(city.children) || { + name: '-', + }; + return prefix ? [province.name, city.name, county.name].join(' ') : county.name; +} +// 随机生成一个邮政编码(六位数字)。 +function zip(len) { + let zip = ''; + for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); + return zip; +} + +// 用于生成 Blob 和 File 型数据的工具 +function prepare(anyData) { + let prepared; + switch (type(anyData)) { + case 'array': + prepared = anyData; + break; + default: + prepared = [anyData]; + } + return prepared; +} +function genFile(anyData) { + return new File(prepare(anyData), word()); +} +function genBlob(anyData) { + return new Blob(prepare(anyData)); +} + +/* + ## Mock.Random + + 工具类,用于生成各种随机数据。 +*/ + +var Random = /*#__PURE__*/Object.freeze({ + __proto__: null, + integer: integer, + isNumber: isNumber, + random: random, + natural: natural, + int: integer, + float: float, + boolean: boolean$1, + bool: boolean$1, + character: character, + char: character, + string: string$1, + str: string$1, + range: range, + color: color, + hex: hex, + rgb: rgb, + rgba: rgba, + hsl: hsl, + _goldenRatioColor: _goldenRatioColor, + first: first, + last: last, + name: name, + cfirst: cfirst, + clast: clast, + cname: cname, + capitalize: capitalize, + upper: upper, + lower: lower, + pick: pick, + shuffle: shuffle, + order: order, + d4: d4, + d6: d6, + d8: d8, + d12: d12, + d20: d20, + d100: d100, + guid: guid, + uuid: v4, + id: id, + increment: increment, + inc: inc, + paragraph: paragraph, + word: word, + sentence: sentence, + title: title, + ctitle: ctitle, + csentence: csentence, + cparagraph: cparagraph, + cword: cword, + protocol: protocol, + domain: domain, + tld: tld, + email: email, + ip: ip, + url: url, + _patternLetters: _patternLetters, + _rformat: _rformat, + _formatDate: _formatDate, + _randomDate: _randomDate, + time: time, + datetime: datetime, + date: date, + now: now, + timestamp: timestamp, + _adSize: _adSize, + _screenSize: _screenSize, + _videoSize: _videoSize, + image: image, + img: image, + _brandColors: _brandColors, + _brandNames: _brandNames, + dataImage: dataImage, + region: region, + province: province, + city: city, + county: county, + zip: zip, + genFile: genFile, + genBlob: genBlob +}); + +/* + ## Constant + + 常量集合。 + */ +/* + RE_KEY + 'name|min-max': value + 'name|count': value + 'name|min-max.dmin-dmax': value + 'name|min-max.dcount': value + 'name|count.dmin-dmax': value + 'name|count.dcount': value + 'name|+step': value + + 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] + + RE_PLACEHOLDER + placeholder(*) + + [正则查看工具](http://www.regexper.com/) + + #26 生成规则 支持 负数,例如 number|-100-100 +*/ +var Constant = { + GUID: 1, + RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, + RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, + RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, + // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g + // RE_INDEX: /^index$/, + // RE_KEY: /^key$/ +}; + +/* + ## Parser + + 解析数据模板(属性名部分)。 + + * Parser.parse( name ) + + ```json + { + parameters: [ name, inc, range, decimal ], + rnage: [ min , max ], + + min: min, + max: max, + count : count, + + decimal: decimal, + dmin: dmin, + dmax: dmax, + dcount: dcount + } + ``` + */ +/* jshint -W041 */ +function parser$1(name = '') { + if (typeof name !== 'string') name = name + ''; + const parameters = name.match(Constant.RE_KEY); + + const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); + const min = range && range[1] && parseInt(range[1], 10); // || 1 + const max = range && range[2] && parseInt(range[2], 10); // || 1 + // repeat || min-max || 1 + // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 + const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + + const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); + const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, + const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, + // int || dmin-dmax || 0 + const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; + + const result = { + // 1 name, 2 inc, 3 range, 4 decimal + parameters, + // 1 min, 2 max + range, + min, + max, + // min-max + count, + // 是否有 decimal + decimal, + dmin, + dmax, + dcount, // dmin-dimax + }; + + const isReturn = Object.keys(result).some((key) => key !== undefined); + if (isReturn) return result; + return {}; +} + +function array({ + name, + rule: { min, max, parameters, count }, + template, + context: { path, templatePath, root, templateRoot }, +}) { + let result = []; + + // 'name|1': [] + // 'name|count': [] + // 'name|min-max': [] + if (template.length === 0) return []; + + // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] + if (!parameters) { + template.forEach((item, index) => { + result.push( + gen(item, index, { + path: [...path, index], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + }); + } else { + // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] + if (min === 1 && max === undefined) { + // fix #17 + result = pick( + gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + } else { + // 'data|+1': [{}, {}] + if (parameters[2]) { + template.__order_index = template.__order_index || 0; + + result = gen(template, undefined, { + path: [...path, name], + templatePath: [...templatePath, name], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + })[template.__order_index % template.length]; + + template.__order_index += +parameters[2]; + } else { + // 'data|1-10': [{}] + [...Array(count).keys()].forEach(() => { + template.forEach((item, index) => { + result.push( + gen(item, result.length, { + path: [...path, result.length], + templatePath: [...templatePath, index], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }), + ); + }); + }); + } + } + } + return result; +} + +function boolean({ rule: { max, min, parameters }, template = '' }) { + // 'prop|multiple': false, 当前值是相反值的概率倍数 + // 'prop|probability-probability': false, 当前值与相反值的概率 + return parameters ? boolean$1(min, max, template) : template; +} + +function _function(options) { + const { + template, + context: { currentContext }, + } = options; + // ( context, options ) + return template.call(currentContext, options); +} + +function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { + let result; + if (decimal) { + // 'float1|.1-10': 10, + // 'float2|1-100.1-10': 1, + // 'float3|999.1-10': 1, + // 'float4|.3-10': 123.123, + parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { + result = float(min, max, dmin, dmax); // 内置字符串转数字 + }); + } else { + // integer + // 'grade1|1-100': 1, + result = range && !parameters[2] ? count : template; + } + return result; +} + +function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { + const result = {}; + let keys = []; + const fnKeys = []; + + // 'obj|min-max': {} + /* jshint -W041 */ + if (min != undefined) { + keys = shuffle(Object.keys(template)).slice(0, count); + keys.forEach((key) => { + const parsedKey = key.replace(Constant.RE_KEY, '$1'); + + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + }); + } else { + // 'obj': {} + // #25 改变了非函数属性的顺序,查找起来不方便 + for (const key in template) { + (typeof template[key] === 'function' ? fnKeys : keys).push(key); + } + keys = keys.concat(fnKeys); + + /* + 会改变非函数属性的顺序 + keys = Object.keys(template) + keys.sort(function(a, b) { + var afn = typeof template[a] === 'function' + var bfn = typeof template[b] === 'function' + if (afn === bfn) return 0 + if (afn && !bfn) return 1 + if (!afn && bfn) return -1 + }) + */ + + keys.forEach((key) => { + const parsedKey = key.replace(Constant.RE_KEY, '$1'); + result[parsedKey] = gen(template[key], key, { + path: [...path, parsedKey], + templatePath: [...templatePath, key], + currentContext: result, + templateCurrentContext: template, + root: root || result, + templateRoot: templateRoot || template, + }); + // 'id|+1': 1 + const inc = key.match(Constant.RE_KEY); + if (inc && inc[2] && type(template[key]) === 'number') { + template[key] += parseInt(inc[2], 10); + } + }); + } + return result; +} + +/*eslint-disable*/ + +function Token(n) { + (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); +} + +function Alternate(n, l) { + Token.call(this, 'alternate'), (this.left = n), (this.right = l); +} + +function Match(n) { + Token.call(this, 'match'), (this.body = n.filter(Boolean)); +} + +function Group(n, l) { + Token.call(this, n), (this.body = l); +} + +function CaptureGroup(n) { + Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); +} + +function Quantified(n, l) { + Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); +} + +function Quantifier(n, l) { + Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); +} + +function CharSet(n, l) { + Token.call(this, 'charset'), (this.invert = n), (this.body = l); +} + +function CharacterRange(n, l) { + Token.call(this, 'range'), (this.start = n), (this.end = l); +} + +function Literal(n) { + Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); +} + +function Unicode(n) { + Token.call(this, 'unicode'), (this.code = n.toUpperCase()); +} + +function Hex(n) { + Token.call(this, 'hex'), (this.code = n.toUpperCase()); +} + +function Octal(n) { + Token.call(this, 'octal'), (this.code = n.toUpperCase()); +} + +function BackReference(n) { + Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); +} + +function ControlCharacter(n) { + Token.call(this, 'control-character'), (this.code = n.toUpperCase()); +} + +var parser = (function () { + function n(n, l) { + function u() { + this.constructor = n; + } + (u.prototype = l.prototype), (n.prototype = new u()); + } + function l(n, l, u, t, r) { + function e(n, l) { + function u(n) { + function l(n) { + return n.charCodeAt(0).toString(16).toUpperCase(); + } + return n + .replace(/\\/g, '\\\\') + .replace(/"/g, '\\"') + .replace(/\x08/g, '\\b') + .replace(/\t/g, '\\t') + .replace(/\n/g, '\\n') + .replace(/\f/g, '\\f') + .replace(/\r/g, '\\r') + .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { + return '\\x0' + l(n); + }) + .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { + return '\\x' + l(n); + }) + .replace(/[\u0180-\u0FFF]/g, function (n) { + return '\\u0' + l(n); + }) + .replace(/[\u1080-\uFFFF]/g, function (n) { + return '\\u' + l(n); + }); + } + var t, r; + switch (n.length) { + case 0: + t = 'end of input'; + break; + + case 1: + t = n[0]; + break; + + default: + t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; + } + return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; + } + (this.expected = n), + (this.found = l), + (this.offset = u), + (this.line = t), + (this.column = r), + (this.name = 'SyntaxError'), + (this.message = e(n, l)); + } + function u(n) { + function u() { + return n.substring(Lt, qt); + } + function t() { + return Lt; + } + function r(l) { + function u(l, u, t) { + var r, e; + for (r = u; t > r; r++) + (e = n.charAt(r)), + '\n' === e + ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) + : '\r' === e || '\u2028' === e || '\u2029' === e + ? (l.line++, (l.column = 1), (l.seenCR = !0)) + : (l.column++, (l.seenCR = !1)); + } + return ( + Mt !== l && + (Mt > l && + ((Mt = 0), + (Dt = { + line: 1, + column: 1, + seenCR: !1, + })), + u(Dt, Mt, l), + (Mt = l)), + Dt + ); + } + function e(n) { + Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); + } + function o(n) { + var l = 0; + for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; + } + function c() { + var l, u, t, r, o; + return ( + (l = qt), + (u = i()), + null !== u + ? ((t = qt), + 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), + null !== r + ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) + : ((qt = t), (t = il)), + null === t && (t = al), + null !== t + ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function i() { + var n, l, u, t, r; + if (((n = qt), (l = f()), null === l && (l = al), null !== l)) + if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { + for (t = [], r = h(), null === r && (r = a()); null !== r; ) + t.push(r), (r = h()), null === r && (r = a()); + null !== t + ? ((r = s()), + null === r && (r = al), + null !== r + ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)); + } else (qt = n), (n = il); + else (qt = n), (n = il); + return n; + } + function a() { + var n; + return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; + } + function f() { + var l, u; + return ( + (l = qt), + 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), + null !== u && ((Lt = l), (u = wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function s() { + var l, u; + return ( + (l = qt), + 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), + null !== u && ((Lt = l), (u = gl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function h() { + var n, l, u; + return ( + (n = qt), + (l = a()), + null !== l + ? ((u = d()), + null !== u + ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + n + ); + } + function d() { + var n, l, u; + return ( + Wt++, + (n = qt), + (l = p()), + null !== l + ? ((u = k()), + null === u && (u = al), + null !== u + ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) + : ((qt = n), (n = il))) + : ((qt = n), (n = il)), + Wt--, + null === n && ((l = null), 0 === Wt && e(kl)), + n + ); + } + function p() { + var n; + return ( + (n = v()), + null === n && + ((n = w()), + null === n && + ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), + n + ); + } + function v() { + var l, u, t, r, o, c; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), + null !== r + ? ((o = T()), + null !== o + ? (125 === n.charCodeAt(qt) + ? ((c = Fl), qt++) + : ((c = null), 0 === Wt && e(Ql)), + null !== c + ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function w() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), + null !== r + ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function A() { + var l, u, t, r; + return ( + (l = qt), + 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), + null !== u + ? ((t = T()), + null !== t + ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), + null !== r + ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function C() { + var l, u; + return ( + (l = qt), + 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), + null !== u && ((Lt = l), (u = ql())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function g() { + var l, u; + return ( + (l = qt), + 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), + null !== u && ((Lt = l), (u = Dl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function b() { + var l, u; + return ( + (l = qt), + 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), + null !== u && ((Lt = l), (u = Wl())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function k() { + var l; + return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; + } + function T() { + var l, u, t; + if ( + ((l = qt), + (u = []), + zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), + null !== t) + ) + for (; null !== t; ) + u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); + else u = il; + return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; + } + function x() { + var l, u, t, r; + return ( + (l = qt), + 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), + null !== u + ? ((t = R()), + null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), + null !== t + ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), + null !== r + ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function y() { + var n, l; + return ( + (n = qt), + (l = c()), + null !== l && ((Lt = n), (l = Yl(l))), + null === l ? ((qt = n), (n = l)) : (n = l), + n + ); + } + function m() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function R() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function F() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), + null !== u + ? ((t = c()), + null !== t + ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Q() { + var l, u, t, r, o; + if ( + (Wt++, + (l = qt), + 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), + null !== u) + ) + if ( + (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), + null === t && (t = al), + null !== t) + ) { + for (r = [], o = S(), null === o && (o = U()); null !== o; ) + r.push(o), (o = S()), null === o && (o = U()); + null !== r + ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), + null !== o + ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + else (qt = l), (l = il); + return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; + } + function S() { + var l, u, t, r; + return ( + Wt++, + (l = qt), + (u = U()), + null !== u + ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), + null !== t + ? ((r = U()), + null !== r + ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + Wt--, + null === l && ((u = null), 0 === Wt && e(du)), + l + ); + } + function U() { + var n; + return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; + } + function E() { + var l, u; + return ( + (l = qt), + Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function G() { + var n; + return ( + (n = L()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = _()), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = tl()))))))))))))))))), + n + ); + } + function B() { + var n; + return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; + } + function j() { + var l, u; + return ( + (l = qt), + 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), + null !== u && ((Lt = l), (u = xu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function $() { + var l, u; + return ( + Wt++, + (l = qt), + mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), + null !== u && ((Lt = l), (u = bu(u))), + null === u ? ((qt = l), (l = u)) : (l = u), + Wt--, + null === l && ((u = null), 0 === Wt && e(yu)), + l + ); + } + function q() { + var n; + return ( + (n = M()), + null === n && + ((n = D()), + null === n && + ((n = Y()), + null === n && + ((n = H()), + null === n && + ((n = O()), + null === n && + ((n = W()), + null === n && + ((n = z()), + null === n && + ((n = I()), + null === n && + ((n = J()), + null === n && + ((n = K()), + null === n && + ((n = N()), + null === n && + ((n = P()), + null === n && + ((n = V()), + null === n && + ((n = X()), + null === n && + ((n = Z()), + null === n && + ((n = _()), + null === n && + ((n = nl()), + null === n && + ((n = ll()), + null === n && + ((n = ul()), + null === n && + (n = + tl()))))))))))))))))))), + n + ); + } + function L() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Su())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function M() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), + null !== u && ((Lt = l), (u = Uu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function D() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), + null !== u && ((Lt = l), (u = Bu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function H() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), + null !== u && ((Lt = l), (u = qu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function O() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), + null !== u && ((Lt = l), (u = Du())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function W() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), + null !== u && ((Lt = l), (u = Wu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function z() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), + null !== u && ((Lt = l), (u = Ju())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function I() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), + null !== u && ((Lt = l), (u = Pu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function J() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), + null !== u && ((Lt = l), (u = Yu())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function K() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), + null !== u && ((Lt = l), (u = nt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function N() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), + null !== u && ((Lt = l), (u = tt())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function P() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), + null !== u && ((Lt = l), (u = ot())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function V() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), + null !== u && ((Lt = l), (u = at())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function X() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), + null !== u && ((Lt = l), (u = ht())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function Y() { + var l, u, t; + return ( + (l = qt), + n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t + ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function Z() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), + null !== t + ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + function _() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u) + ) { + if ( + ((t = []), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); + else t = il; + null !== t + ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function nl() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t + ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ll() { + var l, u, t, r; + if ( + ((l = qt), + n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), + null !== u) + ) { + if ( + ((t = []), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), + null !== r) + ) + for (; null !== r; ) + t.push(r), + St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); + else t = il; + null !== t + ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il)); + } else (qt = l), (l = il); + return l; + } + function ul() { + var l, u; + return ( + (l = qt), + n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), + null !== u && ((Lt = l), (u = $t())), + null === u ? ((qt = l), (l = u)) : (l = u), + l + ); + } + function tl() { + var l, u, t; + return ( + (l = qt), + 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), + null !== u + ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), + null !== t + ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) + : ((qt = l), (l = il))) + : ((qt = l), (l = il)), + l + ); + } + var rl, + el = arguments.length > 1 ? arguments[1] : {}, + ol = { + regexp: c, + }, + cl = c, + il = null, + al = '', + fl = '|', + sl = '"|"', + hl = function (n, l) { + return l ? new Alternate(n, l[1]) : n; + }, + dl = function (n, l, u) { + return new Match([n].concat(l).concat([u])); + }, + pl = '^', + vl = '"^"', + wl = function () { + return new Token('start'); + }, + Al = '$', + Cl = '"$"', + gl = function () { + return new Token('end'); + }, + bl = function (n, l) { + return new Quantified(n, l); + }, + kl = 'Quantifier', + Tl = function (n, l) { + return l && (n.greedy = !1), n; + }, + xl = '{', + yl = '"{"', + ml = ',', + Rl = '","', + Fl = '}', + Ql = '"}"', + Sl = function (n, l) { + return new Quantifier(n, l); + }, + Ul = ',}', + El = '",}"', + Gl = function (n) { + return new Quantifier(n, 1 / 0); + }, + Bl = function (n) { + return new Quantifier(n, n); + }, + jl = '+', + $l = '"+"', + ql = function () { + return new Quantifier(1, 1 / 0); + }, + Ll = '*', + Ml = '"*"', + Dl = function () { + return new Quantifier(0, 1 / 0); + }, + Hl = '?', + Ol = '"?"', + Wl = function () { + return new Quantifier(0, 1); + }, + zl = /^[0-9]/, + Il = '[0-9]', + Jl = function (n) { + return +n.join(''); + }, + Kl = '(', + Nl = '"("', + Pl = ')', + Vl = '")"', + Xl = function (n) { + return n; + }, + Yl = function (n) { + return new CaptureGroup(n); + }, + Zl = '?:', + _l = '"?:"', + nu = function (n) { + return new Group('non-capture-group', n); + }, + lu = '?=', + uu = '"?="', + tu = function (n) { + return new Group('positive-lookahead', n); + }, + ru = '?!', + eu = '"?!"', + ou = function (n) { + return new Group('negative-lookahead', n); + }, + cu = 'CharacterSet', + iu = '[', + au = '"["', + fu = ']', + su = '"]"', + hu = function (n, l) { + return new CharSet(!!n, l); + }, + du = 'CharacterRange', + pu = '-', + vu = '"-"', + wu = function (n, l) { + return new CharacterRange(n, l); + }, + Au = 'Character', + Cu = /^[^\\\]]/, + gu = '[^\\\\\\]]', + bu = function (n) { + return new Literal(n); + }, + ku = '.', + Tu = '"."', + xu = function () { + return new Token('any-character'); + }, + yu = 'Literal', + mu = /^[^|\\\/.[()?+*$\^]/, + Ru = '[^|\\\\\\/.[()?+*$\\^]', + Fu = '\\b', + Qu = '"\\\\b"', + Su = function () { + return new Token('backspace'); + }, + Uu = function () { + return new Token('word-boundary'); + }, + Eu = '\\B', + Gu = '"\\\\B"', + Bu = function () { + return new Token('non-word-boundary'); + }, + ju = '\\d', + $u = '"\\\\d"', + qu = function () { + return new Token('digit'); + }, + Lu = '\\D', + Mu = '"\\\\D"', + Du = function () { + return new Token('non-digit'); + }, + Hu = '\\f', + Ou = '"\\\\f"', + Wu = function () { + return new Token('form-feed'); + }, + zu = '\\n', + Iu = '"\\\\n"', + Ju = function () { + return new Token('line-feed'); + }, + Ku = '\\r', + Nu = '"\\\\r"', + Pu = function () { + return new Token('carriage-return'); + }, + Vu = '\\s', + Xu = '"\\\\s"', + Yu = function () { + return new Token('white-space'); + }, + Zu = '\\S', + _u = '"\\\\S"', + nt = function () { + return new Token('non-white-space'); + }, + lt = '\\t', + ut = '"\\\\t"', + tt = function () { + return new Token('tab'); + }, + rt = '\\v', + et = '"\\\\v"', + ot = function () { + return new Token('vertical-tab'); + }, + ct = '\\w', + it = '"\\\\w"', + at = function () { + return new Token('word'); + }, + ft = '\\W', + st = '"\\\\W"', + ht = function () { + return new Token('non-word'); + }, + dt = '\\c', + pt = '"\\\\c"', + vt = 'any character', + wt = function (n) { + return new ControlCharacter(n); + }, + At = '\\', + Ct = '"\\\\"', + gt = /^[1-9]/, + bt = '[1-9]', + kt = function (n) { + return new BackReference(n); + }, + Tt = '\\0', + xt = '"\\\\0"', + yt = /^[0-7]/, + mt = '[0-7]', + Rt = function (n) { + return new Octal(n.join('')); + }, + Ft = '\\x', + Qt = '"\\\\x"', + St = /^[0-9a-fA-F]/, + Ut = '[0-9a-fA-F]', + Et = function (n) { + return new Hex(n.join('')); + }, + Gt = '\\u', + Bt = '"\\\\u"', + jt = function (n) { + return new Unicode(n.join('')); + }, + $t = function () { + return new Token('null-character'); + }, + qt = 0, + Lt = 0, + Mt = 0, + Dt = { + line: 1, + column: 1, + seenCR: !1, + }, + Ht = 0, + Ot = [], + Wt = 0; + if ('startRule' in el) { + if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); + cl = ol[el.startRule]; + } + if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; + throw ( + (o(Ot), + (Lt = Math.max(qt, Ht)), + new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) + ); + } + return ( + n(l, Error), + { + SyntaxError: l, + parse: u, + } + ); + })(), + index = 1, + cgs = {}; + +/*eslint-disable*/ +/* + + */ +const Handler$1 = { + extend: extend, +}; + +// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart +/* let ASCII_CONTROL_CODE_CHART = { + '@': ['\u0000'], + A: ['\u0001'], + B: ['\u0002'], + C: ['\u0003'], + D: ['\u0004'], + E: ['\u0005'], + F: ['\u0006'], + G: ['\u0007', '\a'], + H: ['\u0008', '\b'], + I: ['\u0009', '\t'], + J: ['\u000A', '\n'], + K: ['\u000B', '\v'], + L: ['\u000C', '\f'], + M: ['\u000D', '\r'], + N: ['\u000E'], + O: ['\u000F'], + P: ['\u0010'], + Q: ['\u0011'], + R: ['\u0012'], + S: ['\u0013'], + T: ['\u0014'], + U: ['\u0015'], + V: ['\u0016'], + W: ['\u0017'], + X: ['\u0018'], + Y: ['\u0019'], + Z: ['\u001A'], + '[': ['\u001B', '\e'], + '\\': ['\u001C'], + ']': ['\u001D'], + '^': ['\u001E'], + '_': ['\u001F'] +}*/ + +// ASCII printable code chart +// let LOWER = 'abcdefghijklmnopqrstuvwxyz' +// let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' +// let NUMBER = '0123456789' +// let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' +const LOWER = ascii(97, 122); +const UPPER = ascii(65, 90); +const NUMBER = ascii(48, 57); +const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) +const PRINTABLE = ascii(32, 126); +const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; +const CHARACTER_CLASSES = { + '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) + '\\W': OTHER.replace('_', ''), + '\\s': SPACE, + '\\S': (function () { + let result = PRINTABLE; + for (let i = 0; i < SPACE.length; i++) { + result = result.replace(SPACE[i], ''); + } + return result; + })(), + '\\d': NUMBER, + '\\D': LOWER + UPPER + OTHER, +}; + +// 从 from 到 to 包含两个端点的字符串 +function ascii(from, to) { + return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); +} + +// let ast = RegExpParser.parse(regexp.source) +Handler$1.gen = function (node, result, cache) { + cache = cache || { + guid: 1, + }; + return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); +}; + +Handler$1.extend({ + /* jshint unused:false */ + token: function (node, result, cache) { + switch (node.type) { + case 'start': + case 'end': + return ''; + case 'any-character': + return character(); + case 'backspace': + return ''; + case 'word-boundary': // TODO + return ''; + case 'non-word-boundary': // TODO + break; + case 'digit': + return pick(NUMBER.split('')); + case 'non-digit': + return pick((LOWER + UPPER + OTHER).split('')); + case 'form-feed': + break; + case 'line-feed': + return node.body || node.text; + case 'carriage-return': + break; + case 'white-space': + return pick(SPACE.split('')); + case 'non-white-space': + return pick((LOWER + UPPER + NUMBER).split('')); + case 'tab': + break; + case 'vertical-tab': + break; + case 'word': // \w [a-zA-Z0-9] + return pick((LOWER + UPPER + NUMBER).split('')); + case 'non-word': // \W [^a-zA-Z0-9] + return pick(OTHER.replace('_', '').split('')); + } + return node.body || node.text; + }, + /* + { + type: 'alternate', + offset: 0, + text: '', + left: { + boyd: [] + }, + right: { + boyd: [] + } + } + */ + alternate: function (node, result, cache) { + // node.left/right {} + return this.gen(boolean$1() ? node.left : node.right, result, cache); + }, + /* + { + type: 'match', + offset: 0, + text: '', + body: [] + } + */ + match: function (node, result, cache) { + result = ''; + // node.body [] + for (let i = 0; i < node.body.length; i++) { + result += this.gen(node.body[i], result, cache); + } + return result; + }, + // () + 'capture-group': function (node, result, cache) { + // node.body {} + result = this.gen(node.body, result, cache); + cache[cache.guid++] = result; + return result; + }, + // (?:...) + 'non-capture-group': function (node, result, cache) { + // node.body {} + return this.gen(node.body, result, cache); + }, + // (?=p) + 'positive-lookahead': function (node, result, cache) { + // node.body + return this.gen(node.body, result, cache); + }, + // (?!p) + 'negative-lookahead': function (node, result, cache) { + // node.body + return ''; + }, + /* + { + type: 'quantified', + offset: 3, + text: 'c*', + body: { + type: 'literal', + offset: 3, + text: 'c', + body: 'c', + escaped: false + }, + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + } + */ + quantified: function (node, result, cache) { + result = ''; + // node.quantifier {} + const count = this.quantifier(node.quantifier); + // node.body {} + for (let i = 0; i < count; i++) { + result += this.gen(node.body, result, cache); + } + return result; + }, + /* + quantifier: { + type: 'quantifier', + offset: 4, + text: '*', + min: 0, + max: Infinity, + greedy: true + } + */ + quantifier: function (node, result, cache) { + const min = Math.max(node.min, 0); + const max = isFinite(node.max) ? node.max : min + integer(3, 7); + return integer(min, max); + }, + /* + + */ + charset: function (node, result, cache) { + // node.invert + if (node.invert) return this['invert-charset'](node, result, cache); + + // node.body [] + const literal = pick(node.body); + return this.gen(literal, result, cache); + }, + 'invert-charset': function (node, result, cache) { + let pool = PRINTABLE; + for (let i = 0, item; i < node.body.length; i++) { + item = node.body[i]; + switch (item.type) { + case 'literal': { + pool = pool.replace(item.body, ''); + break; + } + case 'range': + const min = this.gen(item.start, result, cache).charCodeAt(); + const max = this.gen(item.end, result, cache).charCodeAt(); + for (let ii = min; ii <= max; ii++) { + pool = pool.replace(String.fromCharCode(ii), ''); + } + /* falls through */ + default: + const characters = CHARACTER_CLASSES[item.text]; + if (characters) { + for (let iii = 0; iii <= characters.length; iii++) { + pool = pool.replace(characters[iii], ''); + } + } + } + } + return pick(pool.split('')); + }, + range: function (node, result, cache) { + // node.start, node.end + const min = this.gen(node.start, result, cache).charCodeAt(); + const max = this.gen(node.end, result, cache).charCodeAt(); + return String.fromCharCode(integer(min, max)); + }, + literal: function (node, result, cache) { + return node.escaped ? node.body : node.text; + }, + // Unicode \u + unicode: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 十六进制 \xFF + hex: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 16)); + }, + // 八进制 \0 + octal: function (node, result, cache) { + return String.fromCharCode(parseInt(node.code, 8)); + }, + // 反向引用 + 'back-reference': function (node, result, cache) { + return cache[node.code] || ''; + }, + /* + http://en.wikipedia.org/wiki/C0_and_C1_control_codes + */ + CONTROL_CHARACTER_MAP: (function () { + const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); + const CONTROL_CHARACTER_UNICODE = + '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( + ' ', + ); + const map = {}; + for (let i = 0; i < CONTROL_CHARACTER.length; i++) { + map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; + } + return map; + })(), + 'control-character': function (node, result, cache) { + return this.CONTROL_CHARACTER_MAP[node.code]; + }, +}); + +var RE = /*#__PURE__*/Object.freeze({ + __proto__: null, + Parser: parser, + Handler: Handler$1 +}); + +function regexp({ rule: { count }, template: { source } }) { + // 'name': /regexp/, + // 'name|1-5': /regexp/, + const Source = count === undefined ? source : Array(count).fill(source).join(''); + return Handler$1.gen(parser.parse(Source)); +} + +function getValueByKeyPath(key, options) { + const originalKey = key; + const keyPathParts = splitPathToArray(key); + let absolutePathParts = []; + + // 绝对路径 + if (key.charAt(0) === '/') { + absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); + } else { + // 相对路径 + if (keyPathParts.length > 1) { + absolutePathParts = options.context.path.slice(0); + absolutePathParts.pop(); + absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); + } + } + + try { + key = keyPathParts[keyPathParts.length - 1]; + let currentContext = options.context.root; + let templateCurrentContext = options.context.templateRoot; + for (let i = 1; i < absolutePathParts.length - 1; i++) { + currentContext = currentContext[absolutePathParts[i]]; + templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; + } + // 引用的值已经计算好 + if (currentContext && key in currentContext) return currentContext[key]; + + // 尚未计算,递归引用数据模板中的属性 + if ( + templateCurrentContext && + typeof templateCurrentContext === 'object' && + key in templateCurrentContext && + originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateCurrentContext[key] = gen(templateCurrentContext[key], key, { + currentContext: currentContext, + templateCurrentContext: templateCurrentContext, + }); + return templateCurrentContext[key]; + } + } catch (err) { + console.log(err); + } + + return '@' + keyPathParts.join('/'); +} +// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js +function normalizePath(pathParts) { + const newPathParts = []; + for (let i = 0; i < pathParts.length; i++) { + switch (pathParts[i]) { + case '..': + newPathParts.pop(); + break; + case '.': + break; + default: + newPathParts.push(pathParts[i]); + } + } + return newPathParts; +} +function splitPathToArray(path) { + let parts = path.split(/\/+/); + if (!parts[parts.length - 1]) parts = parts.slice(0, -1); + if (!parts[0]) parts = parts.slice(1); + return parts; +} + +// 占位符即是字符串函数的意思 +function placeholder(Placeholder, obj, templateContext, options) { + // console.log(options.context.path) + // 1 key, 2 params + Constant.RE_PLACEHOLDER.exec(''); + let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); + + const lkey = key && key.toLowerCase(); + const pathParts = splitPathToArray(key); + + // 占位符优先引用数据模板中的属性 + if (obj && key in obj) return obj[key]; + + // 绝对路径 or 相对路径 + if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); + + // 递归引用数据模板中的属性 + if ( + templateContext && + typeof templateContext === 'object' && + key in templateContext && + Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 + ) { + // 先计算被引用的属性值 + templateContext[key] = gen(templateContext[key], key, { + currentContext: obj, + templateCurrentContext: templateContext, + }); + return templateContext[key]; + } + + // 如果未找到,则原样返回 + if (!(key in Random) && !(lkey in Random)) return Placeholder; + + // 解析占位符的参数 + // !不进行低版本浏览器的匹配 + if (params) { + params = params.split(/\s*,\s*/).map((param) => { + // 递归解析参数中的占位符 + Constant.RE_PLACEHOLDER.exec(''); + if (Constant.RE_PLACEHOLDER.test(param)) { + return placeholder(param, obj, templateContext, options); + } + return param; + }); + } else { + params = []; + } + + const handle = Random[key] || Random[lkey]; + switch (type(handle)) { + case 'array': { + // 自动从数组中取一个,例如 @areas + return pick(handle); + } + case 'function': { + // 执行占位符方法(大多数情况) + handle.options = options; + const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 + delete handle.options; + return re; + } + } +} + +function string(options) { + const { + rule: { range, count }, + context: { currentContext, templateCurrentContext }, + template = '', + } = options; + let result = ''; + + if (template.length) { + // 'foo': '★', count 为 undefined 时 + // 'star|1-5': '★', + result += count === undefined ? template : Array(count).fill(template).join(''); + + // 'email|1-10': '@EMAIL, ', + const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ + placeholders.some((ph, index) => { + // 遇到转义斜杠,不需要解析占位符 + if (/^\\/.test(ph)) { + placeholders.splice(index--, 1); + return; + } + + const phed = placeholder(ph, currentContext, templateCurrentContext, options); + + // 只有一个占位符,并且没有其他字符 + if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { + if (isNumeric(phed)) { + result = parseFloat(phed, 10); + return true; + } + if (/^(true|false)$/.test(phed)) { + result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 + return true; + } // + result = phed; + return true; + } + result = result.replace(ph, phed); + }); + } else { + // 'ASCII|1-10': '', + // 'ASCII': '', + result = range ? string$1(count) : template; + } + return result; +} + +var typeset = /*#__PURE__*/Object.freeze({ + __proto__: null, + array: array, + boolean: boolean, + 'function': _function, + number: number, + object: object, + regexp: regexp, + string: string +}); + +let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 +function gen(template, name = '', context = {}) { + const newContext = { + // 当前访问路径,只有属性名,不包括生成规则 + path: context.path || [GID], + templatePath: context.templatePath || [GID++], + // 最终属性值的上下文 + currentContext: context.currentContext, + // 属性值模板的上下文 + templateCurrentContext: context.templateCurrentContext || template, + // 最终值的根 + root: context.root || context.currentContext, + // 模板的根 + templateRoot: context.templateRoot || context.templateCurrentContext || template, + }; + // console.log('path:', context.path.join('.'), template) + + const type$1 = type(template); + const func = typeset[type$1]; + let data; + + if (func) { + data = func({ + // 属性值类型 + type: type$1, + // 属性值模板 + template, + // 属性名 + 生成规则 + name, + // 属性名 + parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, + // 解析后的生成规则 + rule: parser$1(name), + // 相关上下文 + context: newContext, + }); + // 循环引用 + if (!newContext.root) newContext.root = data; + return data; + } + return template; +} + +/* + ## Handler + + 处理数据模板。 + + * Handler.gen( template, name?, context? ) + + 入口方法。 + + * Data Template Definition, DTD + + 处理数据模板定义。 + + * Handler.array( options ) + * Handler.object( options ) + * Handler.number( options ) + * Handler.boolean( options ) + * Handler.string( options ) + * Handler.function( options ) + * Handler.regexp( options ) + + 处理路径(相对和绝对)。 + + * Handler.getValueByKeyPath( key, options ) + + * Data Placeholder Definition, DPD + + 处理数据占位符定义 + + * Handler.placeholder( placeholder, context, templateContext, options ) + +*/ +/* + template 属性值(即数据模板) + name 属性名 + context 数据上下文,生成后的数据 + templateContext 模板上下文, + + Handle.gen(template, name, options) + context + currentContext, templateCurrentContext, + path, templatePath + root, templateRoot +*/ +const Handler = { + gen, + extend, +}; +Handler.extend({ + array, + object, + number, + boolean, + string: string, + function: _function, + regexp, +}); +Handler.extend({ + _all: function () { + return Object.keys(Random).reduce((col, key) => { + col[key.toLowerCase()] = key; + return col; + }, {}); + }, + // 处理占位符,转换为最终值 + placeholder, + getValueByKeyPath, + normalizePath, + splitPathToArray, +}); + +/* + ## toJSONSchema + + 把 Mock.js 风格的数据模板转换成 JSON Schema。 + + > [JSON Schema](http://json-schema.org/) + */ + +function toJSONSchema(template, name, path = [] /* Internal Use Only */) { + // type rule properties items + const result = { + name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, + template, + type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } + rule: parser$1.parse(name), + path: path.slice(0), + }; + result.path.push(name === undefined ? 'ROOT' : result.name); + + switch (result.type) { + case 'array': + result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); + break; + case 'object': + result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + break; + } + + return result; +} + +/*eslint-disable*/ + +function valid(template, data) { + const schema = toJSONSchema(template); + const result = Diff.diff(schema, data); + for (let i = 0; i < result.length; i++) { + // console.log(template, data) + // console.warn(Assert.message(result[i])) + } + return result; +} + +/* + ## name + 有生成规则:比较解析后的 name + 无生成规则:直接比较 + ## type + 无类型转换:直接比较 + 有类型转换:先试着解析 template,然后再检查? + ## value vs. template + 基本类型 + 无生成规则:直接比较 + 有生成规则: + number + min-max.dmin-dmax + min-max.dcount + count.dmin-dmax + count.dcount + +step + 整数部分 + 小数部分 + boolean + string + min-max + count + ## properties + 对象 + 有生成规则:检测期望的属性个数,继续递归 + 无生成规则:检测全部的属性个数,继续递归 + ## items + 数组 + 有生成规则: + `'name|1': [{}, {} ...]` 其中之一,继续递归 + `'name|+1': [{}, {} ...]` 顺序检测,继续递归 + `'name|min-max': [{}, {} ...]` 检测个数,继续递归 + `'name|count': [{}, {} ...]` 检测个数,继续递归 + 无生成规则:检测全部的元素个数,继续递归 +*/ +const Diff = { + diff: function diff(schema, data, name /* Internal Use Only */) { + const result = []; + + // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 + if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { + this.value(schema, data, name, result); + this.properties(schema, data, name, result); + this.items(schema, data, name, result); + } + + return result; + }, + /* jshint unused:false */ + name: function (schema, data, name, result) { + const length = result.length; + + Assert.equal('name', schema.path, name + '', schema.name + '', result); + + return result.length === length; + }, + type: function (schema, data, name, result) { + const length = result.length; + + switch (schema.type) { + case 'string': + // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; + break; + case 'array': + if (schema.rule.parameters) { + // name|count: array + if (schema.rule.min !== undefined && schema.rule.max === undefined) { + // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 + if (schema.rule.count === 1) return true; + } + // 跳过 name|+inc: array + if (schema.rule.parameters[2]) return true; + } + break; + case 'function': + // 跳过 `'name': function`,因为函数可以返回任何类型的值。 + return true; + } + + Assert.equal('type', schema.path, type(data), schema.type, result); + + return result.length === length; + }, + value: function (schema, data, name, result) { + const length = result.length; + + const rule = schema.rule; + const templateType = schema.type; + if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; + + // 无生成规则 + if (!rule.parameters) { + switch (templateType) { + case 'regexp': + Assert.match('value', schema.path, data, schema.template, result); + return result.length === length; + case 'string': + // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 + if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; + break; + } + Assert.equal('value', schema.path, data, schema.template, result); + return result.length === length; + } + + // 有生成规则 + let actualRepeatCount; + switch (templateType) { + case 'number': + const parts = (data + '').split('.'); + parts[0] = +parts[0]; + + // 整数部分 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); + // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') + Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); + } + + // 小数部分 + if (rule.decimal) { + // |dmin-dmax + if (rule.dmin !== undefined && rule.dmax !== undefined) { + Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); + Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); + } + // |dcount + if (rule.dmin !== undefined && rule.dmax === undefined) { + Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); + } + } + + break; + + case 'boolean': + break; + + case 'string': + // 'aaa'.match(/a/g) + actualRepeatCount = data.match(new RegExp(schema.template, 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + + break; + + case 'regexp': + actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); + actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; + + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); + Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); + } + break; + } + + return result.length === length; + }, + properties: function (schema, data, name, result) { + const length = result.length; + + const rule = schema.rule; + const keys$1 = keys(data); + if (!schema.properties) return; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('properties length', schema.path, keys$1.length, schema.properties.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + 'properties length', + schema.path, + keys$1.length, + Math.min(rule.min, rule.max), + result, + ); + Assert.lessThanOrEqualTo( + 'properties length', + schema.path, + keys$1.length, + Math.max(rule.min, rule.max), + result, + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count !== 1) Assert.equal('properties length', schema.path, keys$1.length, rule.min, result); + } + } + + if (result.length !== length) return false; + + for (let i = 0; i < keys$1.length; i++) { + result.push.apply( + result, + this.diff( + (function () { + let property; + each(schema.properties, function (item /* , index*/) { + if (item.name === keys$1[i]) property = item; + }); + return property || schema.properties[i]; + })(), + data[keys$1[i]], + keys$1[i], + ), + ); + } + + return result.length === length; + }, + items: function (schema, data, name, result) { + const length = result.length; + + if (!schema.items) return; + + const rule = schema.rule; + + // 无生成规则 + if (!schema.rule.parameters) { + Assert.equal('items length', schema.path, data.length, schema.items.length, result); + } else { + // 有生成规则 + // |min-max + if (rule.min !== undefined && rule.max !== undefined) { + Assert.greaterThanOrEqualTo( + 'items', + schema.path, + data.length, + Math.min(rule.min, rule.max) * schema.items.length, + result, + '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', + ); + Assert.lessThanOrEqualTo( + 'items', + schema.path, + data.length, + Math.max(rule.min, rule.max) * schema.items.length, + result, + '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', + ); + } + // |count + if (rule.min !== undefined && rule.max === undefined) { + // |1, |>1 + if (rule.count === 1) return result.length === length; + else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); + } + // |+inc + if (rule.parameters[2]) return result.length === length; + } + + if (result.length !== length) return false; + + for (let i = 0; i < data.length; i++) { + result.push.apply( + result, + this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), + ); + } + + return result.length === length; + }, +}; + +/* + 完善、友好的提示信息 + + Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to + 路径 验证类型 描述 + + Expect path.name is less than or equal to expected, but path.name is actual. + + Expect path.name is less than or equal to expected, but path.name is actual. + Expect path.name is greater than or equal to expected, but path.name is actual. + +*/ +const Assert = { + message: function (item) { + return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") + .replace('{utype}', item.type.toUpperCase()) + .replace('{ltype}', item.type.toLowerCase()) + .replace('{path}', (isArray(item.path) && item.path.join('.')) || item.path) + .replace('{action}', item.action) + .replace('{expected}', item.expected) + .replace('{actual}', item.actual); + }, + equal: function (type, path, actual, expected, result, message) { + if (actual === expected) return true; + switch (type) { + case 'type': + // 正则模板 === 字符串最终值 + if (expected === 'regexp' && actual === 'string') return true; + break; + } + + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + // actual matches expected + match: function (type, path, actual, expected, result, message) { + if (expected.test(actual)) return true; + + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'matches', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + notEqual: function (type, path, actual, expected, result, message) { + if (actual !== expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is not equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThan: function (type, path, actual, expected, result, message) { + if (actual > expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThan: function (type, path, actual, expected, result, message) { + if (actual < expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual >= expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is greater than or equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, + lessThanOrEqualTo: function (type, path, actual, expected, result, message) { + if (actual <= expected) return true; + const item = { + path: path, + type: type, + actual: actual, + expected: expected, + action: 'is less than or equal to', + message: message, + }; + item.message = Assert.message(item); + result.push(item); + return false; + }, +}; + +valid.Diff = Diff; +valid.Assert = Assert; + +// 集中管理 mocked 的 url + +const _mocked = { + $set(value) { + this[value.rurl + value.rtype.toLowerCase()] = value; + }, + $delete(key) { + delete this[key]; + }, +}; + +// 查找与请求参数匹配的数据模板:URL,Type +function find({ url, type }) { + type = type.toLowerCase(); + for (const sUrlType in _mocked) { + const item = _mocked[sUrlType]; + const { rurl, rtype } = item; + if (match(rurl, url) && match(rtype, type)) { + // console.log('[mock]', url, '>', item.rurl) + return item; + } + } + return false; +} + +function match(expected, actual) { + switch (type(expected)) { + case 'string': + return expected === actual; + case 'regexp': + return expected.test(actual); + default: + return false; + } +} + +// 数据模板 => 响应数据 +function convert({ template }, options) { + return isFunction(template) ? template(options) : gen(template); +} + +/** + * Check if `obj` is a URLSearchParams object + * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 + * + * @param {*} obj + * @return {boolean} + */ +const isURLSearchParameters = (object) => { + return ( + typeof object === 'object' && + typeof object.append === 'function' && + typeof object.delete === 'function' && + typeof object.get === 'function' && + typeof object.getAll === 'function' && + typeof object.has === 'function' && + typeof object.set === 'function' && + typeof object.sort === 'function' && + object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 + ); +}; + +const BODY = Symbol('Body internals'); +const RESPONSE = Symbol('Response internals'); + +/** + * Consume and convert an entire Body to a Buffer. + * + * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body + * + * @return Promise + */ +async function consumeBody(data) { + // 标记为已经使用 + if (data.disturbed) { + throw new TypeError(`body used already for: ${data.url}`); + } + data.disturbed = true; + + // 报错 + if (data.error) { + throw data.error; + } + + if (data.body instanceof FormData) { + return new Blob([Object.fromEntries(data.body.entries())]); + } + return data.body; +} + /** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function qt(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var $t={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys($t),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries($t).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date($n(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(""))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:$n,isNumber:Dn,random:hn,natural:Pn,int:$n,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return qt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:qt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?$n(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||$n(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=$r[this.offset]||($r[this.offset]=qr++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",qe='"+"',$e=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Sr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]);class xa extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ga=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new xa(e,n)}}return console.warn("未使用 mockjs"),ga(e,n)}var va="OK";const wa=XMLHttpRequest.prototype.send,ka=XMLHttpRequest.prototype.open;class Aa extends XMLHttpRequest{constructor(...e){super(...e)}_send=wa;_open=ka;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=va;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}let Ca;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ca=Aa);const Ma={Handler:ta,Random:sr,Util:_n,XHR:Ca,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ca.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ca&&window&&(window.XMLHttpRequest=Ca),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ma; + * Body.js + * + * Body interface provides common methods for Request and Response + */ +/** + * Body mixin + * + * Ref: https://fetch.spec.whatwg.org/#body + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class Body { + constructor(body, { size = 0 } = {}) { + if (body === null) { + // Body is undefined or null + body = new Blob([]); + } else if (isURLSearchParameters(body)) { + // Body is a URLSearchParams + body = new Blob([body]); + } else if (ArrayBuffer.isView(body)) { + // Body is ArrayBufferView + body = new Blob([body]); + } else { + body = new Blob([JSON.stringify(body)]); + } + + this[BODY] = { + body, + boundary: null, + disturbed: false, + error: null, + }; + this.size = size; + } + + get body() { + return this[BODY].body; + } + + get bodyUsed() { + return this[BODY].disturbed; + } + + /** + * Decode response as ArrayBuffer + * + * @return Promise + */ + async arrayBuffer() { + const blob = await consumeBody(this[BODY]); + return blob.arrayBuffer(); + } + + /** + * Return raw response as Blob + * + * @return Promise + */ + async blob() { + return consumeBody(this[BODY]); + } + + /** + * Decode response as json + * + * @return Promise + */ + async json() { + const text = await this.text(); + return JSON.parse(text || '{}'); + } + + /** + * Decode response as text + * + * @return Promise + */ + async text() { + const blob = await consumeBody(this[BODY]); + return blob.text(); + } + + /** + * Decode response as buffer (non-spec api) + * + * @return Promise + */ +} + +// In browsers, all properties are enumerable. +Object.defineProperties(Body.prototype, { + body: { enumerable: true }, + bodyUsed: { enumerable: true }, + arrayBuffer: { enumerable: true }, + blob: { enumerable: true }, + json: { enumerable: true }, + text: { enumerable: true }, +}); + +/** + * Performs the operation "extract a `Content-Type` value from |object|" as + * specified in the specification: + * https://fetch.spec.whatwg.org/#concept-bodyinit-extract + * + * This function assumes that instance.body is present. + * + * @param {any} body Any options.body input + * @return {string | null} + */ +const extractContentType = (body, request) => { + // Body is null or undefined + if (body === null) { + return null; + } + + // Body is string + if (typeof body === 'string') { + return 'text/plain;charset=UTF-8'; + } + + // Body is a URLSearchParams + if (isURLSearchParameters(body)) { + return 'application/x-www-form-urlencoded;charset=UTF-8'; + } + + // Body is blob + if (body instanceof Blob) { + return body.type || null; + } + + if (body instanceof FormData) { + return `multipart/form-data; boundary=${request[BODY].boundary}`; + } + + // Body constructor defaults other things to string + return 'text/plain;charset=UTF-8'; +}; + +const redirectStatus = new Set([301, 302, 303, 307, 308]); + +/** + * Redirect code matching + * + * @param {number} code - Status code + * @return {boolean} + */ +const isRedirect = (code) => { + return redirectStatus.has(code); +}; + +/** + * Response.js + * + * Response class provides content decoding + */ +const Response = (globalThis.window && globalThis.window.Response) || class Null {}; +/** + * Response class + * + * @param Stream body Readable stream + * @param Object opts Response options + * @return Void + */ +class fakeResponse extends Body { + constructor(body = null, options = {}) { + super(body, options); + const status = options.status != null ? options.status : 200; + const headers = new Headers(options.headers); + if (body !== null && !headers.has('Content-Type')) { + const contentType = extractContentType(body); + if (contentType) { + headers.append('Content-Type', contentType); + } + } + this[RESPONSE] = { + type: 'default', + url: options.url, + status, + statusText: options.statusText || '', + headers, + counter: options.counter, + }; + } + + get type() { + return this[RESPONSE].type; + } + + get url() { + return this[RESPONSE].url || ''; + } + + get status() { + return this[RESPONSE].status; + } + + /** + * Convenience property representing if the request ended normally + */ + get ok() { + return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; + } + + get redirected() { + return this[RESPONSE].counter > 0; + } + + get statusText() { + return this[RESPONSE].statusText; + } + + get headers() { + return this[RESPONSE].headers; + } + + /** + * Clone this response + * + * @return Response + */ + clone() { + // Don't allow cloning a used body + if (this.bodyUsed) { + throw new Error('cannot clone body after it is used'); + } + return new Response(this.body, { + type: this.type, + url: this.url, + status: this.status, + statusText: this.statusText, + headers: this.headers, + ok: this.ok, + redirected: this.redirected, + size: this.size, + }); + } + + /** + * @param {string} url The URL that the new response is to originate from. + * @param {number} status An optional status code for the response (e.g., 302.) + * @return {Response} A Response object. + */ + static redirect(url, status = 302) { + if (!isRedirect(status)) { + throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); + } + + return new Response(null, { + headers: { + location: new URL(url).toString(), + }, + status, + }); + } + + static error() { + const response = new Response(null, { status: 0, statusText: '' }); + response[RESPONSE].type = 'error'; + return response; + } + + get [Symbol.toStringTag]() { + return 'Response'; + } +} + +Object.defineProperties(Response.prototype, { + type: { enumerable: true }, + url: { enumerable: true }, + status: { enumerable: true }, + ok: { enumerable: true }, + redirected: { enumerable: true }, + statusText: { enumerable: true }, + headers: { enumerable: true }, + clone: { enumerable: true }, +}); + +const window = globalThis.window || {}; +const realFetch = window && window.fetch; +function mockFetch() { + // 代理 fetch 的初始化函数 + if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { + window.fetch = fakeFetch; + window.fetch.$mock = true; + console.warn('fetch 已经被代理'); + } +} + +async function fakeFetch(url, options = {}) { + if (window.fetch.$mock === true) { + // 只有在 $mock 标记为 true 时才进行代理 + const result = find({ + url, + type: (options.method || 'get').toLowerCase(), + }); + if (result) { + const data = convert(result, {}); + console.warn('mock代理中'); + return new fakeResponse(data, options); + } + } + + console.warn('未使用 mockjs'); + return realFetch(url, options); +} + +var HTTP_STATUS_CODES = { + 100: 'Continue', + 101: 'Switching Protocols', + 200: 'OK', + 201: 'Created', + 202: 'Accepted', + 203: 'Non-Authoritative Information', + 204: 'No Content', + 205: 'Reset Content', + 206: 'Partial Content', + 300: 'Multiple Choice', + 301: 'Moved Permanently', + 302: 'Found', + 303: 'See Other', + 304: 'Not Modified', + 305: 'Use Proxy', + 307: 'Temporary Redirect', + 400: 'Bad Request', + 401: 'Unauthorized', + 402: 'Payment Required', + 403: 'Forbidden', + 404: 'Not Found', + 405: 'Method Not Allowed', + 406: 'Not Acceptable', + 407: 'Proxy Authentication Required', + 408: 'Request Timeout', + 409: 'Conflict', + 410: 'Gone', + 411: 'Length Required', + 412: 'Precondition Failed', + 413: 'Request Entity Too Large', + 414: 'Request-URI Too Long', + 415: 'Unsupported Media Type', + 416: 'Requested Range Not Satisfiable', + 417: 'Expectation Failed', + 422: 'Unprocessable Entity', + 500: 'Internal Server Error', + 501: 'Not Implemented', + 502: 'Bad Gateway', + 503: 'Service Unavailable', + 504: 'Gateway Timeout', + 505: 'HTTP Version Not Supported', +}; + +// 使用不完全覆盖的方式,使用继承方式继承所有的属性 + +let XMLHttpRequest; +let SEND; +let OPEN; +if (globalThis.window !== undefined) { + SEND = XMLHttpRequest.prototype.send; + OPEN = XMLHttpRequest.prototype.open; +} else { + XMLHttpRequest = class NULL {}; +} + +// ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 + +// 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, +// 也不可以在 XHR 实例上定义 +// 这样的话会导致无法接收到数据 +// 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 +const defineGetAndSet = function (what) { + const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; + Object.defineProperties( + what, + array.reduce((col, cur) => { + col[cur] = { + get() { + return this.$Mock[cur]; + }, + set: function (state) { + this.$Mock[cur] = state; + }, + }; + return col; + }, {}), + ); +}; +class MockXMLHttpRequest extends XMLHttpRequest { + constructor(...args) { + super(...args); + } + _send = SEND; + _open = OPEN; + open(method, url, async, username, password) { + // 不进行同步操作 + this._open(method, url, true, username, password); + this.$url = url; + this.$type = method.toLowerCase(); + } + send(body) { + if (this.$mock) { + this.$template = find({ url: this.$url, type: this.$type }); + if (this.$template) { + defineGetAndSet(this); + this.dispatchEvent(new Event('loadstart')); + + setTimeout(this.$done.bind(this), this.timeout || 100); + return null; + } + } + this._send(body); + } + get mock() { + return this.$mock; + } + set mock(value) { + if (typeof value === 'boolean') this.$mock = value; + } + $Mock = { + // 原生属性的 getter 和 setter + readyState: 0, + status: 200, + response: '', + responseText: '', + statusText: '', + }; + $type = 'get'; + $url = ''; + $mock = true; + $template = null; + + $done() { + this.readyState = this.HEADERS_RECEIVED; + this.dispatchEvent(new Event('readystatechange')); + this.readyState = this.LOADING; + this.dispatchEvent(new Event('readystatechange')); + + this.status = 200; + this.statusText = HTTP_STATUS_CODES[200]; + const data = convert(this.$template, {}); + this.response = data; + this.responseText = this.response; + this.readyState = this.DONE; + this.dispatchEvent(new Event('readystatechange')); + this.dispatchEvent(new Event('load')); + this.dispatchEvent(new Event('loadend')); + } +} + +// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 +typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 + +function mock(...args) { + let rurl; + let rtype = 'get'; + let template; + + switch (args.length) { + case 1: + // Mock.mock(template) + [template] = args; + return Handler.gen(template); + // 2 和 3 switch 穿透 + case 2: + // Mock.mock(rurl, template) + [rurl, template] = args; + break; + case 3: + // Mock.mock(rurl,rtype, template) + [rurl, rtype, template] = args; + break; + } + + // 拦截 XHR + if (!MockXMLHttpRequest) globalThis.XMLHttpRequest = MockXMLHttpRequest; + + _mocked.$set({ + rurl, + rtype, + template, + }); + return null; +} + +// global require, module, window + +/* ! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao/ +*/ + +const Mock = { + Handler, + Random, + Util, + XHR: MockXMLHttpRequest, + RE, + toJSONSchema, + valid, + heredoc: heredoc, + setup: function (settings) { + return MockXMLHttpRequest.setup(settings); + }, + _mocked, + mock, +}; + +Mock.version = '1.1.1-es6'; + +module.exports = Mock; diff --git a/dist/mock.esm.js b/dist/mock.esm.js index 08d5cefe..a4f94f57 100644 --- a/dist/mock.esm.js +++ b/dist/mock.esm.js @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function qt(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var $t={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys($t),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries($t).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date($n(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(""))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:$n,isNumber:Dn,random:hn,natural:Pn,int:$n,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return qt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:qt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?$n(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||$n(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=$r[this.offset]||($r[this.offset]=qr++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",qe='"+"',$e=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Sr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]);class xa extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new Response(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new Response(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new Response(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(Response.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ga=window&&window.fetch;async function ya(e,n={}){if(!0===window.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new xa(e,n)}}return console.warn("未使用 mockjs"),ga(e,n)}var va="OK";const wa=XMLHttpRequest.prototype.send,ka=XMLHttpRequest.prototype.open;class Aa extends XMLHttpRequest{constructor(...e){super(...e)}_send=wa;_open=ka;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=va;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}let Ca;"undefined"!=typeof window&&window.fetch&&!window.fetch.hasOwnProperty("$mock")&&(window.fetch=ya,window.fetch.$mock=!0,console.warn("fetch 已经被代理")),"undefined"!=typeof window&&(Ca=Aa);const Ma={Handler:ta,Random:sr,Util:_n,XHR:Ca,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ca.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ca&&window&&(window.XMLHttpRequest=Ca),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ma; +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function qt(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var $t={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys($t),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries($t).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date($n(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:$n,isNumber:Dn,random:hn,natural:Pn,int:$n,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return qt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:qt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?$n(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||$n(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=$r[this.offset]||($r[this.offset]=qr++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",qe='"+"',$e=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Sr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya&&ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";let Aa,Ca;void 0!==globalThis.window&&(Aa=XMLHttpRequest.prototype.send,Ca=XMLHttpRequest.prototype.open);class Ma extends XMLHttpRequest{constructor(...e){super(...e)}_send=Aa;_open=Ca;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const ja={Handler:ta,Random:sr,Util:_n,XHR:Ma,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ma.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma||(globalThis.XMLHttpRequest=Ma),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default ja; diff --git a/dist/mock.js b/dist/mock.js deleted file mode 100644 index ada16a9f..00000000 --- a/dist/mock.js +++ /dev/null @@ -1,15398 +0,0 @@ - -(function(l, r) { if (l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (window.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(window.document); -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** Built-in value references. */ -var Symbol$1 = root.Symbol; - -/** Used for built-in method references. */ -var objectProto$8 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString$1 = objectProto$8.toString; - -/** Built-in value references. */ -var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$7 = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto$7.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** Used as references for various `Number` constants. */ -var INFINITY$1 = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; -} - -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** Used for built-in method references. */ -var funcProto$1 = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$1 = funcProto$1.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$2 = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$2 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** Used for built-in method references. */ -var objectProto$5 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$1 = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$1 = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** Used for built-in method references. */ -var objectProto$4 = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** `Object#toString` result references. */ -var argsTag$1 = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; -} - -/** Used for built-in method references. */ -var objectProto$3 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/** Detect free variable `exports`. */ -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - -/** Built-in value references. */ -var Buffer = moduleExports$1 ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = -typedArrayTags[setTag] = typedArrayTags[stringTag$1] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** Used for built-in method references. */ -var objectProto$2 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -/** Used for built-in method references. */ -var objectProto$1 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ$1 = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -/** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ -var upperFirst = createCaseFirst('toUpperCase'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -/** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; -} - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity; -} - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); -} - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); -} - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; -} - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); -} - -/** Built-in method references without a dependency on `root`. */ -var freeParseFloat = parseFloat; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin$1 = Math.min, - nativeRandom = Math.random; - -/** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ -function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin$1(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = createRange(); - -/** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ -function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; -} - -/** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ -function baseSample(collection) { - return arraySample(values$1(collection)); -} - -/** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ -function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); -} - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -/** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); -} - -/** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function baseSampleSize(collection, n) { - var array = values$1(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); -} - -/** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ -function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); -} - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); -} - -/** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ -function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Invokes the iteratee `n` times, returning an array of the results of - * each invocation. The iteratee is invoked with one argument; (index). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of results. - * @example - * - * _.times(3, String); - * // => ['0', '1', '2'] - * - * _.times(4, _.constant(0)); - * // => [0, 0, 0, 0] - */ -function times(n, iteratee) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER) { - return []; - } - var index = MAX_ARRAY_LENGTH, - length = nativeMin(n, MAX_ARRAY_LENGTH); - - iteratee = castFunction(iteratee); - n -= MAX_ARRAY_LENGTH; - - var result = baseTimes(length, iteratee); - while (++index < n) { - iteratee(index); - } - return result; -} - -// 使用 lodash 提供的方式 -function type(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); -} - -function isObjectOrArray(value) { - return isObject(value) || isArray(value); -} - -function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); -} - -// import { isObject, isArray } from "./type.js"; -function extend(...args) { - return assignIn(this, ...args); -} - -function each(obj, iterator, context) { - // each - let i; - let key; - if (type(obj) === 'number') { - // 表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } -} - -/* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 -*/ -function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '') - .replace(/[\s\xA0]+$/, ''); // .trim() -} - -/* - ## Utilities -*/ -function keys(obj) { - return Object.keys(obj); -} -function values(obj) { - return Object.values(obj); -} -function noop() {} - -var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc -}); - -const isNumber = function (el) { - return typeof el === 'number' && !isNaN(el); -}; -const numberGate = function (input) { - if (isNumber(input)) return input; - const res = parseInt(input); - return isNumber(res) ? res : undefined; -}; -// 返回一个随机的整数。 -const integer = function (min, max) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - return random(min, max, false); -}; -const natural = function (min, max) { - return Math.abs(integer(min, max)); -}; - -const float = function (min, max, dmin, dmax) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - dmin = numberGate(dmin) || 1; - dmax = numberGate(dmax) || 17; - if (dmin < 1) dmin = 1; - if (dmax > 17) dmax = 17; - const dcount = random(dmin, dmax, false); - return parseFloat(random(min, max, true).toFixed(dcount)); -}; - -const boolean$1 = function (min, max, cur = false) { - // ! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; -}; - -const pools = { - lower: 'abcdefghijklmnopqrstuvwxyz', - upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - number: '0123456789', - symbol: '!@#$%^&*()[]', -}; -pools.alpha = pools.lower + pools.upper; -pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - -const character = function (pool = 'default') { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return sample(pool); -}; - -const string$1 = function (...args) { - let len; - let pool; - let min; - let max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof args[0] === 'string') { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return times(len, () => character(pool)).join(''); -}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); -}; - -var simpleSwizzle = createCommonjsModule(function (module) { - - - -var concat = Array.prototype.concat; -var slice = Array.prototype.slice; - -var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; -}; - -swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; -}; -}); - -var colorString = createCommonjsModule(function (module) { -/* MIT license */ - - - -var reverseNames = {}; - -// create a list of reverse color names -for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } -} - -var cs = module.exports = { - to: {}, - get: {} -}; - -cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; -}; - -cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; -}; - -cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; -}; - -cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; -}; - -cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); -}; - -cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; -}; - -cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; -}; - -cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; -}; - -// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax -// (hwb have alpha optional & 1 is default value) -cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; -}; - -cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; -}; - -// helpers -function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); -} - -function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; -} -}); -colorString.to; -colorString.get; - -var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var conversions = createCommonjsModule(function (module) { -/* MIT license */ - - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -var reverseKeywords = {}; -for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } -} - -var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -// hide .channels and .labels properties -for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } -} - -convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -/** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ -function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); -} - -convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return colorName[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; -}); -conversions.rgb; -conversions.hsl; -conversions.hsv; -conversions.hwb; -conversions.cmyk; -conversions.xyz; -conversions.lab; -conversions.lch; -conversions.hex; -conversions.keyword; -conversions.ansi16; -conversions.ansi256; -conversions.hcg; -conversions.apple; -conversions.gray; - -/* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - -var convert$1 = {}; - -var models = Object.keys(conversions); - -function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -var colorConvert = convert$1; - -var _slice = [].slice; - -var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' -]; - -var hashedModelKeys = {}; -Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; -}); - -var limiters = {}; - -function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } -} - -Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } -}; - -// model conversion methods and static constructors -Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; -}); - -function roundTo(num, places) { - return Number(num.toFixed(places)); -} - -function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; -} - -function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; -} - -function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; -} - -function assertArray(val) { - return Array.isArray(val) ? val : [val]; -} - -function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; -} - -var color$1 = Color; - -/* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) -*/ -var DICT$1 = { - // name value nicer - navy: { - value: '#000080', - nicer: '#001F3F', - }, - blue: { - value: '#0000ff', - nicer: '#0074D9', - }, - aqua: { - value: '#00ffff', - nicer: '#7FDBFF', - }, - teal: { - value: '#008080', - nicer: '#39CCCC', - }, - olive: { - value: '#008000', - nicer: '#3D9970', - }, - green: { - value: '#008000', - nicer: '#2ECC40', - }, - lime: { - value: '#00ff00', - nicer: '#01FF70', - }, - yellow: { - value: '#ffff00', - nicer: '#FFDC00', - }, - orange: { - value: '#ffa500', - nicer: '#FF851B', - }, - red: { - value: '#ff0000', - nicer: '#FF4136', - }, - maroon: { - value: '#800000', - nicer: '#85144B', - }, - fuchsia: { - value: '#ff00ff', - nicer: '#F012BE', - }, - purple: { - value: '#800080', - nicer: '#B10DC9', - }, - silver: { - value: '#c0c0c0', - nicer: '#DDDDDD', - }, - gray: { - value: '#808080', - nicer: '#AAAAAA', - }, - black: { - value: '#000000', - nicer: '#111111', - }, - white: { - value: '#FFFFFF', - nicer: '#FFFFFF', - }, -}; - -/* - ## Helpers -*/ - -const upper = function (str) { - return (str + '').toUpperCase(); -}; - -const lower = function (str) { - return (str + '').toLowerCase(); -}; - -// 从数组中随机选取一个元素,并返回。 -// 更改 pick 函数 , 函数不进行重载 -const pick = function (arr, ...args) { - let min; - let max; - let count; - switch (args.length) { - case 0: - return sample(arr); - case 1: - [count] = args; - return sampleSize(arr, count); - case 2: - [min, max] = args; - return sampleSize(arr, random(min, max)); - } -}; -/* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. -*/ -const shuffle = function (arr, min, max) { - const result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(min, max); - } -}; -/* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ -const Cache = {}; -const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - const options = order.options; - const templatePath = options.context.templatePath.join('.'); - - const cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; -}; - -var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } -]; - -/* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() -*/ - -let _hue; -function _goldenRatioColor(saturation, value) { - const _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== 'number') saturation = 0.5; - if (typeof value !== 'number') value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); -} - -// 中国色 数据来自于 http://zhongguose.com - -// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 -function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; -} - -// #DAC0DE -function hex() { - const hsv = _goldenRatioColor(); - return hsv.hex(); -} - -// rgb(128,255,255) -function rgb() { - const hsv = _goldenRatioColor(); - return hsv.hsv().string(); -} -// rgba(128,255,255,0.3) -function rgba() { - const hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); -} - -// hsl(300,80%,90%) -function hsl() { - const hsv = _goldenRatioColor(); - return hsv.hsl().string(); -} - -var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] -}; -var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" -]; -var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" -]; -var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" -]; -var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 -}; - -/* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) -*/ -const { firstName, lastName, cfirstName, clastName } = Name; - -// 随机生成一个常见的英文名。 -function first() { - const names = firstName.male.concat(); - return pick(names); -} - -// 随机生成一个常见的英文姓。 -function last() { - return pick(lastName); -} - -// 随机生成一个常见的英文姓名。 -function name(middle) { - middle = middle ? ` ${first()} ` : ' '; - return `${first()}${middle}${last()}`; -} - -/* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) -*/ -function cfirst() { - return pick(cfirstName); -} /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) -*/ -function clast() { - return pick(clastName); -} -// 随机生成一个常见的中文姓名。 -function cname() { - return cfirst() + clast(); -} - -// Unique ID creation requires a high quality random # generator. In the browser we therefore -// require the crypto API and do not support built-in fallback to lower quality random number -// generators (like Math.random()). -var getRandomValues; -var rnds8 = new Uint8Array(16); -function rng() { - // lazy load so that environments that need to polyfill have a chance to do so - if (!getRandomValues) { - // getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also, - // find the complete implementation of crypto (msCrypto) on IE11. - getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto); - - if (!getRandomValues) { - throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'); - } - } - - return getRandomValues(rnds8); -} - -var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - -function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); -} - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -var byteToHex = []; - -for (var i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr) { - var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -function v4(options, buf, offset) { - options = options || {}; - var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (var i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); -} - -var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" -}; - -/* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 -*/ - -// id pid/parentId name children - -// 将扁平数组转化为树状 -function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - const { mapped, result } = all; - const { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - // 父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - }, - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; -} -const ids = Object.keys(DICT); - -// 转化数组内对象的表现形式 -const fixed = Object.entries(DICT).map(([id, value]) => { - let pid = - id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + '0000'; - } - return { - id, - pid, - name: value, - }; -}); - -const DICT_FIXED = createTree(fixed); - -var _patternLetters = { - yyyy: 'getFullYear', - yy: function (date) { - return ('' + date.getFullYear()).slice(2); - }, - y: 'yy', - - MM: function (date) { - const m = date.getMonth() + 1; - return m < 10 ? '0' + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - const d = date.getDate(); - return d < 10 ? '0' + d : d; - }, - d: 'getDate', - - HH: function (date) { - const h = date.getHours(); - return h < 10 ? '0' + h : h; - }, - H: 'getHours', - hh: function (date) { - const h = date.getHours() % 12; - return h < 10 ? '0' + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - const m = date.getMinutes(); - return m < 10 ? '0' + m : m; - }, - m: 'getMinutes', - - ss: function (date) { - const s = date.getSeconds(); - return s < 10 ? '0' + s : s; - }, - s: 'getSeconds', - - SS: function (date) { - const ms = date.getMilliseconds(); - return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; - }, - S: 'getMilliseconds', - - A: function (date) { - return date.getHours() < 12 ? 'AM' : 'PM'; - }, - a: function (date) { - return date.getHours() < 12 ? 'am' : 'pm'; - }, - T: 'getTime', -}; - -/* eslint-disable no-fallthrough*/ - -const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); - -// 返回一个随机的日期字符串。 -function date(format = 'yyyy-MM-dd') { - return _formatDate(_randomDate(), format); -} -function datetime(format = 'yyyy-MM-dd HH:mm:ss') { - return date(format); -} -function time(format = 'HH:mm:ss') { - return date(format); -} -function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ''; - } - } - unit = (unit || '').toLowerCase(); - format = format || 'yyyy-MM-dd HH:mm:ss'; - - const date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case 'year': - date.setMonth(0); - case 'month': - date.setDate(1); - case 'week': - case 'day': - date.setHours(0); - case 'hour': - date.setMinutes(0); - case 'minute': - date.setSeconds(0); - case 'second': - date.setMilliseconds(0); - } - switch (unit) { - case 'week': - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); -} - -function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - const targetPattern = _patternLetters[flag]; - return typeof targetPattern === 'function' - ? targetPattern(date) - : targetPattern in _patternLetters - ? creatNewSubString($0, targetPattern) - : date[targetPattern](); - }); -} - -function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); -} - -function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); -} - -/* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) -*/ -function id() { - let id; - let sum = 0; - const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; - const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; - - id = pick(DICT_FIXED).id + date('yyyyMMdd') + string$1('number', 3); - - for (let i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; -} - -/* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ -function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); -} - -/* - ## Miscellaneous -*/ -/* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 -*/ -let key = 0; -const increment = function (step) { - return (key += +step || 1); -}; -const inc = increment; - -// Dice -function d4() { - return natural(1, 4); -} -function d6() { - return natural(1, 6); -} -function d8() { - return natural(1, 8); -} -function d12() { - return natural(1, 12); -} -function d20() { - return natural(1, 20); -} -function d100() { - return natural(1, 100); -} - -// 随机生成一个句子,第一个单词的首字母大写。 -function sentence(min = 12, max = 18) { - const len = random(min, max); - const string = times(len, () => word()).join(' '); - return capitalize(string) + '.'; -} - -// 随机生成一个单词。 -function word(min = 3, max = 10) { - const len = random(min, max); - return times(len, () => character('lower')).join(''); -} - -// 随机生成一段文本。 -function paragraph(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => sentence()).join('\n'); -} - -// 随机生成一句标题,其中每个单词的首字母大写。 -function title(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => capitalize(word())).join(''); -} - -function cparagraph(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => csentence()).join('\n'); -} - -// 随机生成一个中文句子。 -function csentence(min = 12, max = 18) { - const len = random(min, max); - return times(len, () => cword()).join('') + '。'; -} -// 随机生成一句中文标题。 -function ctitle(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => cword()).join(''); -} -// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm -const DICT_HANZI = - '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; -// 随机生成一个或多个汉字。 -function cword(...args) { - let len = 1; - let pool = DICT_HANZI; - let min; - let max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === 'string') { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === 'string') { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - - return sampleSize(pool, len).join(''); -} - -// 协议簇 -const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); -// 域名后缀 -const tlds = ( - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' -).split(' '); - -/* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers -*/ -function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; -} - -// 随机生成一个 URL 协议。 -function protocol() { - return pick(protocols); -} -// 随机生成一个域名。 -function domain(Tld) { - return `${word()}.${Tld || tld()}`; -} -/* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) -*/ -function tld() { - // Top Level Domain - return pick(tlds); -} - -// 随机生成一个邮件地址。 -function email(domain) { - return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; -} -// 随机生成一个 IP 地址。 -function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join('.'); -} - -var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" -]; -var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" -]; -var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" -]; -var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 -}; - -var Addvocate = "#ff6138"; -var Adobe = "#ff0000"; -var Aim = "#fcd20b"; -var Amazon = "#e47911"; -var Android = "#a4c639"; -var AOL = "#0060a3"; -var Atlassian = "#003366"; -var Behance = "#053eff"; -var bitly = "#ee6123"; -var Blogger = "#fc4f08"; -var Boeing = "#0039a6"; -var Carbonmade = "#613854"; -var Cheddar = "#ff7243"; -var Delicious = "#205cc0"; -var Dell = "#3287c1"; -var Designmoo = "#e54a4f"; -var Deviantart = "#4e6252"; -var Devour = "#fd0001"; -var DEWALT = "#febd17"; -var Dribbble = "#ea4c89"; -var Dropbox = "#3d9ae8"; -var Drupal = "#0c76ab"; -var Dunked = "#2a323a"; -var eBay = "#89c507"; -var Ember = "#f05e1b"; -var Engadget = "#00bdf6"; -var Envato = "#528036"; -var Etsy = "#eb6d20"; -var Evernote = "#5ba525"; -var Facebook = "#3b5998"; -var Firefox = "#e66000"; -var Forrst = "#5b9a68"; -var Foursquare = "#25a0ca"; -var Garmin = "#007cc3"; -var GetGlue = "#2d75a2"; -var Gimmebar = "#f70078"; -var GitHub = "#171515"; -var Grooveshark = "#f77f00"; -var Groupon = "#82b548"; -var HelloWallet = "#0085ca"; -var HootSuite = "#003366"; -var Houzz = "#73ba37"; -var HTML5 = "#ec6231"; -var IKEA = "#ffcc33"; -var IMDb = "#f3ce13"; -var Instagram = "#3f729b"; -var Intel = "#0071c5"; -var Intuit = "#365ebf"; -var Kickstarter = "#76cc1e"; -var kippt = "#e03500"; -var Kodery = "#00af81"; -var LastFM = "#c3000d"; -var LinkedIn = "#0e76a8"; -var Livestream = "#cf0005"; -var Lumo = "#576396"; -var Mixpanel = "#a086d3"; -var Meetup = "#e51937"; -var Nokia = "#183693"; -var NVIDIA = "#76b900"; -var Opera = "#cc0f16"; -var Path = "#e41f11"; -var Pinboard = "#0000e6"; -var Pinterest = "#c8232c"; -var PlayStation = "#665cbe"; -var Pocket = "#ee4056"; -var Prezi = "#318bff"; -var Pusha = "#0f71b4"; -var Quora = "#a82400"; -var Rdio = "#008fd5"; -var Readability = "#9c0000"; -var Resource = "#7eb400"; -var Rockpack = "#0ba6ab"; -var Roon = "#62b0d9"; -var RSS = "#ee802f"; -var Salesforce = "#1798c1"; -var Samsung = "#0c4da2"; -var Shopify = "#96bf48"; -var Skype = "#00aff0"; -var Snagajob = "#f47a20"; -var Softonic = "#008ace"; -var SoundCloud = "#ff7700"; -var Spotify = "#81b71a"; -var Sprint = "#fee100"; -var Squarespace = "#121212"; -var StackOverflow = "#ef8236"; -var Staples = "#cc0000"; -var Stripe = "#008cdd"; -var StudyBlue = "#00afe1"; -var StumbleUpon = "#f74425"; -var Technorati = "#40a800"; -var Treehouse = "#5cb868"; -var Trulia = "#5eab1f"; -var Tumblr = "#34526f"; -var Twitter = "#00acee"; -var TYPO3 = "#ff8700"; -var Ubuntu = "#dd4814"; -var Ustream = "#3388ff"; -var Verizon = "#ef1d1d"; -var Vimeo = "#86c9ef"; -var Vine = "#00a478"; -var Virb = "#06afd8"; -var Wooga = "#5b009c"; -var Wunderlist = "#2b88d9"; -var XBOX = "#9bc848"; -var XING = "#126567"; -var Yandex = "#ffcc00"; -var Yelp = "#c41200"; -var YouTube = "#c4302b"; -var Zalongo = "#5498dc"; -var Zendesk = "#78a300"; -var Zerply = "#9dcc7a"; -var Zootool = "#5e8b1d"; -var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool -}; - -/* eslint-disable no-redeclare*/ -const { _adSize, _screenSize, _videoSize } = size; -const _brandNames = Object.keys(_brandColors); - -/* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 -*/ -function image(...args) { - let size; - let background; - let foreground; - let format; - let text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ''); - background = (background || hex()).replace(/^#/, ''); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ - format ? '.' + format : '' - }${text ? '&text=' + text : ''}`; -} -/* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, -*/ -function dataImage(size, text) { - let canvas; - if (typeof document !== 'undefined') { - canvas = document.createElement('canvas'); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - const Canvas = module.require('canvas'); - canvas = new Canvas(); - } - - const ctx = canvas && canvas.getContext && canvas.getContext('2d'); - if (!canvas || !ctx) return ''; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split('x'); - - const width = parseInt(size[0], 10); - const height = parseInt(size[1], 10); - const background = _brandColors[pick(_brandNames)]; - const foreground = '#FFF'; - const textHeight = 14; - const font = 'sans-serif'; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = 'bold ' + textHeight + 'px ' + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL('image/png'); -} - -/* - ## Address -*/ -const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; - -// 随机生成一个大区。 -function region() { - return pick(REGION); -} -// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 -function province() { - return pick(DICT_FIXED).name; -} -// 随机生成一个(中国)市。 -function city(prefix) { - const province = pick(DICT_FIXED); - const city = pick(province.children); - return prefix ? [province.name, city.name].join(' ') : city.name; -} -// 随机生成一个(中国)县。 -function county(prefix) { - const province = pick(DICT_FIXED); - const city = pick(province.children); - const county = pick(city.children) || { - name: '-', - }; - return prefix ? [province.name, city.name, county.name].join(' ') : county.name; -} -// 随机生成一个邮政编码(六位数字)。 -function zip(len) { - let zip = ''; - for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; -} - -// 用于生成 Blob 和 File 型数据的工具 -function prepare(anyData) { - let prepared; - switch (type(anyData)) { - case 'array': - prepared = anyData; - break; - default: - prepared = [anyData]; - } - return prepared; -} -function genFile(anyData) { - return new File(prepare(anyData), word()); -} -function genBlob(anyData) { - return new Blob(prepare(anyData)); -} - -/* - ## Mock.Random - - 工具类,用于生成各种随机数据。 -*/ - -var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - float: float, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip, - genFile: genFile, - genBlob: genBlob -}); - -/* - ## Constant - - 常量集合。 - */ -/* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 -*/ -var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ -}; - -/* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ -/* jshint -W041 */ -function parser$1(name = '') { - if (typeof name !== 'string') name = name + ''; - const parameters = name.match(Constant.RE_KEY); - - const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - const min = range && range[1] && parseInt(range[1], 10); // || 1 - const max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - const result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - const isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; -} - -function array({ - name, - rule: { min, max, parameters, count }, - template, - context: { path, templatePath, root, templateRoot }, -}) { - let result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - }); - }); - } - } - } - return result; -} - -function boolean({ rule: { max, min, parameters }, template = '' }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; -} - -function _function(options) { - const { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); -} - -function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { - let result; - if (decimal) { - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { - result = float(min, max, dmin, dmax); // 内置字符串转数字 - }); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; -} - -function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - const result = {}; - let keys = []; - const fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - const parsedKey = key.replace(Constant.RE_KEY, '$1'); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (const key in template) { - (typeof template[key] === 'function' ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - const parsedKey = key.replace(Constant.RE_KEY, '$1'); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - const inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type(template[key]) === 'number') { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; -} - -/*eslint-disable*/ - -function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); -} - -function Alternate(n, l) { - Token.call(this, 'alternate'), (this.left = n), (this.right = l); -} - -function Match(n) { - Token.call(this, 'match'), (this.body = n.filter(Boolean)); -} - -function Group(n, l) { - Token.call(this, n), (this.body = l); -} - -function CaptureGroup(n) { - Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); -} - -function Quantified(n, l) { - Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); -} - -function Quantifier(n, l) { - Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); -} - -function CharSet(n, l) { - Token.call(this, 'charset'), (this.invert = n), (this.body = l); -} - -function CharacterRange(n, l) { - Token.call(this, 'range'), (this.start = n), (this.end = l); -} - -function Literal(n) { - Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); -} - -function Unicode(n) { - Token.call(this, 'unicode'), (this.code = n.toUpperCase()); -} - -function Hex(n) { - Token.call(this, 'hex'), (this.code = n.toUpperCase()); -} - -function Octal(n) { - Token.call(this, 'octal'), (this.code = n.toUpperCase()); -} - -function BackReference(n) { - Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); -} - -function ControlCharacter(n) { - Token.call(this, 'control-character'), (this.code = n.toUpperCase()); -} - -var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, '\\\\') - .replace(/"/g, '\\"') - .replace(/\x08/g, '\\b') - .replace(/\t/g, '\\t') - .replace(/\n/g, '\\n') - .replace(/\f/g, '\\f') - .replace(/\r/g, '\\r') - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return '\\x0' + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return '\\x' + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return '\\u0' + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return '\\u' + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = 'end of input'; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; - } - (this.expected = n), - (this.found = l), - (this.offset = u), - (this.line = t), - (this.column = r), - (this.name = 'SyntaxError'), - (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - '\n' === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : '\r' === e || '\u2028' === e || '\u2029' === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r - ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) - : ((qt = t), (t = il)), - null === t && (t = al), - null !== t - ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) - t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), - null === r && (r = al), - null !== r - ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return ( - (l = qt), - 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), - null !== u && ((Lt = l), (u = wl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function s() { - var l, u; - return ( - (l = qt), - 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), - null !== u && ((Lt = l), (u = gl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function h() { - var n, l, u; - return ( - (n = qt), - (l = a()), - null !== l - ? ((u = d()), - null !== u - ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)), - n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l - ? ((u = k()), - null === u && (u = al), - null !== u - ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return ( - (n = v()), - null === n && - ((n = w()), - null === n && - ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), - n - ); - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) - ? ((c = Fl), qt++) - : ((c = null), 0 === Wt && e(Ql)), - null !== c - ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r - ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r - ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return ( - (l = qt), - 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), - null !== u && ((Lt = l), (u = ql())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function g() { - var l, u; - return ( - (l = qt), - 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), - null !== u && ((Lt = l), (u = Dl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function b() { - var l, u; - return ( - (l = qt), - 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), - null !== u && ((Lt = l), (u = Wl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if ( - ((l = qt), - (u = []), - zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), - null !== t) - ) - for (; null !== t; ) - u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r - ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return ( - (n = qt), - (l = c()), - null !== l && ((Lt = n), (l = Yl(l))), - null === l ? ((qt = n), (n = l)) : (n = l), - n - ); - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ( - (Wt++, - (l = qt), - 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), - null !== u) - ) - if ( - (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), - null === t && (t = al), - null !== t) - ) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) - r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o - ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t - ? ((r = U()), - null !== r - ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), - Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && - ((n = nl()), - null === n && - ((n = ll()), - null === n && - ((n = ul()), - null === n && - (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return ( - (l = qt), - 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), - null !== u && ((Lt = l), (u = xu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), - null === n && - ((n = ll()), - null === n && - ((n = ul()), - null === n && - (n = - tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), - null !== u && ((Lt = l), (u = Su())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function M() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), - null !== u && ((Lt = l), (u = Uu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function D() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), - null !== u && ((Lt = l), (u = Bu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function H() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), - null !== u && ((Lt = l), (u = qu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function O() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), - null !== u && ((Lt = l), (u = Du())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function W() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), - null !== u && ((Lt = l), (u = Wu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function z() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), - null !== u && ((Lt = l), (u = Ju())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function I() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), - null !== u && ((Lt = l), (u = Pu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function J() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), - null !== u && ((Lt = l), (u = Yu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function K() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), - null !== u && ((Lt = l), (u = nt())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function N() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), - null !== u && ((Lt = l), (u = tt())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function P() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), - null !== u && ((Lt = l), (u = ot())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function V() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), - null !== u && ((Lt = l), (u = at())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function X() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), - null !== u && ((Lt = l), (u = ht())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t - ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t - ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), - null !== u) - ) { - if ( - ((t = []), - yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t - ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), - null !== u) - ) { - if ( - ((t = []), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t - ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), - null !== u) - ) { - if ( - ((t = []), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t - ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), - null !== u && ((Lt = l), (u = $t())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t - ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = '', - fl = '|', - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = '^', - vl = '"^"', - wl = function () { - return new Token('start'); - }, - Al = '$', - Cl = '"$"', - gl = function () { - return new Token('end'); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = 'Quantifier', - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = '{', - yl = '"{"', - ml = ',', - Rl = '","', - Fl = '}', - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ',}', - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = '+', - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = '*', - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = '?', - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = '[0-9]', - Jl = function (n) { - return +n.join(''); - }, - Kl = '(', - Nl = '"("', - Pl = ')', - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = '?:', - _l = '"?:"', - nu = function (n) { - return new Group('non-capture-group', n); - }, - lu = '?=', - uu = '"?="', - tu = function (n) { - return new Group('positive-lookahead', n); - }, - ru = '?!', - eu = '"?!"', - ou = function (n) { - return new Group('negative-lookahead', n); - }, - cu = 'CharacterSet', - iu = '[', - au = '"["', - fu = ']', - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = 'CharacterRange', - pu = '-', - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = 'Character', - Cu = /^[^\\\]]/, - gu = '[^\\\\\\]]', - bu = function (n) { - return new Literal(n); - }, - ku = '.', - Tu = '"."', - xu = function () { - return new Token('any-character'); - }, - yu = 'Literal', - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = '[^|\\\\\\/.[()?+*$\\^]', - Fu = '\\b', - Qu = '"\\\\b"', - Su = function () { - return new Token('backspace'); - }, - Uu = function () { - return new Token('word-boundary'); - }, - Eu = '\\B', - Gu = '"\\\\B"', - Bu = function () { - return new Token('non-word-boundary'); - }, - ju = '\\d', - $u = '"\\\\d"', - qu = function () { - return new Token('digit'); - }, - Lu = '\\D', - Mu = '"\\\\D"', - Du = function () { - return new Token('non-digit'); - }, - Hu = '\\f', - Ou = '"\\\\f"', - Wu = function () { - return new Token('form-feed'); - }, - zu = '\\n', - Iu = '"\\\\n"', - Ju = function () { - return new Token('line-feed'); - }, - Ku = '\\r', - Nu = '"\\\\r"', - Pu = function () { - return new Token('carriage-return'); - }, - Vu = '\\s', - Xu = '"\\\\s"', - Yu = function () { - return new Token('white-space'); - }, - Zu = '\\S', - _u = '"\\\\S"', - nt = function () { - return new Token('non-white-space'); - }, - lt = '\\t', - ut = '"\\\\t"', - tt = function () { - return new Token('tab'); - }, - rt = '\\v', - et = '"\\\\v"', - ot = function () { - return new Token('vertical-tab'); - }, - ct = '\\w', - it = '"\\\\w"', - at = function () { - return new Token('word'); - }, - ft = '\\W', - st = '"\\\\W"', - ht = function () { - return new Token('non-word'); - }, - dt = '\\c', - pt = '"\\\\c"', - vt = 'any character', - wt = function (n) { - return new ControlCharacter(n); - }, - At = '\\', - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = '[1-9]', - kt = function (n) { - return new BackReference(n); - }, - Tt = '\\0', - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = '[0-7]', - Rt = function (n) { - return new Octal(n.join('')); - }, - Ft = '\\x', - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = '[0-9a-fA-F]', - Et = function (n) { - return new Hex(n.join('')); - }, - Gt = '\\u', - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join('')); - }, - $t = function () { - return new Token('null-character'); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ('startRule' in el) { - if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw ( - (o(Ot), - (Lt = Math.max(qt, Ht)), - new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) - ); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - -/*eslint-disable*/ -/* - - */ -const Handler$1 = { - extend: extend, -}; - -// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart -/* let ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] -}*/ - -// ASCII printable code chart -// let LOWER = 'abcdefghijklmnopqrstuvwxyz' -// let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -// let NUMBER = '0123456789' -// let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' -const LOWER = ascii(97, 122); -const UPPER = ascii(65, 90); -const NUMBER = ascii(48, 57); -const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) -const PRINTABLE = ascii(32, 126); -const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; -const CHARACTER_CLASSES = { - '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) - '\\W': OTHER.replace('_', ''), - '\\s': SPACE, - '\\S': (function () { - let result = PRINTABLE; - for (let i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ''); - } - return result; - })(), - '\\d': NUMBER, - '\\D': LOWER + UPPER + OTHER, -}; - -// 从 from 到 to 包含两个端点的字符串 -function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); -} - -// let ast = RegExpParser.parse(regexp.source) -Handler$1.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); -}; - -Handler$1.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case 'start': - case 'end': - return ''; - case 'any-character': - return character(); - case 'backspace': - return ''; - case 'word-boundary': // TODO - return ''; - case 'non-word-boundary': // TODO - break; - case 'digit': - return pick(NUMBER.split('')); - case 'non-digit': - return pick((LOWER + UPPER + OTHER).split('')); - case 'form-feed': - break; - case 'line-feed': - return node.body || node.text; - case 'carriage-return': - break; - case 'white-space': - return pick(SPACE.split('')); - case 'non-white-space': - return pick((LOWER + UPPER + NUMBER).split('')); - case 'tab': - break; - case 'vertical-tab': - break; - case 'word': // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split('')); - case 'non-word': // \W [^a-zA-Z0-9] - return pick(OTHER.replace('_', '').split('')); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ''; - // node.body [] - for (let i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - 'capture-group': function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - 'non-capture-group': function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - 'positive-lookahead': function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - 'negative-lookahead': function (node, result, cache) { - // node.body - return ''; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ''; - // node.quantifier {} - const count = this.quantifier(node.quantifier); - // node.body {} - for (let i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - const min = Math.max(node.min, 0); - const max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this['invert-charset'](node, result, cache); - - // node.body [] - const literal = pick(node.body); - return this.gen(literal, result, cache); - }, - 'invert-charset': function (node, result, cache) { - let pool = PRINTABLE; - for (let i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case 'literal': { - pool = pool.replace(item.body, ''); - break; - } - case 'range': - const min = this.gen(item.start, result, cache).charCodeAt(); - const max = this.gen(item.end, result, cache).charCodeAt(); - for (let ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ''); - } - /* falls through */ - default: - const characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (let iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ''); - } - } - } - } - return pick(pool.split('')); - }, - range: function (node, result, cache) { - // node.start, node.end - const min = this.gen(node.start, result, cache).charCodeAt(); - const max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - 'back-reference': function (node, result, cache) { - return cache[node.code] || ''; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); - const CONTROL_CHARACTER_UNICODE = - '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( - ' ', - ); - const map = {}; - for (let i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - 'control-character': function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, -}); - -var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$1 -}); - -function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - const Source = count === undefined ? source : Array(count).fill(source).join(''); - return Handler$1.gen(parser.parse(Source)); -} - -function getValueByKeyPath(key, options) { - const originalKey = key; - const keyPathParts = splitPathToArray(key); - let absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === '/') { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - let currentContext = options.context.root; - let templateCurrentContext = options.context.templateRoot; - for (let i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === 'object' && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) { - console.log(err); - } - - return '@' + keyPathParts.join('/'); -} -// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js -function normalizePath(pathParts) { - const newPathParts = []; - for (let i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case '..': - newPathParts.pop(); - break; - case '.': - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; -} -function splitPathToArray(path) { - let parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; -} - -// 占位符即是字符串函数的意思 -function placeholder(Placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(''); - let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); - - const lkey = key && key.toLowerCase(); - const pathParts = splitPathToArray(key); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === 'object' && - key in templateContext && - Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return Placeholder; - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - if (params) { - params = params.split(/\s*,\s*/).map((param) => { - // 递归解析参数中的占位符 - Constant.RE_PLACEHOLDER.exec(''); - if (Constant.RE_PLACEHOLDER.test(param)) { - return placeholder(param, obj, templateContext, options); - } - return param; - }); - } else { - params = []; - } - - const handle = Random[key] || Random[lkey]; - switch (type(handle)) { - case 'array': { - // 自动从数组中取一个,例如 @areas - return pick(handle); - } - case 'function': { - // 执行占位符方法(大多数情况) - handle.options = options; - const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - } -} - -function string(options) { - const { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = '', - } = options; - let result = ''; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(''); - - // 'email|1-10': '@EMAIL, ', - const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - const phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - if (isNumeric(phed)) { - result = parseFloat(phed, 10); - return true; - } - if (/^(true|false)$/.test(phed)) { - result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 - return true; - } // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; -} - -var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string -}); - -let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 -function gen(template, name = '', context = {}) { - const newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - const type$1 = type(template); - const func = typeset[type$1]; - let data; - - if (func) { - data = func({ - // 属性值类型 - type: type$1, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; -} - -/* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - -*/ -/* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot -*/ -const Handler = { - gen, - extend, -}; -Handler.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, -}); -Handler.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, -}); - -/* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - -function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - const result = { - name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, - template, - type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? 'ROOT' : result.name); - - switch (result.type) { - case 'array': - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case 'object': - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; -} - -/*eslint-disable*/ - -function valid(template, data) { - const schema = toJSONSchema(template); - const result = Diff.diff(schema, data); - for (let i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; -} - -/* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 -*/ -const Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - const result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - const length = result.length; - - Assert.equal('name', schema.path, name + '', schema.name + '', result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - const length = result.length; - - switch (schema.type) { - case 'string': - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case 'array': - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case 'function': - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal('type', schema.path, type(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - const length = result.length; - - const rule = schema.rule; - const templateType = schema.type; - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result); - return result.length === length; - case 'string': - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal('value', schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - let actualRepeatCount; - switch (templateType) { - case 'number': - const parts = (data + '').split('.'); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case 'boolean': - break; - - case 'string': - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - const length = result.length; - - const rule = schema.rule; - const keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - 'properties length', - schema.path, - keys$1.length, - Math.min(rule.min, rule.max), - result, - ); - Assert.lessThanOrEqualTo( - 'properties length', - schema.path, - keys$1.length, - Math.max(rule.min, rule.max), - result, - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (let i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - let property; - each(schema.properties, function (item /* , index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i], - ), - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - const length = result.length; - - if (!schema.items) return; - - const rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - 'items', - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', - ); - Assert.lessThanOrEqualTo( - 'items', - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (let i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), - ); - } - - return result.length === length; - }, -}; - -/* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - -*/ -const Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', (isArray(item.path) && item.path.join('.')) || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case 'type': - // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true; - break; - } - - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'matches', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is not equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than or equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less than or equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, -}; - -valid.Diff = Diff; -valid.Assert = Assert; - -// 集中管理 mocked 的 url - -const _mocked = { - $set(value) { - this[value.rurl + value.rtype.toLowerCase()] = value; - }, - $delete(key) { - delete this[key]; - }, -}; - -// 查找与请求参数匹配的数据模板:URL,Type -function find({ url, type }) { - type = type.toLowerCase(); - for (const sUrlType in _mocked) { - const item = _mocked[sUrlType]; - const { rurl, rtype } = item; - if (match(rurl, url) && match(rtype, type)) { - // console.log('[mock]', url, '>', item.rurl) - return item; - } - } - return false; -} - -function match(expected, actual) { - switch (type(expected)) { - case 'string': - return expected === actual; - case 'regexp': - return expected.test(actual); - default: - return false; - } -} - -// 数据模板 => 响应数据 -function convert({ template }, options) { - return isFunction(template) ? template(options) : gen(template); -} - -/** - * Check if `obj` is a URLSearchParams object - * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 - * - * @param {*} obj - * @return {boolean} - */ -const isURLSearchParameters = (object) => { - return ( - typeof object === 'object' && - typeof object.append === 'function' && - typeof object.delete === 'function' && - typeof object.get === 'function' && - typeof object.getAll === 'function' && - typeof object.has === 'function' && - typeof object.set === 'function' && - typeof object.sort === 'function' && - object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 - ); -}; - -const BODY = Symbol('Body internals'); -const RESPONSE = Symbol('Response internals'); - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -async function consumeBody(data) { - // 标记为已经使用 - if (data.disturbed) { - throw new TypeError(`body used already for: ${data.url}`); - } - data.disturbed = true; - - // 报错 - if (data.error) { - throw data.error; - } - - if (data.body instanceof FormData) { - return new Blob([Object.fromEntries(data.body.entries())]); - } - return data.body; -} - -/** - * Body.js - * - * Body interface provides common methods for Request and Response - */ -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Body { - constructor(body, { size = 0 } = {}) { - if (body === null) { - // Body is undefined or null - body = new Blob([]); - } else if (isURLSearchParameters(body)) { - // Body is a URLSearchParams - body = new Blob([body]); - } else if (ArrayBuffer.isView(body)) { - // Body is ArrayBufferView - body = new Blob([body]); - } else { - body = new Blob([JSON.stringify(body)]); - } - - this[BODY] = { - body, - boundary: null, - disturbed: false, - error: null, - }; - this.size = size; - } - - get body() { - return this[BODY].body; - } - - get bodyUsed() { - return this[BODY].disturbed; - } - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - async arrayBuffer() { - const blob = await consumeBody(this[BODY]); - return blob.arrayBuffer(); - } - - /** - * Return raw response as Blob - * - * @return Promise - */ - async blob() { - return consumeBody(this[BODY]); - } - - /** - * Decode response as json - * - * @return Promise - */ - async json() { - const text = await this.text(); - return JSON.parse(text || '{}'); - } - - /** - * Decode response as text - * - * @return Promise - */ - async text() { - const blob = await consumeBody(this[BODY]); - return blob.text(); - } - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ -} - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true }, -}); - -/** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present. - * - * @param {any} body Any options.body input - * @return {string | null} - */ -const extractContentType = (body, request) => { - // Body is null or undefined - if (body === null) { - return null; - } - - // Body is string - if (typeof body === 'string') { - return 'text/plain;charset=UTF-8'; - } - - // Body is a URLSearchParams - if (isURLSearchParameters(body)) { - return 'application/x-www-form-urlencoded;charset=UTF-8'; - } - - // Body is blob - if (body instanceof Blob) { - return body.type || null; - } - - if (body instanceof FormData) { - return `multipart/form-data; boundary=${request[BODY].boundary}`; - } - - // Body constructor defaults other things to string - return 'text/plain;charset=UTF-8'; -}; - -const redirectStatus = new Set([301, 302, 303, 307, 308]); - -/** - * Redirect code matching - * - * @param {number} code - Status code - * @return {boolean} - */ -const isRedirect = (code) => { - return redirectStatus.has(code); -}; - -/** - * Response.js - * - * Response class provides content decoding - */ -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class fakeResponse extends Body { - constructor(body = null, options = {}) { - super(body, options); - const status = options.status != null ? options.status : 200; - const headers = new Headers(options.headers); - if (body !== null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - this[RESPONSE] = { - type: 'default', - url: options.url, - status, - statusText: options.statusText || '', - headers, - counter: options.counter, - }; - } - - get type() { - return this[RESPONSE].type; - } - - get url() { - return this[RESPONSE].url || ''; - } - - get status() { - return this[RESPONSE].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; - } - - get redirected() { - return this[RESPONSE].counter > 0; - } - - get statusText() { - return this[RESPONSE].statusText; - } - - get headers() { - return this[RESPONSE].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - // Don't allow cloning a used body - if (this.bodyUsed) { - throw new Error('cannot clone body after it is used'); - } - return new Response(this.body, { - type: this.type, - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected, - size: this.size, - }); - } - - /** - * @param {string} url The URL that the new response is to originate from. - * @param {number} status An optional status code for the response (e.g., 302.) - * @return {Response} A Response object. - */ - static redirect(url, status = 302) { - if (!isRedirect(status)) { - throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); - } - - return new Response(null, { - headers: { - location: new URL(url).toString(), - }, - status, - }); - } - - static error() { - const response = new Response(null, { status: 0, statusText: '' }); - response[RESPONSE].type = 'error'; - return response; - } - - get [Symbol.toStringTag]() { - return 'Response'; - } -} - -Object.defineProperties(Response.prototype, { - type: { enumerable: true }, - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true }, -}); - -const realFetch = window && window.fetch; -function mockFetch() { - // 代理 fetch 的初始化函数 - if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { - window.fetch = fakeFetch; - window.fetch.$mock = true; - console.warn('fetch 已经被代理'); - } -} - -async function fakeFetch(url, options = {}) { - if (window.fetch.$mock === true) { - // 只有在 $mock 标记为 true 时才进行代理 - const result = find({ - url, - type: (options.method || 'get').toLowerCase(), - }); - if (result) { - const data = convert(result, {}); - console.warn('mock代理中'); - return new fakeResponse(data, options); - } - } - - console.warn('未使用 mockjs'); - return realFetch(url, options); -} - -var HTTP_STATUS_CODES = { - 100: 'Continue', - 101: 'Switching Protocols', - 200: 'OK', - 201: 'Created', - 202: 'Accepted', - 203: 'Non-Authoritative Information', - 204: 'No Content', - 205: 'Reset Content', - 206: 'Partial Content', - 300: 'Multiple Choice', - 301: 'Moved Permanently', - 302: 'Found', - 303: 'See Other', - 304: 'Not Modified', - 305: 'Use Proxy', - 307: 'Temporary Redirect', - 400: 'Bad Request', - 401: 'Unauthorized', - 402: 'Payment Required', - 403: 'Forbidden', - 404: 'Not Found', - 405: 'Method Not Allowed', - 406: 'Not Acceptable', - 407: 'Proxy Authentication Required', - 408: 'Request Timeout', - 409: 'Conflict', - 410: 'Gone', - 411: 'Length Required', - 412: 'Precondition Failed', - 413: 'Request Entity Too Large', - 414: 'Request-URI Too Long', - 415: 'Unsupported Media Type', - 416: 'Requested Range Not Satisfiable', - 417: 'Expectation Failed', - 422: 'Unprocessable Entity', - 500: 'Internal Server Error', - 501: 'Not Implemented', - 502: 'Bad Gateway', - 503: 'Service Unavailable', - 504: 'Gateway Timeout', - 505: 'HTTP Version Not Supported', -}; - -// 使用不完全覆盖的方式,使用继承方式继承所有的属性 - -const SEND = XMLHttpRequest.prototype.send; -const OPEN = XMLHttpRequest.prototype.open; - -// ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - -// 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, -// 也不可以在 XHR 实例上定义 -// 这样的话会导致无法接收到数据 -// 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 -const defineGetAndSet = function (what) { - const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; - Object.defineProperties( - what, - array.reduce((col, cur) => { - col[cur] = { - get() { - return this.$Mock[cur]; - }, - set: function (state) { - this.$Mock[cur] = state; - }, - }; - return col; - }, {}), - ); -}; -class MockXMLHttpRequest extends XMLHttpRequest { - constructor(...args) { - super(...args); - } - _send = SEND; - _open = OPEN; - open(method, url, async, username, password) { - // 不进行同步操作 - this._open(method, url, true, username, password); - this.$url = url; - this.$type = method.toLowerCase(); - } - send(body) { - if (this.$mock) { - this.$template = find({ url: this.$url, type: this.$type }); - if (this.$template) { - defineGetAndSet(this); - this.dispatchEvent(new Event('loadstart')); - - setTimeout(this.$done.bind(this), this.timeout || 100); - return null; - } - } - this._send(body); - } - get mock() { - return this.$mock; - } - set mock(value) { - if (typeof value === 'boolean') this.$mock = value; - } - $Mock = { - // 原生属性的 getter 和 setter - readyState: 0, - status: 200, - response: '', - responseText: '', - statusText: '', - }; - $type = 'get'; - $url = ''; - $mock = true; - $template = null; - - $done() { - this.readyState = this.HEADERS_RECEIVED; - this.dispatchEvent(new Event('readystatechange')); - this.readyState = this.LOADING; - this.dispatchEvent(new Event('readystatechange')); - - this.status = 200; - this.statusText = HTTP_STATUS_CODES[200]; - const data = convert(this.$template, {}); - this.response = data; - this.responseText = this.response; - this.readyState = this.DONE; - this.dispatchEvent(new Event('readystatechange')); - this.dispatchEvent(new Event('load')); - this.dispatchEvent(new Event('loadend')); - } -} - -// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 -typeof window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 - -let XHR; -if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; - -function mock(...args) { - let rurl; - let rtype = 'get'; - let template; - - switch (args.length) { - case 1: - // Mock.mock(template) - [template] = args; - return Handler.gen(template); - // 2 和 3 switch 穿透 - case 2: - // Mock.mock(rurl, template) - [rurl, template] = args; - break; - case 3: - // Mock.mock(rurl,rtype, template) - [rurl, rtype, template] = args; - break; - } - - // 拦截 XHR - XHR && window && (window.XMLHttpRequest = XHR); - - _mocked.$set({ - rurl, - rtype, - template, - }); - return null; -} - -// global require, module, window - -/* ! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 - KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao/ -*/ - -const Mock = { - Handler, - Random, - Util, - XHR, - RE, - toJSONSchema, - valid, - heredoc: heredoc, - setup: function (settings) { - return XHR.setup(settings); - }, - _mocked, - mock, -}; - -Mock.version = '1.1.1-es6'; - -export default Mock; diff --git a/package.json b/package.json index 81e5ae9b..833f3e91 100644 --- a/package.json +++ b/package.json @@ -24,20 +24,28 @@ "type": "git", "url": "git://gitee.com/dongzhongzhidong/Mock.git" }, - "main": "./dist/mock.esm.js", - "spm": { - "main": "./dist/mock.esm.js" + "main": "./dist/mock.cjs.js", + "module": "./dist/mock.esm.js", + "es2015": "./dist/mock.esm.js", + "exports": { + ".": { + "node": "./dist/mock.cjs.js", + "default": "./dist/mock.esm.js" + } }, "scripts": { "dev": "rollup --config rollup.config.dev.js -w", "build": "rollup --config rollup.config.build.js", + "dev:cjs": "rollup --config rollup.config.cjs.dev.js", "lint": "eslint src", "Lint": "prettier --write src/**/*.{ts,json,md,yml,js} & eslint src", "prettier": "prettier --write src/**/*.{ts,json,md,yml,js}" }, "dependencies": { "color": "^3.1.3", + "lodash": "^4.17.21", "lodash-es": "^4.17.21", + "rollup-plugin-module-replacement": "^1.2.1", "uuid": "^8.3.2" }, "devDependencies": { diff --git a/rollup.config.cjs.dev.js b/rollup.config.cjs.dev.js new file mode 100644 index 00000000..e5db2af2 --- /dev/null +++ b/rollup.config.cjs.dev.js @@ -0,0 +1,35 @@ +import resolve from 'rollup-plugin-node-resolve'; // 帮助寻找node_modules里的包 +import commonjs from 'rollup-plugin-commonjs'; // 将非ES6语法的包转为ES6可用 + +import json from '@rollup/plugin-json'; + +export default { + input: './src/mock.js', // 打包入口 + output: { + // 打包出口 + file: './dist/mock.cjs.js', + format: 'cjs', + name: 'Mock', + exports: 'auto', + external: ['crypto'], + globals: { + window: 'window', // 告诉rollup 全局变量$即是jquery + crypto: 'crypto', + }, + }, + plugins: [ + json(), + resolve({ + jsnext: true, + main: true, + browser: false, + }), + commonjs({ + // non-CommonJS modules will be ignored, but you can also + // specifically include/exclude files + include: ['node_modules/**', './src/**'], // Default: undefined + ignoreGlobal: true, + sourceMap: false, // Default: true + }), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 + ], +}; diff --git a/rollup.config.dev.js b/rollup.config.dev.js index cd52ceaf..b4e866e7 100644 --- a/rollup.config.dev.js +++ b/rollup.config.dev.js @@ -1,21 +1,21 @@ -import resolve from "rollup-plugin-node-resolve"; // 帮助寻找node_modules里的包 -import commonjs from "rollup-plugin-commonjs"; // 将非ES6语法的包转为ES6可用 -import liver from "rollup-plugin-livereload"; -import json from "@rollup/plugin-json"; +import resolve from 'rollup-plugin-node-resolve'; // 帮助寻找node_modules里的包 +import commonjs from 'rollup-plugin-commonjs'; // 将非ES6语法的包转为ES6可用 +import liver from 'rollup-plugin-livereload'; +import json from '@rollup/plugin-json'; export default { - input: "./src/mock.js", // 打包入口 + input: './src/mock.js', // 打包入口 output: [ { // 打包出口 - dir: "./dist", - format: "es", + file: './dist/mock.esm.js', + format: 'es', }, { // 打包出口 - file: "./dist/mock.min.js", - format: "iife", - name: "Mock", + file: './dist/mock.min.js', + format: 'iife', + name: 'Mock', }, ], plugins: [ @@ -28,7 +28,7 @@ export default { commonjs({ // non-CommonJS modules will be ignored, but you can also // specifically include/exclude files - include: ["node_modules/**", "./src/**"], // Default: undefined + include: ['node_modules/**', './src/**'], // Default: undefined ignoreGlobal: false, sourceMap: false, // Default: true }), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 diff --git a/src/mock/XHR.js b/src/mock/XHR.js index 00691118..febb0c5b 100644 --- a/src/mock/XHR.js +++ b/src/mock/XHR.js @@ -1,4 +1 @@ -import { MockXMLHttpRequest } from './xhr/index.js'; -let XHR; -if (typeof window !== 'undefined') XHR = MockXMLHttpRequest; -export { XHR }; +export { MockXMLHttpRequest as XHR } from './xhr/index.js'; diff --git a/src/mock/mock.js b/src/mock/mock.js index 66e96e15..65992e91 100644 --- a/src/mock/mock.js +++ b/src/mock/mock.js @@ -23,7 +23,7 @@ export function mock(...args) { } // 拦截 XHR - XHR && window && (window.XMLHttpRequest = XHR); + if (!XHR) globalThis.XMLHttpRequest = XHR; _mocked.$set({ rurl, diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 2377ab46..4566855e 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -3,8 +3,15 @@ import { find, convert } from '../ajax-tools.js'; import HTTP_STATUS_CODES from './constant.js'; -const SEND = XMLHttpRequest.prototype.send; -const OPEN = XMLHttpRequest.prototype.open; +let XMLHttpRequest; +let SEND; +let OPEN; +if (globalThis.window !== undefined) { + SEND = XMLHttpRequest.prototype.send; + OPEN = XMLHttpRequest.prototype.open; +} else { + XMLHttpRequest = class NULL {}; +} // ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index fd049aae..d2284bf3 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -1,3 +1,4 @@ +const window = globalThis.window || {}; const realFetch = window && window.fetch; function mockFetch() { // 代理 fetch 的初始化函数 diff --git a/src/mock/xhr/fetch/src/response.js b/src/mock/xhr/fetch/src/response.js index 1df22caf..1f04f471 100644 --- a/src/mock/xhr/fetch/src/response.js +++ b/src/mock/xhr/fetch/src/response.js @@ -8,6 +8,7 @@ import Body from './body.js'; import { extractContentType } from './body/exactContentType.js'; import { isRedirect } from './utils/is-redirect.js'; import { RESPONSE as INTERNALS } from './INTERNALS.js'; +const Response = (globalThis.window && globalThis.window.Response) || class Null {}; /** * Response class * diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index a1762e51..be9b5140 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1,6 +1,6 @@ // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 // import { mockFetch } from './fetch/fetch.js'; -typeof window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 +typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 export { MockXMLHttpRequest } from './XMLHttpRequest/xhr.js'; diff --git a/test/common.test.js b/test/common.test.js index 9b34760f..37f5c269 100644 --- a/test/common.test.js +++ b/test/common.test.js @@ -1,7 +1,6 @@ -const Mock = require('../dist/mock.cjs.js') +const Mock = require('../dist/mock.cjs.js'); - -// const a = Mock.mock({ -// 'a|20':['@cname'] -// }) -console.log(Mock) \ No newline at end of file +const a = Mock.mock({ + 'a|20': ['@cname'], +}); +console.log(a); diff --git a/yarn.lock b/yarn.lock index fd0229fe..cd3c239e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2087,7 +2087,7 @@ lodash.truncate@^4.4.2: resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= -lodash@4.17.21, lodash@^4.17.11: +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -2444,6 +2444,13 @@ rollup-plugin-livereload@^2.0.0: dependencies: livereload "^0.9.1" +rollup-plugin-module-replacement@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/rollup-plugin-module-replacement/-/rollup-plugin-module-replacement-1.2.1.tgz#2c14115ca132cd2f95862c1ecd7325f96d987f3d" + integrity sha512-nFWmUGJGX6Fof9EAdyZqCabjniW7cGdm3w+O9/KZwphL30PG5S/tFAniwNEBm4eJA2fTEHj/kqFJEQJ+1bOq4w== + dependencies: + slash "^3.0.0" + rollup-plugin-multi-input@^1.3.1: version "1.3.1" resolved "https://registry.npmjs.org/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.3.1.tgz#07b903b618c005871fea1bd0c4efae7d1aac4fa1" From b52fb043801dcf1a138cdff18dad3c1907e31a3d Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 20:28:45 +0800 Subject: [PATCH 37/65] =?UTF-8?q?docs:=20=E6=B7=BB=E5=8A=A0mockjs=20?= =?UTF-8?q?=E5=BC=95=E5=85=A5=E7=9A=84=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 49 +- dist/Mock.min.js | 2 +- dist/mock.cjs.js | 15450 +----------------------------------------- dist/mock.esm.js | 2 +- test/common.test.js | 2 +- 5 files changed, 84 insertions(+), 15421 deletions(-) diff --git a/README.md b/README.md index f860069e..4bbc57e2 100644 --- a/README.md +++ b/README.md @@ -2,59 +2,72 @@ ## 简介 -Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](http://mockjs.com/) 源代码实在太过久远,本人用了 4 天时间将 [Mockjs](http://mockjs.com/) 的大部分模块进行细分与简化,便于广大开发者学习。 +Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](http://mockjs.com/) 源代码实在太过久远,本人用了一个月时间将 [Mockjs](http://mockjs.com/) 的大部分模块进行细分与简化,使用 rollup 打包,便于广大开发者学习。 ## 与 [Mockjs](http://mockjs.com/) 的异同点 ### 同 1. Mockjs-esm 沿袭 [Mockjs](http://mockjs.com/) 的所有 API,不对任何的 API 进行更改。 +2. 从 1.0.0 版本起对 node 版本也支持使用。 ### 异 1. 对源代码中的大部分循环遍历逻辑进行了修改。 2. 引用 lodash 和 color 库对源代码中的随机函数和颜色转换等函数进行简化。(原作者当年是没有依靠任何库的,这一点令我很佩服) -3. 源代码打包方式改为 rollup 打包,生成 esm 版本和 iife 版本。 +3. 源代码打包方式改为 rollup 打包,生成 esm 版本,cjs 版本和 iife 版本。 4. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) 6. 删除 XHR 代理时的同步行为,这个行为已经不被浏览器所使用。 7. 使用继承代理的方式而不是覆盖 XHR 请求的方式代理 原生 XHR 行为。 +8. 代码通过 eslint 和 prettier 进行风格化管理,加强代码的可读性。 ## 教程 本项目维持与 [Mockjs](http://mockjs.com/) 一致的 API,故原作者的教程是完全可以实现的。 官方网站:http://mockjs.com/ -## 新的功能 +## 从 Mockjs 迁移到 Mockjs-esm -1. 生成 timestamp +不用修改任何的 API ,只需要改变 Mockjs 的引用方式即可。 + +### iife 即浏览器使用 + +```html + +``` + +### esm 即用 import 导入 ```js -Mock.mock("@timestamp"); // 生成数字型的 timestamp +import Mock from 'Mock'; +import Mock from 'https://cdn.jsdelivr.net/npm/mockjs-esm/dist/mock.esm.js'; ``` -2. 支持 fetch 代理 +### cjs 即用 node 导入 ```js -Mock.mock("fake/1", "get", { - "timestamp|10": ["@timestamp"], -}); -fetch("fake/1") - .then((res) => res.json()) - .then(console.log); +// npm i mockjs-esm +const Mock = require('mockjs-esm'); ``` -## 从 Mockjs 迁移到 Mockjs-esm +## 新的功能 -不用修改任何的 API ,只需要改变 Mockjs 的引用方式即可。 +1. 生成 timestamp -```html - +```js +Mock.mock('@timestamp'); // 生成数字型的 timestamp ``` +2. 支持 fetch 代理 + ```js -import Mock from "Mock"; -import Mock from "https://cdn.jsdelivr.net/npm/mockjs-esm/dist/mock.esm.js"; +Mock.mock('fake/1', 'get', { + 'timestamp|10': ['@timestamp'], +}); +fetch('fake/1') + .then((res) => res.json()) + .then(console.log); ``` ## 作者的闲聊 diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 40ff356c..1a681cc2 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ie(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function tn(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Te(e))}var rn=Me&&Me.isRegExp,an=rn?ve(rn):function(e){return s(e)&&"[object RegExp]"==h(e)},on=Math.floor,un=Math.random;function ln(e,n){return e+on(un()*(n-e+1))}var cn=parseFloat,hn=Math.min,sn=Math.random;function fn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=sn();return hn(e+a*(n-e+cn("1e-"+((a+"").length-1))),n)}return ln(e,n)}var mn=Math.ceil,dn=Math.max;var pn,bn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=dn(mn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=En,a=On(e,En);e-=En;for(var o=ie(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=fn(t,r,!1);return parseFloat(fn(e,n,!0).toFixed(a))},In=function(e,n,t=!1){return t?fn(0,e+n)>e?!t:t:fn(10,-10)>0},Bn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Bn.alpha=Bn.lower+Bn.upper,Bn.default=Bn.lower+Bn.upper+Bn.number+Bn.symbol;const Un=function(e="default"){return Bn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Bn[e.toLowerCase()]),yn(e)},Gn=function(...e){let n,t,r,a;switch(e.length){case 0:n=Hn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Hn(r,a));break;case 3:[t,r,a]=e,n=Hn(r,a)}return Sn(n,(()=>Un(t))).join("")};function Wn(e,n){return e(n={exports:{}},n.exports),n.exports}var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Wn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Yn=Wn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Jn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Kn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Kn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Kn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Yn.to,Yn.get;var Vn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Xn=Wn((function(e){var n={};for(var t in Vn)Vn.hasOwnProperty(t)&&(n[Vn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Vn)if(Vn.hasOwnProperty(l)){var c=Vn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Zn(e){var n=function(){for(var e={},n=Object.keys(Xn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var tt=nt,rt=[].slice,at=["keyword","gray","hex"],ot={};Object.keys(tt).forEach((function(e){ot[rt.call(tt[e].labels).sort().join("")]=e}));var ut={};function lt(e,n){if(!(this instanceof lt))return new lt(e,n);if(n&&n in at&&(n=null),n&&!(n in tt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof lt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Yn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=tt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=tt[this.model].channels;var o=rt.call(e,0,r);this.color=st(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ot))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ot[l];var c=tt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return lt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return lt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(tt).forEach((function(e){if(-1===at.indexOf(e)){var n=tt[e].channels;lt.prototype[e]=function(){if(this.model===e)return new lt(this);if(arguments.length)return new lt(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new lt(ht(tt[this.model][e].raw(this.color)).concat(t),e)},lt[e]=function(t){return"number"==typeof t&&(t=st(rt.call(arguments),n)),new lt(t,e)}}}));var ft=lt,mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const dt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,An(e,a);case 2:return[t,r]=n,An(e,fn(t,r))}},pt=function(e,n,t){const r=jn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},bt={},xt=function(...e){1===e.length&&(e=e[0]);const n=xt.options.context.templatePath.join("."),t=bt[n]=bt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var gt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function vt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ft.hsv(360*yt,100*e,100*n)}function wt(){return vt().hex()}var kt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:At,lastName:Mt,cfirstName:Ct,clastName:jt}=kt;function Et(){const e=At.male.concat();return dt(e)}function Ot(){return dt(Mt)}function St(){return dt(Ct)}function Rt(){return dt(jt)}var Tt,Ft=new Uint8Array(16);function _t(){if(!Tt&&!(Tt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tt(Ft)}var Dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function qt(e){return"string"==typeof e&&Dt.test(e)}for(var $t=[],Pt=0;Pt<256;++Pt)$t.push((Pt+256).toString(16).substr(1));function zt(e,n,t){var r=(e=e||{}).random||(e.rng||_t)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=($t[e[n+0]]+$t[e[n+1]]+$t[e[n+2]]+$t[e[n+3]]+"-"+$t[e[n+4]]+$t[e[n+5]]+"-"+$t[e[n+6]]+$t[e[n+7]]+"-"+$t[e[n+8]]+$t[e[n+9]]+"-"+$t[e[n+10]]+$t[e[n+11]]+$t[e[n+12]]+$t[e[n+13]]+$t[e[n+14]]+$t[e[n+15]]).toLowerCase();if(!qt(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Lt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ht=Object.keys(Lt),Nt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Lt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ht.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var It={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Bt=new RegExp(`(${Object.keys(It).join("|")})`,"g");function Ut(e="yyyy-MM-dd"){return Gt(Wt(),e)}function Gt(e,n){return n.replace(Bt,(function n(t,r){const a=It[r];return"function"==typeof a?a(e):a in It?n(t,a):e[a]()}))}function Wt(e=new Date(0),n=new Date){return new Date(Ln(e.getTime(),n.getTime()))}let Jt=0;const Kt=function(e){return Jt+=+e||1},Yt=Kt;function Vt(e=12,n=18){return en(Sn(fn(e,n),(()=>Xt())).join(" "))+"."}function Xt(e=3,n=10){return Sn(fn(e,n),(()=>Un("lower"))).join("")}function Zt(e=12,n=18){return Sn(fn(e,n),(()=>Qt())).join("")+"。"}function Qt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Hn(n,t));break;case 3:[a,n,t]=e,r=Hn(n,t)}return An(a,r).join("")}const er="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),nr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function tr(){return dt(er)}function rr(e){return`${Xt()}.${e||ar()}`}function ar(){return dt(nr)}var or={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ur={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:lr,_screenSize:cr,_videoSize:ir}=or,hr=Object.keys(ur);function sr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=dt(lr)),r=(r||wt()).replace(/^#/,""),t=(t||wt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const fr=["东北","华北","华东","华中","华南","西南","西北"];function mr(e){let n;switch(Rn(e)){case"array":n=e;break;default:n=[e]}return n}var dr=Object.freeze({__proto__:null,integer:Ln,isNumber:Pn,random:fn,natural:Hn,int:Ln,float:Nn,boolean:In,bool:In,character:Un,char:Un,string:Gn,str:Gn,range:bn,color:function(e){return e||mt[e]?mt[e].nicer:dt(gt).hex},hex:wt,rgb:function(){return vt().hsv().string()},rgba:function(){return vt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return vt().hsl().string()},_goldenRatioColor:vt,first:Et,last:Ot,name:function(e){return e=e?` ${Et()} `:" ",`${Et()}${e}${Ot()}`},cfirst:St,clast:Rt,cname:function(){return St()+Rt()},capitalize:en,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:dt,shuffle:pt,order:xt,d4:function(){return Hn(1,4)},d6:function(){return Hn(1,6)},d8:function(){return Hn(1,8)},d12:function(){return Hn(1,12)},d20:function(){return Hn(1,20)},d100:function(){return Hn(1,100)},guid:function(){return zt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:zt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=dt(Nt).id+Ut("yyyyMMdd")+Gn("number",3);for(let r=0;rVt())).join("\n")},word:Xt,sentence:Vt,title:function(e=3,n=7){return Sn(fn(e,n),(()=>en(Xt()))).join("")},ctitle:function(e=3,n=7){return Sn(fn(e,n),(()=>Qt())).join("")},csentence:Zt,cparagraph:function(e=3,n=7){return Sn(fn(e,n),(()=>Zt())).join("\n")},cword:Qt,protocol:tr,domain:rr,tld:ar,email:function(e){return`${Un("lower")}.${Xt()}@${e||Xt()+"."+ar()}`},ip:function(){return[...Array(4)].map((()=>Hn(0,255))).join(".")},url:function(e,n){return`${e||tr()}://${n||rr()}/${Xt()}`},_patternLetters:It,_rformat:Bt,_formatDate:Gt,_randomDate:Wt,time:function(e="HH:mm:ss"){return Ut(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ut(e)},date:Ut,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Gt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Wt(e,n).getTime():Wt().getTime()},_adSize:lr,_screenSize:cr,_videoSize:ir,image:sr,img:sr,_brandColors:ur,_brandNames:hr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=dt(lr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=ur[dt(hr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return dt(fr)},province:function(){return dt(Nt).name},city:function(e){const n=dt(Nt),t=dt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=dt(Nt),t=dt(n.children),r=dt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Hn(0,9);return n},genFile:function(e){return new File(mr(e),Xt())},genBlob:function(e){return new Blob(mr(e))}}),pr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function br(e=""){"string"!=typeof e&&(e+="");const n=e.match(pr.RE_KEY),t=n&&n[3]&&n[3].match(pr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Ln(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(pr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Ln(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function xr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=dt(aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(aa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(aa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function gr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?In(n,e,r):r}function yr(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function vr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Nn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function wr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=pt(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(pr.RE_KEY);c&&c[2]&&"number"===Rn(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function kr(e){this.type=e,this.offset=kr.offset(),this.text=kr.text()}function Ar(e,n){kr.call(this,"alternate"),this.left=e,this.right=n}function Mr(e){kr.call(this,"match"),this.body=e.filter(Boolean)}function Cr(e,n){kr.call(this,e),this.body=n}function jr(e){Cr.call(this,"capture-group"),this.index=Lr[this.offset]||(Lr[this.offset]=zr++),this.body=e}function Er(e,n){kr.call(this,"quantified"),this.body=e,this.quantifier=n}function Or(e,n){kr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Sr(e,n){kr.call(this,"charset"),this.invert=e,this.body=n}function Rr(e,n){kr.call(this,"range"),this.start=e,this.end=n}function Tr(e){kr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Fr(e){kr.call(this,"unicode"),this.code=e.toUpperCase()}function _r(e){kr.call(this,"hex"),this.code=e.toUpperCase()}function Dr(e){kr.call(this,"octal"),this.code=e.toUpperCase()}function qr(e){kr.call(this,"back-reference"),this.code=e.toUpperCase()}function $r(e){kr.call(this,"control-character"),this.code=e.toUpperCase()}var Pr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t){if(r=[],Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Ct.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Mt)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new Ar(e,n[1]):e},me=function(e,n,t){return new Mr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new kr("start")},xe="$",ge='"$"',ye=function(){return new kr("end")},ve=function(e,n){return new Er(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Me='"{"',Ce=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Or(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Or(e,1/0)},_e=function(e){return new Or(e,e)},De="+",qe='"+"',$e=function(){return new Or(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Or(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Or(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new jr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Cr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Cr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Cr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Sr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Rr(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Tr(e)},kn=".",An='"."',Mn=function(){return new kr("any-character")},Cn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new kr("backspace")},Tn=function(){return new kr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new kr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new kr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new kr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new kr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new kr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new kr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new kr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new kr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new kr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new kr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new kr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new kr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new $r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new qr(e)},At="\\0",Mt='"\\\\0"',Ct=/^[0-7]/,jt="[0-7]",Et=function(e){return new Dr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new _r(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Fr(e.join(""))},$t=function(){return new kr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(kr.offset=r,kr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Hr.gen=function(e,n,t){return t=t||{guid:1},Hr[e.type]?Hr[e.type](e,n,t):Hr.token(e,n,t)},Hr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Un();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return dt(Br.split(""));case"non-digit":return dt((Nr+Ir+Ur).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return dt(Wr.split(""));case"non-white-space":return dt((Nr+Ir+Br).split(""));case"tab":case"vertical-tab":break;case"word":return dt((Nr+Ir+Br).split(""));case"non-word":return dt(Ur.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(In()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Zr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Xr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=aa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in dr)&&!(u in dr))return e;o=o?o.split(/\s*,\s*/).map((e=>(pr.RE_PLACEHOLDER.exec(""),pr.RE_PLACEHOLDER.test(e)?ea(e,n,t,r):e))):[];const c=dr[a]||dr[u];switch(Rn(c)){case"array":return dt(c);case"function":{c.options=r;const e=c.apply(dr,o)||"";return delete c.options,e}}}function na(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(pr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=ea(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Tn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Gn(t):o;return u}var ta=Object.freeze({__proto__:null,array:xr,boolean:gr,function:yr,number:vr,object:wr,regexp:Vr,string:na});let ra=1;function aa(e,n="",t={}){const r={path:t.path||[ra],templatePath:t.templatePath||[ra++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Rn(e),o=ta[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(pr.RE_KEY,"$1"):n,rule:br(n),context:r}),r.root||(r.root=u),u):e}const oa={gen:aa,extend:Fn};function ua(e,n,t=[]){const r={name:"string"==typeof n?n.replace(pr.RE_KEY,"$1"):n,template:e,type:Rn(e),rule:br.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ua(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ua(e,n,r.path)))}return r}function la(e,n){const t=ua(e),r=ca.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:ea,getValueByKeyPath:Xr,normalizePath:Zr,splitPathToArray:Qr});const ca={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ia.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(pr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ia.equal("type",e.path,Rn(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ia.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(pr.RE_PLACEHOLDER))return r.length===a}return ia.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ia.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ia.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ia.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ia.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=qn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ia.equal("properties length",e.path,u.length,o.min,r)):ia.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ia.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1}};la.Diff=ca,la.Assert=ia;const ha={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function sa({url:e,type:n}){n=n.toLowerCase();for(const t in ha){const r=ha[t],{rurl:a,rtype:o}=r;if(fa(a,e)&&fa(o,n))return r}return!1}function fa(e,n){switch(Rn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ma({template:e},n){return R(e)?e(n):aa(e)}const da=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],pa=Symbol("Body internals"),ba=Symbol("Response internals");async function xa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class ga{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):da(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[pa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[pa].body}get bodyUsed(){return this[pa].disturbed}async arrayBuffer(){return(await xa(this[pa])).arrayBuffer()}async blob(){return xa(this[pa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await xa(this[pa])).text()}}Object.defineProperties(ga.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]),va=globalThis.window&&globalThis.window.Response||class{};class wa extends ga{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":da(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[pa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ba]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ba].type}get url(){return this[ba].url||""}get status(){return this[ba].status}get ok(){return this[ba].status>=200&&this[ba].status<300}get redirected(){return this[ba].counter>0}get statusText(){return this[ba].statusText}get headers(){return this[ba].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new va(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new va(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new va(null,{status:0,statusText:""});return e[ba].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(va.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ka=globalThis.window||{},Aa=ka&&ka.fetch;async function Ma(e,n={}){if(!0===ka.fetch.$mock){const t=sa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ma(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),Aa(e,n)}var Ca="OK";let ja,Ea;void 0!==globalThis.window&&(ja=XMLHttpRequest.prototype.send,Ea=XMLHttpRequest.prototype.open);class Oa extends XMLHttpRequest{constructor(...e){super(...e)}_send=ja;_open=Ea;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=sa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ca;const e=ma(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ka.fetch&&!ka.fetch.hasOwnProperty("$mock")&&(ka.fetch=Ma,ka.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Sa={Handler:oa,Random:dr,Util:$n,XHR:Oa,RE:Yr,toJSONSchema:ua,valid:la,heredoc:Dn,setup:function(e){return Oa.setup(e)},_mocked:ha,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,oa.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Oa||(globalThis.XMLHttpRequest=Oa),ha.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return Sa}(); +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ie(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function tn(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Te(e))}var rn=Ce&&Ce.isRegExp,an=rn?ve(rn):function(e){return s(e)&&"[object RegExp]"==h(e)},on=Math.floor,un=Math.random;function ln(e,n){return e+on(un()*(n-e+1))}var cn=parseFloat,hn=Math.min,sn=Math.random;function fn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=sn();return hn(e+a*(n-e+cn("1e-"+((a+"").length-1))),n)}return ln(e,n)}var mn=Math.ceil,dn=Math.max;var pn,bn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=dn(mn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=En,a=On(e,En);e-=En;for(var o=ie(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=fn(t,r,!1);return parseFloat(fn(e,n,!0).toFixed(a))},In=function(e,n,t=!1){return t?fn(0,e+n)>e?!t:t:fn(10,-10)>0},Bn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Bn.alpha=Bn.lower+Bn.upper,Bn.default=Bn.lower+Bn.upper+Bn.number+Bn.symbol;const Un=function(e="default"){return Bn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Bn[e.toLowerCase()]),yn(e)},Gn=function(...e){let n,t,r,a;switch(e.length){case 0:n=Nn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Nn(r,a));break;case 3:[t,r,a]=e,n=Nn(r,a)}return Sn(n,(()=>Un(t))).join("")};function Wn(e,n){return e(n={exports:{}},n.exports),n.exports}var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Wn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Yn=Wn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Jn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Kn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Kn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Kn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Yn.to,Yn.get;var Vn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Xn=Wn((function(e){var n={};for(var t in Vn)Vn.hasOwnProperty(t)&&(n[Vn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Vn)if(Vn.hasOwnProperty(l)){var c=Vn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Zn(e){var n=function(){for(var e={},n=Object.keys(Xn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var tt=nt,rt=[].slice,at=["keyword","gray","hex"],ot={};Object.keys(tt).forEach((function(e){ot[rt.call(tt[e].labels).sort().join("")]=e}));var ut={};function lt(e,n){if(!(this instanceof lt))return new lt(e,n);if(n&&n in at&&(n=null),n&&!(n in tt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof lt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Yn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=tt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=tt[this.model].channels;var o=rt.call(e,0,r);this.color=st(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ot))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ot[l];var c=tt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return lt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return lt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(tt).forEach((function(e){if(-1===at.indexOf(e)){var n=tt[e].channels;lt.prototype[e]=function(){if(this.model===e)return new lt(this);if(arguments.length)return new lt(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new lt(ht(tt[this.model][e].raw(this.color)).concat(t),e)},lt[e]=function(t){return"number"==typeof t&&(t=st(rt.call(arguments),n)),new lt(t,e)}}}));var ft=lt,mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const dt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,An(e,a);case 2:return[t,r]=n,An(e,fn(t,r))}},pt=function(e,n,t){const r=jn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},bt={},xt=function(...e){1===e.length&&(e=e[0]);const n=xt.options.context.templatePath.join("."),t=bt[n]=bt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var gt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function vt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ft.hsv(360*yt,100*e,100*n)}function wt(){return vt().hex()}var kt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:At,lastName:Ct,cfirstName:Mt,clastName:jt}=kt;function Et(){const e=At.male.concat();return dt(e)}function Ot(){return dt(Ct)}function St(){return dt(Mt)}function Rt(){return dt(jt)}var Tt,Ft=new Uint8Array(16);function _t(){if(!Tt&&!(Tt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tt(Ft)}var Dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&Dt.test(e)}for(var Pt=[],qt=0;qt<256;++qt)Pt.push((qt+256).toString(16).substr(1));function zt(e,n,t){var r=(e=e||{}).random||(e.rng||_t)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Pt[e[n+0]]+Pt[e[n+1]]+Pt[e[n+2]]+Pt[e[n+3]]+"-"+Pt[e[n+4]]+Pt[e[n+5]]+"-"+Pt[e[n+6]]+Pt[e[n+7]]+"-"+Pt[e[n+8]]+Pt[e[n+9]]+"-"+Pt[e[n+10]]+Pt[e[n+11]]+Pt[e[n+12]]+Pt[e[n+13]]+Pt[e[n+14]]+Pt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Lt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Nt=Object.keys(Lt),Ht=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Lt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Nt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var It={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Bt=new RegExp(`(${Object.keys(It).join("|")})`,"g");function Ut(e="yyyy-MM-dd"){return Gt(Wt(),e)}function Gt(e,n){return n.replace(Bt,(function n(t,r){const a=It[r];return"function"==typeof a?a(e):a in It?n(t,a):e[a]()}))}function Wt(e=new Date(0),n=new Date){return new Date(Ln(e.getTime(),n.getTime()))}let Jt=0;const Kt=function(e){return Jt+=+e||1},Yt=Kt;function Vt(e=12,n=18){return en(Sn(fn(e,n),(()=>Xt())).join(" "))+"."}function Xt(e=3,n=10){return Sn(fn(e,n),(()=>Un("lower"))).join("")}function Zt(e=12,n=18){return Sn(fn(e,n),(()=>Qt())).join("")+"。"}function Qt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Nn(n,t));break;case 3:[a,n,t]=e,r=Nn(n,t)}return An(a,r).join("")}const er="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),nr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function tr(){return dt(er)}function rr(e){return`${Xt()}.${e||ar()}`}function ar(){return dt(nr)}var or={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ur={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:lr,_screenSize:cr,_videoSize:ir}=or,hr=Object.keys(ur);function sr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=dt(lr)),r=(r||wt()).replace(/^#/,""),t=(t||wt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const fr=["东北","华北","华东","华中","华南","西南","西北"];function mr(e){let n;switch(Rn(e)){case"array":n=e;break;default:n=[e]}return n}var dr=Object.freeze({__proto__:null,integer:Ln,isNumber:qn,random:fn,natural:Nn,int:Ln,float:Hn,boolean:In,bool:In,character:Un,char:Un,string:Gn,str:Gn,range:bn,color:function(e){return e||mt[e]?mt[e].nicer:dt(gt).hex},hex:wt,rgb:function(){return vt().hsv().string()},rgba:function(){return vt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return vt().hsl().string()},_goldenRatioColor:vt,first:Et,last:Ot,name:function(e){return e=e?` ${Et()} `:" ",`${Et()}${e}${Ot()}`},cfirst:St,clast:Rt,cname:function(){return St()+Rt()},capitalize:en,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:dt,shuffle:pt,order:xt,d4:function(){return Nn(1,4)},d6:function(){return Nn(1,6)},d8:function(){return Nn(1,8)},d12:function(){return Nn(1,12)},d20:function(){return Nn(1,20)},d100:function(){return Nn(1,100)},guid:function(){return zt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:zt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=dt(Ht).id+Ut("yyyyMMdd")+Gn("number",3);for(let r=0;rVt())).join("\n")},word:Xt,sentence:Vt,title:function(e=3,n=7){return Sn(fn(e,n),(()=>en(Xt()))).join("")},ctitle:function(e=3,n=7){return Sn(fn(e,n),(()=>Qt())).join("")},csentence:Zt,cparagraph:function(e=3,n=7){return Sn(fn(e,n),(()=>Zt())).join("\n")},cword:Qt,protocol:tr,domain:rr,tld:ar,email:function(e){return`${Un("lower")}.${Xt()}@${e||Xt()+"."+ar()}`},ip:function(){return[...Array(4)].map((()=>Nn(0,255))).join(".")},url:function(e,n){return`${e||tr()}://${n||rr()}/${Xt()}`},_patternLetters:It,_rformat:Bt,_formatDate:Gt,_randomDate:Wt,time:function(e="HH:mm:ss"){return Ut(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ut(e)},date:Ut,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Gt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Wt(e,n).getTime():Wt().getTime()},_adSize:lr,_screenSize:cr,_videoSize:ir,image:sr,img:sr,_brandColors:ur,_brandNames:hr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=dt(lr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=ur[dt(hr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return dt(fr)},province:function(){return dt(Ht).name},city:function(e){const n=dt(Ht),t=dt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=dt(Ht),t=dt(n.children),r=dt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Nn(0,9);return n},genFile:function(e){return new File(mr(e),Xt())},genBlob:function(e){return new Blob(mr(e))}}),pr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function br(e=""){"string"!=typeof e&&(e+="");const n=e.match(pr.RE_KEY),t=n&&n[3]&&n[3].match(pr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Ln(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(pr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Ln(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function xr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=dt(aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(aa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(aa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function gr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?In(n,e,r):r}function yr(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function vr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Hn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function wr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=pt(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(pr.RE_KEY);c&&c[2]&&"number"===Rn(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function kr(e){this.type=e,this.offset=kr.offset(),this.text=kr.text()}function Ar(e,n){kr.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){kr.call(this,"match"),this.body=e.filter(Boolean)}function Mr(e,n){kr.call(this,e),this.body=n}function jr(e){Mr.call(this,"capture-group"),this.index=Lr[this.offset]||(Lr[this.offset]=zr++),this.body=e}function Er(e,n){kr.call(this,"quantified"),this.body=e,this.quantifier=n}function Or(e,n){kr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Sr(e,n){kr.call(this,"charset"),this.invert=e,this.body=n}function Rr(e,n){kr.call(this,"range"),this.start=e,this.end=n}function Tr(e){kr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Fr(e){kr.call(this,"unicode"),this.code=e.toUpperCase()}function _r(e){kr.call(this,"hex"),this.code=e.toUpperCase()}function Dr(e){kr.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){kr.call(this,"back-reference"),this.code=e.toUpperCase()}function Pr(e){kr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,qt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>qt||(qt>Ht&&(Ht=qt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nqt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Z(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(qt))?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Q(){var e,t,r,a;if(e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=qt,n.substr(qt,2)===Ot?(t=Ot,qt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=qt,n.substr(qt,2)===_t?(t=_t,qt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function te(){var e,t;return e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=Pt()),null===t?(qt=e,e=t):e=t,e}function re(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>qt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new Ar(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new kr("start")},xe="$",ge='"$"',ye=function(){return new kr("end")},ve=function(e,n){return new Er(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Or(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Or(e,1/0)},_e=function(e){return new Or(e,e)},De="+",$e='"+"',Pe=function(){return new Or(1,1/0)},qe="*",ze='"*"',Le=function(){return new Or(0,1/0)},Ne="?",He='"?"',Ie=function(){return new Or(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new jr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Mr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Mr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Mr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Sr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Rr(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Tr(e)},kn=".",An='"."',Cn=function(){return new kr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new kr("backspace")},Tn=function(){return new kr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new kr("non-word-boundary")},$n="\\d",Pn='"\\\\d"',qn=function(){return new kr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new kr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new kr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new kr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new kr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new kr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new kr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new kr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new kr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new kr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new kr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Pr(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Dr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new _r(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Fr(e.join(""))},Pt=function(){return new kr("null-character")},qt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(kr.offset=r,kr.text=t,null!==(ae=le())&&qt===n.length)return ae;throw u(It),zt=Math.max(qt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Nr.gen=function(e,n,t){return t=t||{guid:1},Nr[e.type]?Nr[e.type](e,n,t):Nr.token(e,n,t)},Nr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Un();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return dt(Br.split(""));case"non-digit":return dt((Hr+Ir+Ur).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return dt(Wr.split(""));case"non-white-space":return dt((Hr+Ir+Br).split(""));case"tab":case"vertical-tab":break;case"word":return dt((Hr+Ir+Br).split(""));case"non-word":return dt(Ur.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(In()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Zr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Xr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=aa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in dr)&&!(u in dr))return e;o=o?o.split(/\s*,\s*/).map((e=>(pr.RE_PLACEHOLDER.exec(""),pr.RE_PLACEHOLDER.test(e)?ea(e,n,t,r):e))):[];const c=dr[a]||dr[u];switch(Rn(c)){case"array":return dt(c);case"function":{c.options=r;const e=c.apply(dr,o)||"";return delete c.options,e}}}function na(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(pr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=ea(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Tn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Gn(t):o;return u}var ta=Object.freeze({__proto__:null,array:xr,boolean:gr,function:yr,number:vr,object:wr,regexp:Vr,string:na});let ra=1;function aa(e,n="",t={}){const r={path:t.path||[ra],templatePath:t.templatePath||[ra++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Rn(e),o=ta[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(pr.RE_KEY,"$1"):n,rule:br(n),context:r}),r.root||(r.root=u),u):e}const oa={gen:aa,extend:Fn};function ua(e,n,t=[]){const r={name:"string"==typeof n?n.replace(pr.RE_KEY,"$1"):n,template:e,type:Rn(e),rule:br.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ua(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ua(e,n,r.path)))}return r}function la(e,n){const t=ua(e),r=ca.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:ea,getValueByKeyPath:Xr,normalizePath:Zr,splitPathToArray:Qr});const ca={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ia.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(pr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ia.equal("type",e.path,Rn(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ia.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(pr.RE_PLACEHOLDER))return r.length===a}return ia.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ia.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ia.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ia.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ia.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ia.equal("properties length",e.path,u.length,o.min,r)):ia.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ia.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1}};la.Diff=ca,la.Assert=ia;const ha={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function sa({url:e,type:n}){n=n.toLowerCase();for(const t in ha){const r=ha[t],{rurl:a,rtype:o}=r;if(fa(a,e)&&fa(o,n))return r}return!1}function fa(e,n){switch(Rn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ma({template:e},n){return R(e)?e(n):aa(e)}const da=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],pa=Symbol("Body internals"),ba=Symbol("Response internals");async function xa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class ga{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):da(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[pa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[pa].body}get bodyUsed(){return this[pa].disturbed}async arrayBuffer(){return(await xa(this[pa])).arrayBuffer()}async blob(){return xa(this[pa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await xa(this[pa])).text()}}Object.defineProperties(ga.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]),va=globalThis.window&&globalThis.window.Response||class{};class wa extends ga{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":da(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[pa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ba]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ba].type}get url(){return this[ba].url||""}get status(){return this[ba].status}get ok(){return this[ba].status>=200&&this[ba].status<300}get redirected(){return this[ba].counter>0}get statusText(){return this[ba].statusText}get headers(){return this[ba].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new va(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new va(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new va(null,{status:0,statusText:""});return e[ba].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(va.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ka=globalThis.window||{},Aa=ka&&ka.fetch;async function Ca(e,n={}){if(!0===ka.fetch.$mock){const t=sa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ma(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),Aa(e,n)}var Ma="OK";let ja,Ea,Oa;void 0!==globalThis.window?(Ea=ja.prototype.send,Oa=ja.prototype.open):ja=class{};class Sa extends ja{constructor(...e){super(...e)}_send=Ea;_open=Oa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=sa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=ma(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ka.fetch&&!ka.fetch.hasOwnProperty("$mock")&&(ka.fetch=Ca,ka.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Ra={Handler:oa,Random:dr,Util:Pn,XHR:Sa,RE:Yr,toJSONSchema:ua,valid:la,heredoc:Dn,setup:function(e){return Sa.setup(e)},_mocked:ha,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,oa.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Sa||(globalThis.XMLHttpRequest=Sa),ha.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return Ra}(); diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js index 77a1d978..a9367e39 100644 --- a/dist/mock.cjs.js +++ b/dist/mock.cjs.js @@ -1,15401 +1,51 @@ -'use strict'; - -var crypto = require('crypto'); - -function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } - -var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto); - -/** Detect free variable `global` from Node.js. */ -var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - -/** Detect free variable `self`. */ -var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - -/** Used as a reference to the global object. */ -var root = freeGlobal || freeSelf || Function('return this')(); - -/** Built-in value references. */ -var Symbol$1 = root.Symbol; - -/** Used for built-in method references. */ -var objectProto$8 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$6 = objectProto$8.hasOwnProperty; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString$1 = objectProto$8.toString; - -/** Built-in value references. */ -var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ -function getRawTag(value) { - var isOwn = hasOwnProperty$6.call(value, symToStringTag$1), - tag = value[symToStringTag$1]; - - try { - value[symToStringTag$1] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto$7 = Object.prototype; - -/** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ -var nativeObjectToString = objectProto$7.toString; - -/** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ -function objectToString(value) { - return nativeObjectToString.call(value); -} - -/** `Object#toString` result references. */ -var nullTag = '[object Null]', - undefinedTag = '[object Undefined]'; - -/** Built-in value references. */ -var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : undefined; - -/** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ -function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); -} - -/** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ -function isObjectLike(value) { - return value != null && typeof value == 'object'; -} - -/** `Object#toString` result references. */ -var symbolTag = '[object Symbol]'; - -/** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ -function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); -} - -/** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ -function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; -} - -/** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ -var isArray = Array.isArray; - -/** Used as references for various `Number` constants. */ -var INFINITY$1 = 1 / 0; - -/** Used to convert symbols to primitives and strings. */ -var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - -/** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ -function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result; -} - -/** Used to match a single whitespace character. */ -var reWhitespace = /\s/; - -/** - * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace - * character of `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the index of the last non-whitespace character. - */ -function trimmedEndIndex(string) { - var index = string.length; - - while (index-- && reWhitespace.test(string.charAt(index))) {} - return index; -} - -/** Used to match leading whitespace. */ -var reTrimStart = /^\s+/; - -/** - * The base implementation of `_.trim`. - * - * @private - * @param {string} string The string to trim. - * @returns {string} Returns the trimmed string. - */ -function baseTrim(string) { - return string - ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') - : string; -} - -/** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ -function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); -} - -/** Used as references for various `Number` constants. */ -var NAN = 0 / 0; - -/** Used to detect bad signed hexadecimal string values. */ -var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - -/** Used to detect binary string values. */ -var reIsBinary = /^0b[01]+$/i; - -/** Used to detect octal string values. */ -var reIsOctal = /^0o[0-7]+$/i; - -/** Built-in method references without a dependency on `root`. */ -var freeParseInt = parseInt; - -/** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ -function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); -} - -/** Used as references for various `Number` constants. */ -var INFINITY = 1 / 0, - MAX_INTEGER = 1.7976931348623157e+308; - -/** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ -function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; -} - -/** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ -function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; -} - -/** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ -function identity(value) { - return value; -} - -/** `Object#toString` result references. */ -var asyncTag = '[object AsyncFunction]', - funcTag$1 = '[object Function]', - genTag = '[object GeneratorFunction]', - proxyTag = '[object Proxy]'; - -/** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ -function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag$1 || tag == genTag || tag == asyncTag || tag == proxyTag; -} - -/** Used to detect overreaching core-js shims. */ -var coreJsData = root['__core-js_shared__']; - -/** Used to detect methods masquerading as native. */ -var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; -}()); - -/** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ -function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); -} - -/** Used for built-in method references. */ -var funcProto$1 = Function.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString$1 = funcProto$1.toString; - -/** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ -function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; -} - -/** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - -/** Used to detect host constructors (Safari). */ -var reIsHostCtor = /^\[object .+?Constructor\]$/; - -/** Used for built-in method references. */ -var funcProto = Function.prototype, - objectProto$6 = Object.prototype; - -/** Used to resolve the decompiled source of functions. */ -var funcToString = funcProto.toString; - -/** Used to check objects for own properties. */ -var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - -/** Used to detect if a method is native. */ -var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty$5).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' -); - -/** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ -function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); -} - -/** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ -function getValue(object, key) { - return object == null ? undefined : object[key]; -} - -/** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ -function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; -} - -/** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ -function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} - -/** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ -function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; -} - -/** Used to detect hot functions by number of calls within a span of milliseconds. */ -var HOT_COUNT = 800, - HOT_SPAN = 16; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeNow = Date.now; - -/** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ -function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); - }; -} - -/** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ -function constant(value) { - return function() { - return value; - }; -} - -var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} -}()); - -/** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); -}; - -/** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ -var setToString = shortOut(baseSetToString); - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$2 = 9007199254740991; - -/** Used to detect unsigned integer values. */ -var reIsUint = /^(?:0|[1-9]\d*)$/; - -/** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ -function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$2 : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); -} - -/** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } -} - -/** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ -function eq(value, other) { - return value === other || (value !== value && other !== other); -} - -/** Used for built-in method references. */ -var objectProto$5 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$4 = objectProto$5.hasOwnProperty; - -/** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ -function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$4.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } -} - -/** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ -function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMax$1 = Math.max; - -/** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ -function overRest(func, start, transform) { - start = nativeMax$1(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax$1(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} - -/** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ -function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER$1 = 9007199254740991; - -/** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ -function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1; -} - -/** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ -function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); -} - -/** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ -function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; -} - -/** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ -function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); -} - -/** Used for built-in method references. */ -var objectProto$4 = Object.prototype; - -/** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ -function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$4; - - return value === proto; -} - -/** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ -function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} - -/** `Object#toString` result references. */ -var argsTag$1 = '[object Arguments]'; - -/** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ -function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$1; -} - -/** Used for built-in method references. */ -var objectProto$3 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - -/** Built-in value references. */ -var propertyIsEnumerable = objectProto$3.propertyIsEnumerable; - -/** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ -var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$3.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); -}; - -/** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ -function stubFalse() { - return false; -} - -/** Detect free variable `exports`. */ -var freeExports$1 = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule$1 = freeExports$1 && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - -/** Built-in value references. */ -var Buffer = moduleExports$1 ? root.Buffer : undefined; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined; - -/** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ -var isBuffer = nativeIsBuffer || stubFalse; - -/** `Object#toString` result references. */ -var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag$1 = '[object RegExp]', - setTag = '[object Set]', - stringTag$1 = '[object String]', - weakMapTag = '[object WeakMap]'; - -var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - -/** Used to identify `toStringTag` values of typed arrays. */ -var typedArrayTags = {}; -typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = -typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = -typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = -typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = -typedArrayTags[uint32Tag] = true; -typedArrayTags[argsTag] = typedArrayTags[arrayTag] = -typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = -typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = -typedArrayTags[errorTag] = typedArrayTags[funcTag] = -typedArrayTags[mapTag] = typedArrayTags[numberTag] = -typedArrayTags[objectTag] = typedArrayTags[regexpTag$1] = -typedArrayTags[setTag] = typedArrayTags[stringTag$1] = -typedArrayTags[weakMapTag] = false; - -/** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ -function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; -} - -/** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ -function baseUnary(func) { - return function(value) { - return func(value); - }; -} - -/** Detect free variable `exports`. */ -var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - -/** Detect free variable `module`. */ -var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - -/** Detect the popular CommonJS extension `module.exports`. */ -var moduleExports = freeModule && freeModule.exports === freeExports; - -/** Detect free variable `process` from Node.js. */ -var freeProcess = moduleExports && freeGlobal.process; - -/** Used to access faster Node.js helpers. */ -var nodeUtil = (function() { - try { - // Use `util.types` for Node.js 10+. - var types = freeModule && freeModule.require && freeModule.require('util').types; - - if (types) { - return types; - } - - // Legacy `process.binding('util')` for Node.js < 10. - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} -}()); - -/* Node.js helper references. */ -var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - -/** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ -var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - -/** Used for built-in method references. */ -var objectProto$2 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - -/** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ -function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty$2.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; -} - -/** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ -function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeKeys = overArg(Object.keys, Object); - -/** Used for built-in method references. */ -var objectProto$1 = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - -/** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$1.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ -function keys$1(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); -} - -/** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} - -/** Used for built-in method references. */ -var objectProto = Object.prototype; - -/** Used to check objects for own properties. */ -var hasOwnProperty = objectProto.hasOwnProperty; - -/** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ -function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; -} - -/** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ -function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} - -/** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ -var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); -}); - -/** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ -function toString(value) { - return value == null ? '' : baseToString(value); -} - -/** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ -function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; -} - -/** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ -function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange$1 = '\\ud800-\\udfff', - rsComboMarksRange$1 = '\\u0300-\\u036f', - reComboHalfMarksRange$1 = '\\ufe20-\\ufe2f', - rsComboSymbolsRange$1 = '\\u20d0-\\u20ff', - rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, - rsVarRange$1 = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsZWJ$1 = '\\u200d'; - -/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ -var reHasUnicode = RegExp('[' + rsZWJ$1 + rsAstralRange$1 + rsComboRange$1 + rsVarRange$1 + ']'); - -/** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ -function hasUnicode(string) { - return reHasUnicode.test(string); -} - -/** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function asciiToArray(string) { - return string.split(''); -} - -/** Used to compose unicode character classes. */ -var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - -/** Used to compose unicode capture groups. */ -var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - -/** Used to compose unicode regexes. */ -var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - -/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ -var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - -/** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function unicodeToArray(string) { - return string.match(reUnicode) || []; -} - -/** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ -function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); -} - -/** - * Creates a function like `_.lowerFirst`. - * - * @private - * @param {string} methodName The name of the `String` case method to use. - * @returns {Function} Returns the new case function. - */ -function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - - var strSymbols = hasUnicode(string) - ? stringToArray(string) - : undefined; - - var chr = strSymbols - ? strSymbols[0] - : string.charAt(0); - - var trailing = strSymbols - ? castSlice(strSymbols, 1).join('') - : string.slice(1); - - return chr[methodName]() + trailing; - }; -} - -/** - * Converts the first character of `string` to upper case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.upperFirst('fred'); - * // => 'Fred' - * - * _.upperFirst('FRED'); - * // => 'FRED' - */ -var upperFirst = createCaseFirst('toUpperCase'); - -/** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ -function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); -} - -/** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; -} - -/** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ -function castFunction(value) { - return typeof value == 'function' ? value : identity; -} - -/** `Object#toString` result references. */ -var stringTag = '[object String]'; - -/** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ -function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); -} - -/** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ -function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); -} - -/** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ -function values$1(object) { - return object == null ? [] : baseValues(object, keys$1(object)); -} - -/** `Object#toString` result references. */ -var regexpTag = '[object RegExp]'; - -/** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ -function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; -} - -/* Node.js helper references. */ -var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - -/** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ -var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeFloor = Math.floor, - nativeRandom$1 = Math.random; - -/** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ -function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom$1() * (upper - lower + 1)); -} - -/** Built-in method references without a dependency on `root`. */ -var freeParseFloat = parseFloat; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin$1 = Math.min, - nativeRandom = Math.random; - -/** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ -function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin$1(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); -} - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeCeil = Math.ceil, - nativeMax = Math.max; - -/** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ -function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; -} - -/** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ -function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; -} - -/** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ -var range = createRange(); - -/** - * A specialized version of `_.sample` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @returns {*} Returns the random element. - */ -function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : undefined; -} - -/** - * The base implementation of `_.sample`. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - */ -function baseSample(collection) { - return arraySample(values$1(collection)); -} - -/** - * Gets a random element from `collection`. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @returns {*} Returns the random element. - * @example - * - * _.sample([1, 2, 3, 4]); - * // => 2 - */ -function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); -} - -/** - * A specialized version of `_.shuffle` which mutates and sets the size of `array`. - * - * @private - * @param {Array} array The array to shuffle. - * @param {number} [size=array.length] The size of `array`. - * @returns {Array} Returns `array`. - */ -function shuffleSelf(array, size) { - var index = -1, - length = array.length, - lastIndex = length - 1; - - size = size === undefined ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), - value = array[rand]; - - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; -} - -/** - * A specialized version of `_.sampleSize` for arrays. - * - * @private - * @param {Array} array The array to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); -} - -/** - * The base implementation of `_.sampleSize` without param guards. - * - * @private - * @param {Array|Object} collection The collection to sample. - * @param {number} n The number of elements to sample. - * @returns {Array} Returns the random elements. - */ -function baseSampleSize(collection, n) { - var array = values$1(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); -} - -/** - * Gets `n` random elements at unique keys from `collection` up to the - * size of `collection`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Collection - * @param {Array|Object} collection The collection to sample. - * @param {number} [n=1] The number of elements to sample. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the random elements. - * @example - * - * _.sampleSize([1, 2, 3], 2); - * // => [3, 1] - * - * _.sampleSize([1, 2, 3], 4); - * // => [2, 3, 1] - */ -function sampleSize(collection, n, guard) { - if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); -} - -/** - * A specialized version of `_.shuffle` for arrays. - * - * @private - * @param {Array} array The array to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); -} - -/** - * The base implementation of `_.shuffle`. - * - * @private - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - */ -function baseShuffle(collection) { - return shuffleSelf(values$1(collection)); -} - -/** - * Creates an array of shuffled values, using a version of the - * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to shuffle. - * @returns {Array} Returns the new shuffled array. - * @example - * - * _.shuffle([1, 2, 3, 4]); - * // => [4, 1, 3, 2] - */ -function shuffle$1(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); -} - -/** Used as references for various `Number` constants. */ -var MAX_SAFE_INTEGER = 9007199254740991; - -/** Used as references for the maximum length and index of an array. */ -var MAX_ARRAY_LENGTH = 4294967295; - -/* Built-in method references for those with the same name as other `lodash` methods. */ -var nativeMin = Math.min; - -/** - * Invokes the iteratee `n` times, returning an array of the results of - * each invocation. The iteratee is invoked with one argument; (index). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the array of results. - * @example - * - * _.times(3, String); - * // => ['0', '1', '2'] - * - * _.times(4, _.constant(0)); - * // => [0, 0, 0, 0] - */ -function times(n, iteratee) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER) { - return []; - } - var index = MAX_ARRAY_LENGTH, - length = nativeMin(n, MAX_ARRAY_LENGTH); - - iteratee = castFunction(iteratee); - n -= MAX_ARRAY_LENGTH; - - var result = baseTimes(length, iteratee); - while (++index < n) { - iteratee(index); - } - return result; -} - -// 使用 lodash 提供的方式 -function type(obj) { - return obj === null || obj === undefined - ? String(obj) - : Object.prototype.toString - .call(obj) - .match(/\[object (\w+)\]/)[1] - .toLowerCase(); -} - -function isObjectOrArray(value) { - return isObject(value) || isArray(value); -} - -function isNumeric(value) { - return !isNaN(parseFloat(value)) && isFinite(value); -} - -// import { isObject, isArray } from "./type.js"; -function extend(...args) { - return assignIn(this, ...args); -} - -function each(obj, iterator, context) { - // each - let i; - let key; - if (type(obj) === 'number') { - // 表示重复几次 - [...Array(obj).keys()].forEach((index) => iterator(index, index)); - } else if (obj.length === +obj.length) { - for (i = 0; i < obj.length; i++) { - if (iterator.call(context, obj[i], i, obj) === false) break; - } - } else { - for (key in obj) { - if (iterator.call(context, obj[key], key, obj) === false) break; - } - } -} - -/* - ### Mock.heredoc(fn) - - * Mock.heredoc(fn) - - 以直观、安全的方式书写(多行)HTML 模板。 - - **使用示例**如下所示: - - var tpl = Mock.heredoc(function() { - /*! - {{email}}{{age}} - - *\/ - }) - - **相关阅读** - * [Creating multiline strings in JavaScript](http://stackoverflow.com/questions/805107/creating-multiline-strings-in-javascript)、 -*/ -function heredoc(fn) { - // 1. 移除起始的 function(){ /*! - // 2. 移除末尾的 */ } - // 3. 移除起始和末尾的空格 - return fn - .toString() - .replace(/^[^\/]+\/\*!?/, '') - .replace(/\*\/[^\/]+$/, '') - .replace(/^[\s\xA0]+/, '') - .replace(/[\s\xA0]+$/, ''); // .trim() -} - -/* - ## Utilities -*/ -function keys(obj) { - return Object.keys(obj); -} -function values(obj) { - return Object.values(obj); -} -function noop() {} - -var Util = /*#__PURE__*/Object.freeze({ - __proto__: null, - keys: keys, - values: values, - noop: noop, - type: type, - extend: extend, - isObjectOrArray: isObjectOrArray, - isNumeric: isNumeric, - isString: isString, - isObject: isObject, - isArray: isArray, - isRegExp: isRegExp, - isFunction: isFunction, - each: each, - heredoc: heredoc -}); - -const isNumber = function (el) { - return typeof el === 'number' && !isNaN(el); -}; -const numberGate = function (input) { - if (isNumber(input)) return input; - const res = parseInt(input); - return isNumber(res) ? res : undefined; -}; -// 返回一个随机的整数。 -const integer = function (min, max) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - return random(min, max, false); -}; -const natural = function (min, max) { - return Math.abs(integer(min, max)); -}; - -const float = function (min, max, dmin, dmax) { - min = numberGate(min); - if (!isNumber(min)) min = -9007199254740992; - max = numberGate(max); - if (!isNumber(max)) max = 9007199254740992; - dmin = numberGate(dmin) || 1; - dmax = numberGate(dmax) || 17; - if (dmin < 1) dmin = 1; - if (dmax > 17) dmax = 17; - const dcount = random(dmin, dmax, false); - return parseFloat(random(min, max, true).toFixed(dcount)); -}; - -const boolean$1 = function (min, max, cur = false) { - // ! cur:boolean 是划分概率的一个启动符号 - // if (cur) { - // min = isNumber(min) ? parseInt(min, 10) : 1; - // max = isNumber(max) ? parseInt(max, 10) : 1; - // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; - // } - if (cur) { - return random(0, min + max) > min ? !cur : cur; - } - return random(10, -10) > 0; -}; - -const pools = { - lower: 'abcdefghijklmnopqrstuvwxyz', - upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', - number: '0123456789', - symbol: '!@#$%^&*()[]', -}; -pools.alpha = pools.lower + pools.upper; -pools.default = pools.lower + pools.upper + pools.number + pools.symbol; - -const character = function (pool = 'default') { - if (pools.hasOwnProperty(pool.toLocaleLowerCase())) { - pool = pools[pool.toLowerCase()]; - } - return sample(pool); -}; - -const string$1 = function (...args) { - let len; - let pool; - let min; - let max; - switch (args.length) { - case 0: // () - len = natural(3, 7); - break; - case 1: // ( length ) - [len] = args; - break; - case 2: - // ( pool, length ) - if (typeof args[0] === 'string') { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - return times(len, () => character(pool)).join(''); -}; - -function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; -} - -var colorName$1 = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var isArrayish = function isArrayish(obj) { - if (!obj || typeof obj === 'string') { - return false; - } - - return obj instanceof Array || Array.isArray(obj) || - (obj.length >= 0 && (obj.splice instanceof Function || - (Object.getOwnPropertyDescriptor(obj, (obj.length - 1)) && obj.constructor.name !== 'String'))); -}; - -var simpleSwizzle = createCommonjsModule(function (module) { - - - -var concat = Array.prototype.concat; -var slice = Array.prototype.slice; - -var swizzle = module.exports = function swizzle(args) { - var results = []; - - for (var i = 0, len = args.length; i < len; i++) { - var arg = args[i]; - - if (isArrayish(arg)) { - // http://jsperf.com/javascript-array-concat-vs-push/98 - results = concat.call(results, slice.call(arg)); - } else { - results.push(arg); - } - } - - return results; -}; - -swizzle.wrap = function (fn) { - return function () { - return fn(swizzle(arguments)); - }; -}; -}); - -var colorString = createCommonjsModule(function (module) { -/* MIT license */ - - - -var reverseNames = {}; - -// create a list of reverse color names -for (var name in colorName$1) { - if (colorName$1.hasOwnProperty(name)) { - reverseNames[colorName$1[name]] = name; - } -} - -var cs = module.exports = { - to: {}, - get: {} -}; - -cs.get = function (string) { - var prefix = string.substring(0, 3).toLowerCase(); - var val; - var model; - switch (prefix) { - case 'hsl': - val = cs.get.hsl(string); - model = 'hsl'; - break; - case 'hwb': - val = cs.get.hwb(string); - model = 'hwb'; - break; - default: - val = cs.get.rgb(string); - model = 'rgb'; - break; - } - - if (!val) { - return null; - } - - return {model: model, value: val}; -}; - -cs.get.rgb = function (string) { - if (!string) { - return null; - } - - var abbr = /^#([a-f0-9]{3,4})$/i; - var hex = /^#([a-f0-9]{6})([a-f0-9]{2})?$/i; - var rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var keyword = /(\D+)/; - - var rgb = [0, 0, 0, 1]; - var match; - var i; - var hexAlpha; - - if (match = string.match(hex)) { - hexAlpha = match[2]; - match = match[1]; - - for (i = 0; i < 3; i++) { - // https://jsperf.com/slice-vs-substr-vs-substring-methods-long-string/19 - var i2 = i * 2; - rgb[i] = parseInt(match.slice(i2, i2 + 2), 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha, 16) / 255; - } - } else if (match = string.match(abbr)) { - match = match[1]; - hexAlpha = match[3]; - - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i] + match[i], 16); - } - - if (hexAlpha) { - rgb[3] = parseInt(hexAlpha + hexAlpha, 16) / 255; - } - } else if (match = string.match(rgba)) { - for (i = 0; i < 3; i++) { - rgb[i] = parseInt(match[i + 1], 0); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(per)) { - for (i = 0; i < 3; i++) { - rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55); - } - - if (match[4]) { - rgb[3] = parseFloat(match[4]); - } - } else if (match = string.match(keyword)) { - if (match[1] === 'transparent') { - return [0, 0, 0, 0]; - } - - rgb = colorName$1[match[1]]; - - if (!rgb) { - return null; - } - - rgb[3] = 1; - - return rgb; - } else { - return null; - } - - for (i = 0; i < 3; i++) { - rgb[i] = clamp(rgb[i], 0, 255); - } - rgb[3] = clamp(rgb[3], 0, 1); - - return rgb; -}; - -cs.get.hsl = function (string) { - if (!string) { - return null; - } - - var hsl = /^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hsl); - - if (match) { - var alpha = parseFloat(match[4]); - var h = (parseFloat(match[1]) + 360) % 360; - var s = clamp(parseFloat(match[2]), 0, 100); - var l = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - - return [h, s, l, a]; - } - - return null; -}; - -cs.get.hwb = function (string) { - if (!string) { - return null; - } - - var hwb = /^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/; - var match = string.match(hwb); - - if (match) { - var alpha = parseFloat(match[4]); - var h = ((parseFloat(match[1]) % 360) + 360) % 360; - var w = clamp(parseFloat(match[2]), 0, 100); - var b = clamp(parseFloat(match[3]), 0, 100); - var a = clamp(isNaN(alpha) ? 1 : alpha, 0, 1); - return [h, w, b, a]; - } - - return null; -}; - -cs.to.hex = function () { - var rgba = simpleSwizzle(arguments); - - return ( - '#' + - hexDouble(rgba[0]) + - hexDouble(rgba[1]) + - hexDouble(rgba[2]) + - (rgba[3] < 1 - ? (hexDouble(Math.round(rgba[3] * 255))) - : '') - ); -}; - -cs.to.rgb = function () { - var rgba = simpleSwizzle(arguments); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ')' - : 'rgba(' + Math.round(rgba[0]) + ', ' + Math.round(rgba[1]) + ', ' + Math.round(rgba[2]) + ', ' + rgba[3] + ')'; -}; - -cs.to.rgb.percent = function () { - var rgba = simpleSwizzle(arguments); - - var r = Math.round(rgba[0] / 255 * 100); - var g = Math.round(rgba[1] / 255 * 100); - var b = Math.round(rgba[2] / 255 * 100); - - return rgba.length < 4 || rgba[3] === 1 - ? 'rgb(' + r + '%, ' + g + '%, ' + b + '%)' - : 'rgba(' + r + '%, ' + g + '%, ' + b + '%, ' + rgba[3] + ')'; -}; - -cs.to.hsl = function () { - var hsla = simpleSwizzle(arguments); - return hsla.length < 4 || hsla[3] === 1 - ? 'hsl(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%)' - : 'hsla(' + hsla[0] + ', ' + hsla[1] + '%, ' + hsla[2] + '%, ' + hsla[3] + ')'; -}; - -// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax -// (hwb have alpha optional & 1 is default value) -cs.to.hwb = function () { - var hwba = simpleSwizzle(arguments); - - var a = ''; - if (hwba.length >= 4 && hwba[3] !== 1) { - a = ', ' + hwba[3]; - } - - return 'hwb(' + hwba[0] + ', ' + hwba[1] + '%, ' + hwba[2] + '%' + a + ')'; -}; - -cs.to.keyword = function (rgb) { - return reverseNames[rgb.slice(0, 3)]; -}; - -// helpers -function clamp(num, min, max) { - return Math.min(Math.max(min, num), max); -} - -function hexDouble(num) { - var str = num.toString(16).toUpperCase(); - return (str.length < 2) ? '0' + str : str; -} -}); -colorString.to; -colorString.get; - -var colorName = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - -var conversions = createCommonjsModule(function (module) { -/* MIT license */ - - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -var reverseKeywords = {}; -for (var key in colorName) { - if (colorName.hasOwnProperty(key)) { - reverseKeywords[colorName[key]] = key; - } -} - -var convert = module.exports = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -// hide .channels and .labels properties -for (var model in convert) { - if (convert.hasOwnProperty(model)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - var channels = convert[model].channels; - var labels = convert[model].labels; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); - } -} - -convert.rgb.hsl = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var min = Math.min(r, g, b); - var max = Math.max(r, g, b); - var delta = max - min; - var h; - var s; - var l; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - var rdif; - var gdif; - var bdif; - var h; - var s; - - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var v = Math.max(r, g, b); - var diff = v - Math.min(r, g, b); - var diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - var r = rgb[0]; - var g = rgb[1]; - var b = rgb[2]; - var h = convert.rgb.hsl(rgb)[0]; - var w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var c; - var m; - var y; - var k; - - k = Math.min(1 - r, 1 - g, 1 - b); - c = (1 - r - k) / (1 - k) || 0; - m = (1 - g - k) / (1 - k) || 0; - y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -/** - * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - * */ -function comparativeDistance(x, y) { - return ( - Math.pow(x[0] - y[0], 2) + - Math.pow(x[1] - y[1], 2) + - Math.pow(x[2] - y[2], 2) - ); -} - -convert.rgb.keyword = function (rgb) { - var reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - var currentClosestDistance = Infinity; - var currentClosestKeyword; - - for (var keyword in colorName) { - if (colorName.hasOwnProperty(keyword)) { - var value = colorName[keyword]; - - // Compute comparative distance - var distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return colorName[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - - // assume sRGB - r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92); - g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92); - b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92); - - var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - var xyz = convert.rgb.xyz(rgb); - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - var h = hsl[0] / 360; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var t1; - var t2; - var t3; - var rgb; - var val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - t1 = 2 * l - t2; - - rgb = [0, 0, 0]; - for (var i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - var h = hsl[0]; - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var smin = s; - var lmin = Math.max(l, 0.01); - var sv; - var v; - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - v = (l + s) / 2; - sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - var h = hsv[0] / 60; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var hi = Math.floor(h) % 6; - - var f = h - Math.floor(h); - var p = 255 * v * (1 - s); - var q = 255 * v * (1 - (s * f)); - var t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - var h = hsv[0]; - var s = hsv[1] / 100; - var v = hsv[2] / 100; - var vmin = Math.max(v, 0.01); - var lmin; - var sl; - var l; - - l = (2 - s) * v; - lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - var h = hwb[0] / 360; - var wh = hwb[1] / 100; - var bl = hwb[2] / 100; - var ratio = wh + bl; - var i; - var v; - var f; - var n; - - // wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - i = Math.floor(6 * h); - v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - n = wh + f * (v - wh); // linear interpolation - - var r; - var g; - var b; - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - var c = cmyk[0] / 100; - var m = cmyk[1] / 100; - var y = cmyk[2] / 100; - var k = cmyk[3] / 100; - var r; - var g; - var b; - - r = 1 - Math.min(1, c * (1 - k) + k); - g = 1 - Math.min(1, m * (1 - k) + k); - b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - var x = xyz[0] / 100; - var y = xyz[1] / 100; - var z = xyz[2] / 100; - var r; - var g; - var b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // assume sRGB - r = r > 0.0031308 - ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - var x = xyz[0]; - var y = xyz[1]; - var z = xyz[2]; - var l; - var a; - var b; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116); - - l = (116 * y) - 16; - a = 500 * (x - y); - b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var x; - var y; - var z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - var y2 = Math.pow(y, 3); - var x2 = Math.pow(x, 3); - var z2 = Math.pow(z, 3); - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - var l = lab[0]; - var a = lab[1]; - var b = lab[2]; - var hr; - var h; - var c; - - hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - var l = lch[0]; - var c = lch[1]; - var h = lch[2]; - var a; - var b; - var hr; - - hr = h / 360 * 2 * Math.PI; - a = c * Math.cos(hr); - b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - var ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - var r = args[0]; - var g = args[1]; - var b = args[2]; - - // we use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - var ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - var color = args % 10; - - // handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - var mult = (~~(args > 50) + 1) * 0.5; - var r = ((color & 1) * mult) * 255; - var g = (((color >> 1) & 1) * mult) * 255; - var b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // handle greyscale - if (args >= 232) { - var c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - var rem; - var r = Math.floor(args / 36) / 5 * 255; - var g = Math.floor((rem = args % 36) / 6) / 5 * 255; - var b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - var integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - var colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(function (char) { - return char + char; - }).join(''); - } - - var integer = parseInt(colorString, 16); - var r = (integer >> 16) & 0xFF; - var g = (integer >> 8) & 0xFF; - var b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - var r = rgb[0] / 255; - var g = rgb[1] / 255; - var b = rgb[2] / 255; - var max = Math.max(Math.max(r, g), b); - var min = Math.min(Math.min(r, g), b); - var chroma = (max - min); - var grayscale; - var hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma + 4; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - var s = hsl[1] / 100; - var l = hsl[2] / 100; - var c = 1; - var f = 0; - - if (l < 0.5) { - c = 2.0 * s * l; - } else { - c = 2.0 * s * (1.0 - l); - } - - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - var s = hsv[1] / 100; - var v = hsv[2] / 100; - - var c = s * v; - var f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - var h = hcg[0] / 360; - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - var pure = [0, 0, 0]; - var hi = (h % 1) * 6; - var v = hi % 1; - var w = 1 - v; - var mg = 0; - - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var v = c + g * (1.0 - c); - var f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - - var l = g * (1.0 - c) + 0.5 * c; - var s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - var c = hcg[1] / 100; - var g = hcg[2] / 100; - var v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - var w = hwb[1] / 100; - var b = hwb[2] / 100; - var v = 1 - b; - var c = v - w; - var g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = convert.gray.hsv = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - var val = Math.round(gray[0] / 100 * 255) & 0xFF; - var integer = (val << 16) + (val << 8) + val; - - var string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - var val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; -}); -conversions.rgb; -conversions.hsl; -conversions.hsv; -conversions.hwb; -conversions.cmyk; -conversions.xyz; -conversions.lab; -conversions.lch; -conversions.hex; -conversions.keyword; -conversions.ansi16; -conversions.ansi256; -conversions.hcg; -conversions.apple; -conversions.gray; - -/* - this function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - var graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - var models = Object.keys(conversions); - - for (var len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - var graph = buildGraph(); - var queue = [fromModel]; // unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - var current = queue.pop(); - var adjacents = Object.keys(conversions[current]); - - for (var len = adjacents.length, i = 0; i < len; i++) { - var adjacent = adjacents[i]; - var node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - var path = [graph[toModel].parent, toModel]; - var fn = conversions[graph[toModel].parent][toModel]; - - var cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -var route = function (fromModel) { - var graph = deriveBFS(fromModel); - var conversion = {}; - - var models = Object.keys(graph); - for (var len = models.length, i = 0; i < len; i++) { - var toModel = models[i]; - var node = graph[toModel]; - - if (node.parent === null) { - // no possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - -var convert$1 = {}; - -var models = Object.keys(conversions); - -function wrapRaw(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - return fn(args); - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - var wrappedFn = function (args) { - if (args === undefined || args === null) { - return args; - } - - if (arguments.length > 1) { - args = Array.prototype.slice.call(arguments); - } - - var result = fn(args); - - // we're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (var len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(function (fromModel) { - convert$1[fromModel] = {}; - - Object.defineProperty(convert$1[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert$1[fromModel], 'labels', {value: conversions[fromModel].labels}); - - var routes = route(fromModel); - var routeModels = Object.keys(routes); - - routeModels.forEach(function (toModel) { - var fn = routes[toModel]; - - convert$1[fromModel][toModel] = wrapRounded(fn); - convert$1[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -var colorConvert = convert$1; - -var _slice = [].slice; - -var skippedModels = [ - // to be honest, I don't really feel like keyword belongs in color convert, but eh. - 'keyword', - - // gray conflicts with some method names, and has its own method defined. - 'gray', - - // shouldn't really be in color-convert either... - 'hex' -]; - -var hashedModelKeys = {}; -Object.keys(colorConvert).forEach(function (model) { - hashedModelKeys[_slice.call(colorConvert[model].labels).sort().join('')] = model; -}); - -var limiters = {}; - -function Color(obj, model) { - if (!(this instanceof Color)) { - return new Color(obj, model); - } - - if (model && model in skippedModels) { - model = null; - } - - if (model && !(model in colorConvert)) { - throw new Error('Unknown model: ' + model); - } - - var i; - var channels; - - if (obj == null) { // eslint-disable-line no-eq-null,eqeqeq - this.model = 'rgb'; - this.color = [0, 0, 0]; - this.valpha = 1; - } else if (obj instanceof Color) { - this.model = obj.model; - this.color = obj.color.slice(); - this.valpha = obj.valpha; - } else if (typeof obj === 'string') { - var result = colorString.get(obj); - if (result === null) { - throw new Error('Unable to parse color from string: ' + obj); - } - - this.model = result.model; - channels = colorConvert[this.model].channels; - this.color = result.value.slice(0, channels); - this.valpha = typeof result.value[channels] === 'number' ? result.value[channels] : 1; - } else if (obj.length) { - this.model = model || 'rgb'; - channels = colorConvert[this.model].channels; - var newArr = _slice.call(obj, 0, channels); - this.color = zeroArray(newArr, channels); - this.valpha = typeof obj[channels] === 'number' ? obj[channels] : 1; - } else if (typeof obj === 'number') { - // this is always RGB - can be converted later on. - obj &= 0xFFFFFF; - this.model = 'rgb'; - this.color = [ - (obj >> 16) & 0xFF, - (obj >> 8) & 0xFF, - obj & 0xFF - ]; - this.valpha = 1; - } else { - this.valpha = 1; - - var keys = Object.keys(obj); - if ('alpha' in obj) { - keys.splice(keys.indexOf('alpha'), 1); - this.valpha = typeof obj.alpha === 'number' ? obj.alpha : 0; - } - - var hashedKeys = keys.sort().join(''); - if (!(hashedKeys in hashedModelKeys)) { - throw new Error('Unable to parse color from object: ' + JSON.stringify(obj)); - } - - this.model = hashedModelKeys[hashedKeys]; - - var labels = colorConvert[this.model].labels; - var color = []; - for (i = 0; i < labels.length; i++) { - color.push(obj[labels[i]]); - } - - this.color = zeroArray(color); - } - - // perform limitations (clamping, etc.) - if (limiters[this.model]) { - channels = colorConvert[this.model].channels; - for (i = 0; i < channels; i++) { - var limit = limiters[this.model][i]; - if (limit) { - this.color[i] = limit(this.color[i]); - } - } - } - - this.valpha = Math.max(0, Math.min(1, this.valpha)); - - if (Object.freeze) { - Object.freeze(this); - } -} - -Color.prototype = { - toString: function () { - return this.string(); - }, - - toJSON: function () { - return this[this.model](); - }, - - string: function (places) { - var self = this.model in colorString.to ? this : this.rgb(); - self = self.round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to[self.model](args); - }, - - percentString: function (places) { - var self = this.rgb().round(typeof places === 'number' ? places : 1); - var args = self.valpha === 1 ? self.color : self.color.concat(this.valpha); - return colorString.to.rgb.percent(args); - }, - - array: function () { - return this.valpha === 1 ? this.color.slice() : this.color.concat(this.valpha); - }, - - object: function () { - var result = {}; - var channels = colorConvert[this.model].channels; - var labels = colorConvert[this.model].labels; - - for (var i = 0; i < channels; i++) { - result[labels[i]] = this.color[i]; - } - - if (this.valpha !== 1) { - result.alpha = this.valpha; - } - - return result; - }, - - unitArray: function () { - var rgb = this.rgb().color; - rgb[0] /= 255; - rgb[1] /= 255; - rgb[2] /= 255; - - if (this.valpha !== 1) { - rgb.push(this.valpha); - } - - return rgb; - }, - - unitObject: function () { - var rgb = this.rgb().object(); - rgb.r /= 255; - rgb.g /= 255; - rgb.b /= 255; - - if (this.valpha !== 1) { - rgb.alpha = this.valpha; - } - - return rgb; - }, - - round: function (places) { - places = Math.max(places || 0, 0); - return new Color(this.color.map(roundToPlace(places)).concat(this.valpha), this.model); - }, - - alpha: function (val) { - if (arguments.length) { - return new Color(this.color.concat(Math.max(0, Math.min(1, val))), this.model); - } - - return this.valpha; - }, - - // rgb - red: getset('rgb', 0, maxfn(255)), - green: getset('rgb', 1, maxfn(255)), - blue: getset('rgb', 2, maxfn(255)), - - hue: getset(['hsl', 'hsv', 'hsl', 'hwb', 'hcg'], 0, function (val) { return ((val % 360) + 360) % 360; }), // eslint-disable-line brace-style - - saturationl: getset('hsl', 1, maxfn(100)), - lightness: getset('hsl', 2, maxfn(100)), - - saturationv: getset('hsv', 1, maxfn(100)), - value: getset('hsv', 2, maxfn(100)), - - chroma: getset('hcg', 1, maxfn(100)), - gray: getset('hcg', 2, maxfn(100)), - - white: getset('hwb', 1, maxfn(100)), - wblack: getset('hwb', 2, maxfn(100)), - - cyan: getset('cmyk', 0, maxfn(100)), - magenta: getset('cmyk', 1, maxfn(100)), - yellow: getset('cmyk', 2, maxfn(100)), - black: getset('cmyk', 3, maxfn(100)), - - x: getset('xyz', 0, maxfn(100)), - y: getset('xyz', 1, maxfn(100)), - z: getset('xyz', 2, maxfn(100)), - - l: getset('lab', 0, maxfn(100)), - a: getset('lab', 1), - b: getset('lab', 2), - - keyword: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorConvert[this.model].keyword(this.color); - }, - - hex: function (val) { - if (arguments.length) { - return new Color(val); - } - - return colorString.to.hex(this.rgb().round().color); - }, - - rgbNumber: function () { - var rgb = this.rgb().color; - return ((rgb[0] & 0xFF) << 16) | ((rgb[1] & 0xFF) << 8) | (rgb[2] & 0xFF); - }, - - luminosity: function () { - // http://www.w3.org/TR/WCAG20/#relativeluminancedef - var rgb = this.rgb().color; - - var lum = []; - for (var i = 0; i < rgb.length; i++) { - var chan = rgb[i] / 255; - lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4); - } - - return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2]; - }, - - contrast: function (color2) { - // http://www.w3.org/TR/WCAG20/#contrast-ratiodef - var lum1 = this.luminosity(); - var lum2 = color2.luminosity(); - - if (lum1 > lum2) { - return (lum1 + 0.05) / (lum2 + 0.05); - } - - return (lum2 + 0.05) / (lum1 + 0.05); - }, - - level: function (color2) { - var contrastRatio = this.contrast(color2); - if (contrastRatio >= 7.1) { - return 'AAA'; - } - - return (contrastRatio >= 4.5) ? 'AA' : ''; - }, - - isDark: function () { - // YIQ equation from http://24ways.org/2010/calculating-color-contrast - var rgb = this.rgb().color; - var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000; - return yiq < 128; - }, - - isLight: function () { - return !this.isDark(); - }, - - negate: function () { - var rgb = this.rgb(); - for (var i = 0; i < 3; i++) { - rgb.color[i] = 255 - rgb.color[i]; - } - return rgb; - }, - - lighten: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] += hsl.color[2] * ratio; - return hsl; - }, - - darken: function (ratio) { - var hsl = this.hsl(); - hsl.color[2] -= hsl.color[2] * ratio; - return hsl; - }, - - saturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] += hsl.color[1] * ratio; - return hsl; - }, - - desaturate: function (ratio) { - var hsl = this.hsl(); - hsl.color[1] -= hsl.color[1] * ratio; - return hsl; - }, - - whiten: function (ratio) { - var hwb = this.hwb(); - hwb.color[1] += hwb.color[1] * ratio; - return hwb; - }, - - blacken: function (ratio) { - var hwb = this.hwb(); - hwb.color[2] += hwb.color[2] * ratio; - return hwb; - }, - - grayscale: function () { - // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale - var rgb = this.rgb().color; - var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11; - return Color.rgb(val, val, val); - }, - - fade: function (ratio) { - return this.alpha(this.valpha - (this.valpha * ratio)); - }, - - opaquer: function (ratio) { - return this.alpha(this.valpha + (this.valpha * ratio)); - }, - - rotate: function (degrees) { - var hsl = this.hsl(); - var hue = hsl.color[0]; - hue = (hue + degrees) % 360; - hue = hue < 0 ? 360 + hue : hue; - hsl.color[0] = hue; - return hsl; - }, - - mix: function (mixinColor, weight) { - // ported from sass implementation in C - // https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209 - if (!mixinColor || !mixinColor.rgb) { - throw new Error('Argument to "mix" was not a Color instance, but rather an instance of ' + typeof mixinColor); - } - var color1 = mixinColor.rgb(); - var color2 = this.rgb(); - var p = weight === undefined ? 0.5 : weight; - - var w = 2 * p - 1; - var a = color1.alpha() - color2.alpha(); - - var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0; - var w2 = 1 - w1; - - return Color.rgb( - w1 * color1.red() + w2 * color2.red(), - w1 * color1.green() + w2 * color2.green(), - w1 * color1.blue() + w2 * color2.blue(), - color1.alpha() * p + color2.alpha() * (1 - p)); - } -}; - -// model conversion methods and static constructors -Object.keys(colorConvert).forEach(function (model) { - if (skippedModels.indexOf(model) !== -1) { - return; - } - - var channels = colorConvert[model].channels; - - // conversion methods - Color.prototype[model] = function () { - if (this.model === model) { - return new Color(this); - } - - if (arguments.length) { - return new Color(arguments, model); - } - - var newAlpha = typeof arguments[channels] === 'number' ? channels : this.valpha; - return new Color(assertArray(colorConvert[this.model][model].raw(this.color)).concat(newAlpha), model); - }; - - // 'static' construction methods - Color[model] = function (color) { - if (typeof color === 'number') { - color = zeroArray(_slice.call(arguments), channels); - } - return new Color(color, model); - }; -}); - -function roundTo(num, places) { - return Number(num.toFixed(places)); -} - -function roundToPlace(places) { - return function (num) { - return roundTo(num, places); - }; -} - -function getset(model, channel, modifier) { - model = Array.isArray(model) ? model : [model]; - - model.forEach(function (m) { - (limiters[m] || (limiters[m] = []))[channel] = modifier; - }); - - model = model[0]; - - return function (val) { - var result; - - if (arguments.length) { - if (modifier) { - val = modifier(val); - } - - result = this[model](); - result.color[channel] = val; - return result; - } - - result = this[model]().color[channel]; - if (modifier) { - result = modifier(result); - } - - return result; - }; -} - -function maxfn(max) { - return function (v) { - return Math.max(0, Math.min(max, v)); - }; -} - -function assertArray(val) { - return Array.isArray(val) ? val : [val]; -} - -function zeroArray(arr, length) { - for (var i = 0; i < length; i++) { - if (typeof arr[i] !== 'number') { - arr[i] = 0; - } - } - - return arr; -} - -var color$1 = Color; - -/* - ## Color 字典数据 - - 字典数据来源 [A nicer color palette for the web](http://clrs.cc/) -*/ -var DICT$1 = { - // name value nicer - navy: { - value: '#000080', - nicer: '#001F3F', - }, - blue: { - value: '#0000ff', - nicer: '#0074D9', - }, - aqua: { - value: '#00ffff', - nicer: '#7FDBFF', - }, - teal: { - value: '#008080', - nicer: '#39CCCC', - }, - olive: { - value: '#008000', - nicer: '#3D9970', - }, - green: { - value: '#008000', - nicer: '#2ECC40', - }, - lime: { - value: '#00ff00', - nicer: '#01FF70', - }, - yellow: { - value: '#ffff00', - nicer: '#FFDC00', - }, - orange: { - value: '#ffa500', - nicer: '#FF851B', - }, - red: { - value: '#ff0000', - nicer: '#FF4136', - }, - maroon: { - value: '#800000', - nicer: '#85144B', - }, - fuchsia: { - value: '#ff00ff', - nicer: '#F012BE', - }, - purple: { - value: '#800080', - nicer: '#B10DC9', - }, - silver: { - value: '#c0c0c0', - nicer: '#DDDDDD', - }, - gray: { - value: '#808080', - nicer: '#AAAAAA', - }, - black: { - value: '#000000', - nicer: '#111111', - }, - white: { - value: '#FFFFFF', - nicer: '#FFFFFF', - }, -}; - -/* - ## Helpers -*/ - -const upper = function (str) { - return (str + '').toUpperCase(); -}; - -const lower = function (str) { - return (str + '').toLowerCase(); -}; - -// 从数组中随机选取一个元素,并返回。 -// 更改 pick 函数 , 函数不进行重载 -const pick = function (arr, ...args) { - let min; - let max; - let count; - switch (args.length) { - case 0: - return sample(arr); - case 1: - [count] = args; - return sampleSize(arr, count); - case 2: - [min, max] = args; - return sampleSize(arr, random(min, max)); - } -}; -/* - 打乱数组中元素的顺序,并返回。 - Given an array, scramble the order and return it. -*/ -const shuffle = function (arr, min, max) { - const result = shuffle$1(arr); - switch (arguments.length) { - case 0: - case 1: - return result; - case 2: - max = min; // 这里 max = undefined - /* falls through */ - case 3: - return result.slice(min, max); - } -}; -/* - * Random.order(item, item) - * Random.order([item, item ...]) - - 顺序获取数组中的元素 - - [JSON导入数组支持数组数据录入](https://github.com/thx/RAP/issues/22) - - 不支持单独调用! - */ -const Cache = {}; -const order = function (...array) { - // 重载 (item1,item2,item3) 和 ([item1,item2,item3]) - if (array.length === 1) array = array[0]; - - // options.context.path/templatePath - const options = order.options; - const templatePath = options.context.templatePath.join('.'); - - const cache = (Cache[templatePath] = Cache[templatePath] || { - index: 0, - array: array, - }); - - return cache.array[cache.index++ % cache.array.length]; -}; - -var RandomColor = [ - { - hex: "#5c2223", - name: "暗玉紫" - }, - { - hex: "#eea2a4", - name: "牡丹粉红" - }, - { - hex: "#5a191b", - name: "栗紫" - }, - { - hex: "#f07c82", - name: "香叶红" - }, - { - hex: "#5a1216", - name: "葡萄酱紫" - }, - { - hex: "#ed5a65", - name: "艳红" - }, - { - hex: "#c04851", - name: "玉红" - }, - { - hex: "#ee3f4d", - name: "茶花红" - }, - { - hex: "#c02c38", - name: "高粱红" - }, - { - hex: "#a7535a", - name: "满江红" - }, - { - hex: "#e3b4b8", - name: "鼠鼻红" - }, - { - hex: "#f0a1a8", - name: "合欢红" - }, - { - hex: "#f1939c", - name: "春梅红" - }, - { - hex: "#a61b29", - name: "苋菜红" - }, - { - hex: "#894e54", - name: "烟红" - }, - { - hex: "#c45a65", - name: "莓红" - }, - { - hex: "#d11a2d", - name: "鹅冠红" - }, - { - hex: "#c21f30", - name: "枫叶红" - }, - { - hex: "#de1c31", - name: "唐菖蒲红" - }, - { - hex: "#7c1823", - name: "枣红" - }, - { - hex: "#541e24", - name: "猪肝紫" - }, - { - hex: "#4c1f24", - name: "葡萄紫" - }, - { - hex: "#82202b", - name: "暗紫苑红" - }, - { - hex: "#82111f", - name: "殷红" - }, - { - hex: "#ef475d", - name: "草茉莉红" - }, - { - hex: "#4d1018", - name: "酱紫" - }, - { - hex: "#ed556a", - name: "山茶红" - }, - { - hex: "#7a7374", - name: "锌灰" - }, - { - hex: "#f03752", - name: "海棠红" - }, - { - hex: "#e6d2d5", - name: "蓟粉红" - }, - { - hex: "#f0c9cf", - name: "石蕊红" - }, - { - hex: "#ee2746", - name: "淡曙红" - }, - { - hex: "#2b1216", - name: "李紫" - }, - { - hex: "#ee4863", - name: "石竹红" - }, - { - hex: "#e77c8e", - name: "淡茜红" - }, - { - hex: "#500a16", - name: "金鱼紫" - }, - { - hex: "#c27c88", - name: "山黎豆红" - }, - { - hex: "#73575c", - name: "鼠背灰" - }, - { - hex: "#ee4866", - name: "淡蕊香红" - }, - { - hex: "#621624", - name: "甘蔗紫" - }, - { - hex: "#ce5777", - name: "月季红" - }, - { - hex: "#cc163a", - name: "尖晶玉红" - }, - { - hex: "#f1c4cd", - name: "水红" - }, - { - hex: "#eeb8c3", - name: "姜红" - }, - { - hex: "#856d72", - name: "芦灰" - }, - { - hex: "#2d0c13", - name: "茄皮紫" - }, - { - hex: "#36282b", - name: "苍蝇灰" - }, - { - hex: "#bf3553", - name: "锦葵红" - }, - { - hex: "#ec9bad", - name: "粉团花红" - }, - { - hex: "#63071c", - name: "石竹紫" - }, - { - hex: "#30161c", - name: "卵石紫" - }, - { - hex: "#eea6b7", - name: "晶红" - }, - { - hex: "#e9ccd3", - name: "芝兰紫" - }, - { - hex: "#eba0b3", - name: "芍药耕红" - }, - { - hex: "#4f383e", - name: "暮云灰" - }, - { - hex: "#ed9db2", - name: "豇豆红" - }, - { - hex: "#ec8aa4", - name: "报春红" - }, - { - hex: "#ec7696", - name: "淡绛红" - }, - { - hex: "#ea7293", - name: "凤仙花红" - }, - { - hex: "#ef82a0", - name: "霞光红" - }, - { - hex: "#ec2c64", - name: "喜蛋红" - }, - { - hex: "#eb507e", - name: "夹竹桃红" - }, - { - hex: "#eb3c70", - name: "松叶牡丹红" - }, - { - hex: "#ea517f", - name: "莲瓣红" - }, - { - hex: "#de7897", - name: "白芨红" - }, - { - hex: "#b598a1", - name: "隐红灰" - }, - { - hex: "#ed2f6a", - name: "榲桲红" - }, - { - hex: "#c5708b", - name: "酢酱草红" - }, - { - hex: "#33141e", - name: "火鹅紫" - }, - { - hex: "#621d34", - name: "鹞冠紫" - }, - { - hex: "#ef3473", - name: "品红" - }, - { - hex: "#382129", - name: "磨石紫" - }, - { - hex: "#310f1b", - name: "墨紫" - }, - { - hex: "#381924", - name: "檀紫" - }, - { - hex: "#e16c96", - name: "初荷红" - }, - { - hex: "#951c48", - name: "菜头紫" - }, - { - hex: "#62102e", - name: "葡萄酒红" - }, - { - hex: "#e0c8d1", - name: "淡青紫" - }, - { - hex: "#d13c74", - name: "菠根红" - }, - { - hex: "#4b1e2f", - name: "海象紫" - }, - { - hex: "#ec4e8a", - name: "兔眼红" - }, - { - hex: "#de3f7c", - name: "嫩菱红" - }, - { - hex: "#a8456b", - name: "洋葱紫" - }, - { - hex: "#ce5e8a", - name: "吊钟花红" - }, - { - hex: "#461629", - name: "绀紫" - }, - { - hex: "#ee2c79", - name: "紫荆红" - }, - { - hex: "#ef498b", - name: "扁豆花红" - }, - { - hex: "#ede3e7", - name: "马鞭草紫" - }, - { - hex: "#ec2d7a", - name: "藏花红" - }, - { - hex: "#482936", - name: "斑鸠灰" - }, - { - hex: "#440e25", - name: "古铜紫" - }, - { - hex: "#d2568c", - name: "丹紫红" - }, - { - hex: "#e9d7df", - name: "丁香淡紫" - }, - { - hex: "#d2357d", - name: "玫瑰红" - }, - { - hex: "#36292f", - name: "古鼎灰" - }, - { - hex: "#d276a3", - name: "菱锰红" - }, - { - hex: "#c06f98", - name: "樱草紫" - }, - { - hex: "#cc5595", - name: "龙须红" - }, - { - hex: "#c35691", - name: "电气石红" - }, - { - hex: "#ba2f7b", - name: "玫瑰紫" - }, - { - hex: "#9b1e64", - name: "苋菜紫" - }, - { - hex: "#5d3f51", - name: "紫灰" - }, - { - hex: "#4e2a40", - name: "龙睛鱼紫" - }, - { - hex: "#bc84a8", - name: "青蛤壳紫" - }, - { - hex: "#c08eaf", - name: "萝兰紫" - }, - { - hex: "#411c35", - name: "荸荠紫" - }, - { - hex: "#ad6598", - name: "豆蔻紫" - }, - { - hex: "#a35c8f", - name: "扁豆紫" - }, - { - hex: "#681752", - name: "牵牛紫" - }, - { - hex: "#894276", - name: "芓紫" - }, - { - hex: "#7e2065", - name: "葛巾紫" - }, - { - hex: "#8b2671", - name: "青莲" - }, - { - hex: "#983680", - name: "芥花紫" - }, - { - hex: "#c8adc4", - name: "凤信紫" - }, - { - hex: "#1c0d1a", - name: "深牵牛紫" - }, - { - hex: "#7e1671", - name: "魏紫" - }, - { - hex: "#1e131d", - name: "乌梅紫" - }, - { - hex: "#813c85", - name: "桔梗紫" - }, - { - hex: "#d1c2d3", - name: "淡牵牛紫" - }, - { - hex: "#3e3841", - name: "剑锋紫" - }, - { - hex: "#815c94", - name: "蕈紫" - }, - { - hex: "#806d9e", - name: "槿紫" - }, - { - hex: "#e2e1e4", - name: "芡食白" - }, - { - hex: "#322f3b", - name: "龙葵紫" - }, - { - hex: "#8076a3", - name: "藤萝紫" - }, - { - hex: "#35333c", - name: "沙鱼灰" - }, - { - hex: "#22202e", - name: "暗龙胆紫" - }, - { - hex: "#131124", - name: "暗蓝紫" - }, - { - hex: "#302f4b", - name: "野葡萄紫" - }, - { - hex: "#525288", - name: "野菊紫" - }, - { - hex: "#2f2f35", - name: "水牛灰" - }, - { - hex: "#ccccd6", - name: "远山紫" - }, - { - hex: "#74759b", - name: "螺甸紫" - }, - { - hex: "#1f2040", - name: "晶石紫" - }, - { - hex: "#2e317c", - name: "满天星紫" - }, - { - hex: "#a7a8bd", - name: "淡蓝紫" - }, - { - hex: "#61649f", - name: "山梗紫" - }, - { - hex: "#2d2e36", - name: "牛角灰" - }, - { - hex: "#5e616d", - name: "鱼尾灰" - }, - { - hex: "#47484c", - name: "瓦罐灰" - }, - { - hex: "#0f1423", - name: "钢蓝" - }, - { - hex: "#131824", - name: "燕颔蓝" - }, - { - hex: "#475164", - name: "鲸鱼灰" - }, - { - hex: "#2b333e", - name: "青灰" - }, - { - hex: "#1c2938", - name: "鸽蓝" - }, - { - hex: "#101f30", - name: "暗蓝" - }, - { - hex: "#142334", - name: "钢青" - }, - { - hex: "#15559a", - name: "海涛蓝" - }, - { - hex: "#0f59a4", - name: "飞燕草蓝" - }, - { - hex: "#1661ab", - name: "靛青" - }, - { - hex: "#3170a7", - name: "安安蓝" - }, - { - hex: "#346c9c", - name: "海军蓝" - }, - { - hex: "#2775b6", - name: "景泰蓝" - }, - { - hex: "#2b73af", - name: "品蓝" - }, - { - hex: "#2474b5", - name: "尼罗蓝" - }, - { - hex: "#4e7ca1", - name: "蝶翅蓝" - }, - { - hex: "#2376b7", - name: "花青" - }, - { - hex: "#144a74", - name: "鷃蓝" - }, - { - hex: "#93b5cf", - name: "星蓝" - }, - { - hex: "#2177b8", - name: "虹蓝" - }, - { - hex: "#126bae", - name: "柏林蓝" - }, - { - hex: "#1772b4", - name: "群青" - }, - { - hex: "#baccd9", - name: "云水蓝" - }, - { - hex: "#619ac3", - name: "羽扇豆蓝" - }, - { - hex: "#495c69", - name: "战舰灰" - }, - { - hex: "#8fb2c9", - name: "晴山蓝" - }, - { - hex: "#5698c3", - name: "睛蓝" - }, - { - hex: "#11659a", - name: "搪磁蓝" - }, - { - hex: "#2983bb", - name: "潮蓝" - }, - { - hex: "#1677b3", - name: "天蓝" - }, - { - hex: "#c4cbcf", - name: "大理石灰" - }, - { - hex: "#1177b0", - name: "牵牛花蓝" - }, - { - hex: "#2486b9", - name: "宝石蓝" - }, - { - hex: "#5e7987", - name: "淡蓝灰" - }, - { - hex: "#74787a", - name: "嫩灰" - }, - { - hex: "#cdd1d3", - name: "银鱼白" - }, - { - hex: "#1781b5", - name: "釉蓝" - }, - { - hex: "#66a9c9", - name: "涧石蓝" - }, - { - hex: "#d0dfe6", - name: "远天蓝" - }, - { - hex: "#2f90b9", - name: "云山蓝" - }, - { - hex: "#8abcd1", - name: "秋波蓝" - }, - { - hex: "#c3d7df", - name: "井天蓝" - }, - { - hex: "#158bb8", - name: "鸢尾蓝" - }, - { - hex: "#d8e3e7", - name: "云峰白" - }, - { - hex: "#b2bbbe", - name: "星灰" - }, - { - hex: "#1a94bc", - name: "钴蓝" - }, - { - hex: "#5cb3cc", - name: "碧青" - }, - { - hex: "#134857", - name: "苍蓝" - }, - { - hex: "#132c33", - name: "深灰蓝" - }, - { - hex: "#21373d", - name: "灰蓝" - }, - { - hex: "#b0d5df", - name: "湖水蓝" - }, - { - hex: "#22a2c3", - name: "海青" - }, - { - hex: "#474b4c", - name: "黄昏灰" - }, - { - hex: "#63bbd0", - name: "霁青" - }, - { - hex: "#126e82", - name: "玉鈫蓝" - }, - { - hex: "#0f95b0", - name: "胆矾蓝" - }, - { - hex: "#1491a8", - name: "樫鸟蓝" - }, - { - hex: "#c7d2d4", - name: "鸥蓝" - }, - { - hex: "#1e9eb3", - name: "翠蓝" - }, - { - hex: "#3b818c", - name: "蜻蜓蓝" - }, - { - hex: "#0eb0c9", - name: "孔雀蓝" - }, - { - hex: "#29b7cb", - name: "蔚蓝" - }, - { - hex: "#51c4d3", - name: "瀑布蓝" - }, - { - hex: "#7cabb1", - name: "闪蓝" - }, - { - hex: "#10aec2", - name: "甸子蓝" - }, - { - hex: "#648e93", - name: "晚波蓝" - }, - { - hex: "#93d5dc", - name: "清水蓝" - }, - { - hex: "#617172", - name: "夏云灰" - }, - { - hex: "#c6e6e8", - name: "海天蓝" - }, - { - hex: "#869d9d", - name: "虾壳青" - }, - { - hex: "#57c3c2", - name: "石绿" - }, - { - hex: "#c4d7d6", - name: "穹灰" - }, - { - hex: "#12aa9c", - name: "美蝶绿" - }, - { - hex: "#737c7b", - name: "垩灰" - }, - { - hex: "#12a182", - name: "蓝绿" - }, - { - hex: "#1ba784", - name: "竹绿" - }, - { - hex: "#428675", - name: "亚丁绿" - }, - { - hex: "#c0c4c3", - name: "月影白" - }, - { - hex: "#248067", - name: "海王绿" - }, - { - hex: "#1a3b32", - name: "深海绿" - }, - { - hex: "#314a43", - name: "绿灰" - }, - { - hex: "#2c9678", - name: "青矾绿" - }, - { - hex: "#223e36", - name: "苍绿" - }, - { - hex: "#497568", - name: "飞泉绿" - }, - { - hex: "#141e1b", - name: "莽丛绿" - }, - { - hex: "#69a794", - name: "梧枝绿" - }, - { - hex: "#2bae85", - name: "铜绿" - }, - { - hex: "#9abeaf", - name: "草原远绿" - }, - { - hex: "#45b787", - name: "蛙绿" - }, - { - hex: "#92b3a5", - name: "浪花绿" - }, - { - hex: "#1f2623", - name: "苷蓝绿" - }, - { - hex: "#83cbac", - name: "粉绿" - }, - { - hex: "#70887d", - name: "淡绿灰" - }, - { - hex: "#55bb8a", - name: "麦苗绿" - }, - { - hex: "#20a162", - name: "翠绿" - }, - { - hex: "#40a070", - name: "葱绿" - }, - { - hex: "#1a6840", - name: "荷叶绿" - }, - { - hex: "#61ac85", - name: "淡绿" - }, - { - hex: "#68b88e", - name: "田园绿" - }, - { - hex: "#a4cab6", - name: "玉簪绿" - }, - { - hex: "#3c9566", - name: "蟾绿" - }, - { - hex: "#5dbe8a", - name: "蔻梢绿" - }, - { - hex: "#207f4c", - name: "薄荷绿" - }, - { - hex: "#eef7f2", - name: "月白" - }, - { - hex: "#579572", - name: "蛋白石绿" - }, - { - hex: "#b9dec9", - name: "竹篁绿" - }, - { - hex: "#229453", - name: "孔雀绿" - }, - { - hex: "#20894d", - name: "宫殿绿" - }, - { - hex: "#15231b", - name: "云杉绿" - }, - { - hex: "#66c18c", - name: "毛绿" - }, - { - hex: "#a4aca7", - name: "冰山蓝" - }, - { - hex: "#8a988e", - name: "明灰" - }, - { - hex: "#9eccab", - name: "明绿" - }, - { - hex: "#83a78d", - name: "松霜绿" - }, - { - hex: "#485b4d", - name: "白屈菜绿" - }, - { - hex: "#5d655f", - name: "狼烟灰" - }, - { - hex: "#6e8b74", - name: "瓦松绿" - }, - { - hex: "#2b312c", - name: "槲寄生绿" - }, - { - hex: "#c6dfc8", - name: "淡翠绿" - }, - { - hex: "#41b349", - name: "玉髓绿" - }, - { - hex: "#43b244", - name: "鲜绿" - }, - { - hex: "#253d24", - name: "油绿" - }, - { - hex: "#41ae3c", - name: "宝石绿" - }, - { - hex: "#add5a2", - name: "嘉陵水绿" - }, - { - hex: "#5e665b", - name: "田螺绿" - }, - { - hex: "#8cc269", - name: "水绿" - }, - { - hex: "#5bae23", - name: "鹦鹉绿" - }, - { - hex: "#dfecd5", - name: "艾背绿" - }, - { - hex: "#cad3c3", - name: "艾绿" - }, - { - hex: "#9fa39a", - name: "镍灰" - }, - { - hex: "#b2cf87", - name: "橄榄石绿" - }, - { - hex: "#96c24e", - name: "芽绿" - }, - { - hex: "#f0f5e5", - name: "嫩菊绿" - }, - { - hex: "#b7d07a", - name: "芦苇绿" - }, - { - hex: "#d0deaa", - name: "姚黄" - }, - { - hex: "#373834", - name: "蒽油绿" - }, - { - hex: "#bacf65", - name: "苹果绿" - }, - { - hex: "#e2e7bf", - name: "海沬绿" - }, - { - hex: "#bec936", - name: "橄榄黄绿" - }, - { - hex: "#d2d97a", - name: "槐花黄绿" - }, - { - hex: "#e2d849", - name: "蝶黄" - }, - { - hex: "#fffef8", - name: "象牙白" - }, - { - hex: "#5e5314", - name: "橄榄绿" - }, - { - hex: "#fffef9", - name: "雪白" - }, - { - hex: "#ad9e5f", - name: "淡灰绿" - }, - { - hex: "#fed71a", - name: "佛手黄" - }, - { - hex: "#f9f4dc", - name: "乳白" - }, - { - hex: "#e4bf11", - name: "香蕉黄" - }, - { - hex: "#d2b116", - name: "新禾绿" - }, - { - hex: "#fbda41", - name: "油菜花黄" - }, - { - hex: "#eed045", - name: "秋葵黄" - }, - { - hex: "#f1ca17", - name: "柚黄" - }, - { - hex: "#d2b42c", - name: "草黄" - }, - { - hex: "#f2ce2b", - name: "硫华黄" - }, - { - hex: "#e2c027", - name: "姜黄" - }, - { - hex: "#645822", - name: "潭水绿" - }, - { - hex: "#fcd217", - name: "金瓜黄" - }, - { - hex: "#f8df70", - name: "麦秆黄" - }, - { - hex: "#dfc243", - name: "蒿黄" - }, - { - hex: "#f8df72", - name: "茉莉黄" - }, - { - hex: "#ffd111", - name: "藤黄" - }, - { - hex: "#ddc871", - name: "芒果黄" - }, - { - hex: "#fffefa", - name: "海参灰" - }, - { - hex: "#867018", - name: "碧螺春绿" - }, - { - hex: "#887322", - name: "苔绿" - }, - { - hex: "#fcd337", - name: "柠檬黄" - }, - { - hex: "#8e804b", - name: "草灰绿" - }, - { - hex: "#fecc11", - name: "向日葵黄" - }, - { - hex: "#fccb16", - name: "素馨黄" - }, - { - hex: "#ffc90c", - name: "乳鸭黄" - }, - { - hex: "#b7ae8f", - name: "月灰" - }, - { - hex: "#f8d86a", - name: "葵扇黄" - }, - { - hex: "#fbcd31", - name: "大豆黄" - }, - { - hex: "#fcc307", - name: "金盏黄" - }, - { - hex: "#e9ddb6", - name: "菊蕾白" - }, - { - hex: "#fcc515", - name: "黄连黄" - }, - { - hex: "#f7e8aa", - name: "杏仁黄" - }, - { - hex: "#e8b004", - name: "谷黄" - }, - { - hex: "#f9c116", - name: "木瓜黄" - }, - { - hex: "#f9d770", - name: "淡茧黄" - }, - { - hex: "#fbc82f", - name: "雅梨黄" - }, - { - hex: "#f1f0ed", - name: "银白" - }, - { - hex: "#5b4913", - name: "棕榈绿" - }, - { - hex: "#f6c430", - name: "鹦鹉冠黄" - }, - { - hex: "#b78d12", - name: "枯绿" - }, - { - hex: "#f9bd10", - name: "浅烙黄" - }, - { - hex: "#f9d367", - name: "淡密黄" - }, - { - hex: "#d9a40e", - name: "芥黄" - }, - { - hex: "#ebb10d", - name: "栀子黄" - }, - { - hex: "#584717", - name: "暗海水绿" - }, - { - hex: "#f7de98", - name: "篾黄" - }, - { - hex: "#f9f1db", - name: "蚌肉白" - }, - { - hex: "#f4ce69", - name: "炒米黄" - }, - { - hex: "#feba07", - name: "琥珀黄" - }, - { - hex: "#8a6913", - name: "灰绿" - }, - { - hex: "#876818", - name: "粽叶绿" - }, - { - hex: "#b6a476", - name: "尘灰" - }, - { - hex: "#fcb70a", - name: "鼬黄" - }, - { - hex: "#f0d695", - name: "象牙黄" - }, - { - hex: "#87723e", - name: "鲛青" - }, - { - hex: "#f8e8c1", - name: "豆汁黄" - }, - { - hex: "#d6a01d", - name: "土黄" - }, - { - hex: "#f7da94", - name: "香水玫瑰黄" - }, - { - hex: "#eaad1a", - name: "虎皮黄" - }, - { - hex: "#fbb612", - name: "鸡蛋黄" - }, - { - hex: "#b5aa90", - name: "银鼠灰" - }, - { - hex: "#f7f4ed", - name: "鱼肚白" - }, - { - hex: "#f8bc31", - name: "初熟杏黄" - }, - { - hex: "#b78b26", - name: "山鸡黄" - }, - { - hex: "#e5d3aa", - name: "莲子白" - }, - { - hex: "#695e45", - name: "蟹壳灰" - }, - { - hex: "#e5b751", - name: "沙石黄" - }, - { - hex: "#f3bf4c", - name: "甘草黄" - }, - { - hex: "#685e48", - name: "燕羽灰" - }, - { - hex: "#fbb929", - name: "鹅掌黄" - }, - { - hex: "#f9d27d", - name: "麦芽糖黄" - }, - { - hex: "#e2c17c", - name: "浅驼色" - }, - { - hex: "#b4a992", - name: "百灵鸟灰" - }, - { - hex: "#f6dead", - name: "酪黄" - }, - { - hex: "#f2e6ce", - name: "荔肉白" - }, - { - hex: "#f8e0b0", - name: "淡肉色" - }, - { - hex: "#393733", - name: "河豚灰" - }, - { - hex: "#835e1d", - name: "蜴蜊绿" - }, - { - hex: "#f8f4ed", - name: "汉白玉" - }, - { - hex: "#fca104", - name: "橙皮黄" - }, - { - hex: "#815f25", - name: "莱阳梨黄" - }, - { - hex: "#fca106", - name: "枇杷黄" - }, - { - hex: "#ffa60f", - name: "金叶黄" - }, - { - hex: "#806332", - name: "苍黄" - }, - { - hex: "#fbf2e3", - name: "粉白" - }, - { - hex: "#fba414", - name: "淡橘橙" - }, - { - hex: "#e4dfd7", - name: "珍珠灰" - }, - { - hex: "#826b48", - name: "龟背黄" - }, - { - hex: "#dad4cb", - name: "浅灰" - }, - { - hex: "#bbb5ac", - name: "铅灰" - }, - { - hex: "#bbb5ac", - name: "中灰" - }, - { - hex: "#ff9900", - name: "雄黄" - }, - { - hex: "#fbb957", - name: "蜜黄" - }, - { - hex: "#dc9123", - name: "风帆黄" - }, - { - hex: "#c09351", - name: "桂皮淡棕" - }, - { - hex: "#f4a83a", - name: "金莺黄" - }, - { - hex: "#f7c173", - name: "肉色" - }, - { - hex: "#e7a23f", - name: "凋叶棕" - }, - { - hex: "#533c1b", - name: "古铜绿" - }, - { - hex: "#f9e8d0", - name: "落英淡粉" - }, - { - hex: "#de9e44", - name: "软木黄" - }, - { - hex: "#f9cb8b", - name: "瓜瓤粉" - }, - { - hex: "#f9a633", - name: "榴萼黄" - }, - { - hex: "#daa45a", - name: "玳瑁黄" - }, - { - hex: "#553b18", - name: "焦茶绿" - }, - { - hex: "#513c20", - name: "蟹壳绿" - }, - { - hex: "#986524", - name: "山鸡褐" - }, - { - hex: "#97846c", - name: "猴毛灰" - }, - { - hex: "#e3bd8d", - name: "鹿角棕" - }, - { - hex: "#4d4030", - name: "淡松烟" - }, - { - hex: "#fb8b05", - name: "万寿菊黄" - }, - { - hex: "#f8c387", - name: "蛋壳黄" - }, - { - hex: "#f28e16", - name: "杏黄" - }, - { - hex: "#503e2a", - name: "橄榄灰" - }, - { - hex: "#4a4035", - name: "鹤灰" - }, - { - hex: "#cfccc9", - name: "玛瑙灰" - }, - { - hex: "#c1b2a3", - name: "淡银灰" - }, - { - hex: "#867e76", - name: "瓦灰" - }, - { - hex: "#847c74", - name: "夜灰" - }, - { - hex: "#fc8c23", - name: "北瓜黄" - }, - { - hex: "#fbecde", - name: "荷花白" - }, - { - hex: "#4f4032", - name: "松鼠灰" - }, - { - hex: "#fbeee2", - name: "淡米粉" - }, - { - hex: "#81776e", - name: "深灰" - }, - { - hex: "#9a8878", - name: "海鸥灰" - }, - { - hex: "#5d3d21", - name: "茶褐" - }, - { - hex: "#66462a", - name: "驼色" - }, - { - hex: "#918072", - name: "银灰" - }, - { - hex: "#d99156", - name: "鹿皮褐" - }, - { - hex: "#c1651a", - name: "槟榔综" - }, - { - hex: "#d4c4b7", - name: "晓灰" - }, - { - hex: "#be7e4a", - name: "淡赭" - }, - { - hex: "#5c3719", - name: "古铜褐" - }, - { - hex: "#de7622", - name: "麂棕" - }, - { - hex: "#db8540", - name: "醉瓜肉" - }, - { - hex: "#80766e", - name: "雁灰" - }, - { - hex: "#f09c5a", - name: "鲑鱼红" - }, - { - hex: "#f97d1c", - name: "橘橙" - }, - { - hex: "#f26b1f", - name: "金黄" - }, - { - hex: "#f8b37f", - name: "玫瑰粉" - }, - { - hex: "#fa7e23", - name: "美人焦橙" - }, - { - hex: "#f9e9cd", - name: "米色" - }, - { - hex: "#b7a091", - name: "蛛网灰" - }, - { - hex: "#945833", - name: "淡咖啡" - }, - { - hex: "#f0945d", - name: "海螺橙" - }, - { - hex: "#964d22", - name: "岩石棕" - }, - { - hex: "#954416", - name: "芒果棕" - }, - { - hex: "#e16723", - name: "陶瓷红" - }, - { - hex: "#fc7930", - name: "菠萝红" - }, - { - hex: "#cf7543", - name: "余烬红" - }, - { - hex: "#f86b1d", - name: "金莲花橙" - }, - { - hex: "#cd6227", - name: "火砖红" - }, - { - hex: "#f6dcce", - name: "初桃粉红" - }, - { - hex: "#d85916", - name: "铁棕" - }, - { - hex: "#f7cfba", - name: "介壳淡粉红" - }, - { - hex: "#f27635", - name: "蟹壳红" - }, - { - hex: "#e46828", - name: "金驼" - }, - { - hex: "#fc6315", - name: "燕颔红" - }, - { - hex: "#b7511d", - name: "淡可可棕" - }, - { - hex: "#ea8958", - name: "晨曦红" - }, - { - hex: "#e8b49a", - name: "玉粉红" - }, - { - hex: "#fb9968", - name: "野蔷薇红" - }, - { - hex: "#edc3ae", - name: "藕荷" - }, - { - hex: "#363433", - name: "长石灰" - }, - { - hex: "#8b614d", - name: "中红灰" - }, - { - hex: "#aa6a4c", - name: "火泥棕" - }, - { - hex: "#a6522c", - name: "绀红" - }, - { - hex: "#fa5d19", - name: "莓酱红" - }, - { - hex: "#71361d", - name: "丁香棕" - }, - { - hex: "#b89485", - name: "淡玫瑰灰" - }, - { - hex: "#f68c60", - name: "瓜瓤红" - }, - { - hex: "#f6ad8f", - name: "淡藏花红" - }, - { - hex: "#732e12", - name: "筍皮棕" - }, - { - hex: "#f7cdbc", - name: "润红" - }, - { - hex: "#ef632b", - name: "龙睛鱼红" - }, - { - hex: "#8c4b31", - name: "淡土黄" - }, - { - hex: "#64483d", - name: "珠母灰" - }, - { - hex: "#f9723d", - name: "芙蓉红" - }, - { - hex: "#cf4813", - name: "落霞红" - }, - { - hex: "#ee8055", - name: "法螺红" - }, - { - hex: "#f8ebe6", - name: "草珠红" - }, - { - hex: "#753117", - name: "咖啡" - }, - { - hex: "#603d30", - name: "中灰驼" - }, - { - hex: "#883a1e", - name: "椰壳棕" - }, - { - hex: "#b14b28", - name: "蟹蝥红" - }, - { - hex: "#873d24", - name: "淡豆沙" - }, - { - hex: "#f6cec1", - name: "淡桃红" - }, - { - hex: "#5b423a", - name: "淡铁灰" - }, - { - hex: "#624941", - name: "石板灰" - }, - { - hex: "#673424", - name: "淡栗棕" - }, - { - hex: "#f43e06", - name: "银朱" - }, - { - hex: "#ef6f48", - name: "草莓红" - }, - { - hex: "#f4c7ba", - name: "洋水仙红" - }, - { - hex: "#ed5126", - name: "朱红" - }, - { - hex: "#f34718", - name: "榴花红" - }, - { - hex: "#f2481b", - name: "柿红" - }, - { - hex: "#652b1c", - name: "可可棕" - }, - { - hex: "#eea08c", - name: "淡罂粟红" - }, - { - hex: "#f04b22", - name: "大红" - }, - { - hex: "#692a1b", - name: "柞叶棕" - }, - { - hex: "#f1441d", - name: "蜻蜓红" - }, - { - hex: "#773d31", - name: "橡树棕" - }, - { - hex: "#eeaa9c", - name: "颊红" - }, - { - hex: "#f0ada0", - name: "桃红" - }, - { - hex: "#863020", - name: "火岩棕" - }, - { - hex: "#f2e7e5", - name: "淡藤萝紫" - }, - { - hex: "#862617", - name: "赭石" - }, - { - hex: "#f5391c", - name: "铁水红" - }, - { - hex: "#f03f24", - name: "胭脂红" - }, - { - hex: "#f33b1f", - name: "极光红" - }, - { - hex: "#f23e23", - name: "红汞红" - }, - { - hex: "#f13c22", - name: "萝卜红" - }, - { - hex: "#f05a46", - name: "曲红" - }, - { - hex: "#f17666", - name: "谷鞘红" - }, - { - hex: "#f15642", - name: "苹果红" - }, - { - hex: "#f25a47", - name: "桂红" - }, - { - hex: "#f2b9b2", - name: "粉红" - }, - { - hex: "#592620", - name: "暗驼棕" - }, - { - hex: "#de2a18", - name: "夕阳红" - }, - { - hex: "#ed3321", - name: "樱桃红" - }, - { - hex: "#f04a3a", - name: "珊瑚红" - }, - { - hex: "#482522", - name: "火山棕" - }, - { - hex: "#5c1e19", - name: "栗棕" - }, - { - hex: "#d42517", - name: "鹤顶红" - }, - { - hex: "#f19790", - name: "舌红" - }, - { - hex: "#ab372f", - name: "鹅血石红" - }, - { - hex: "#5a1f1b", - name: "酱棕" - }, - { - hex: "#ed3b2f", - name: "鱼鳃红" - }, - { - hex: "#bdaead", - name: "芦穗灰" - }, - { - hex: "#eb261a", - name: "丽春红" - }, - { - hex: "#ac1f18", - name: "覆盆子红" - }, - { - hex: "#483332", - name: "海报灰" - }, - { - hex: "#481e1c", - name: "豆沙" - }, - { - hex: "#f1908c", - name: "榴子红" - }, - { - hex: "#ec2b24", - name: "秋海棠红" - }, - { - hex: "#efafad", - name: "无花果红" - }, - { - hex: "#f2cac9", - name: "淡绯" - }, - { - hex: "#4b2e2b", - name: "玫瑰灰" - }, - { - hex: "#ed4845", - name: "淡菽红" - }, - { - hex: "#ed3333", - name: "枸枢红" - }, - { - hex: "#5d3131", - name: "貂紫" - } -]; - -/* - ## Color - - http://llllll.li/randomColor/ - A color generator for JavaScript. - randomColor generates attractive colors by default. More specifically, randomColor produces bright colors with a reasonably high saturation. This makes randomColor particularly useful for data visualizations and generative art. - - http://randomcolour.com/ - var bg_colour = Math.floor(Math.random() * 16777215).toString(16); - bg_colour = "#" + ("000000" + bg_colour).slice(-6); - document.bgColor = bg_colour; - - http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/ - Creating random colors is actually more difficult than it seems. The randomness itself is easy, but aesthetically pleasing randomness is more difficult. - https://github.com/devongovett/color-generator - - http://www.paulirish.com/2009/random-hex-color-code-snippets/ - Random Hex Color Code Generator in JavaScript - - http://chancejs.com/#color - chance.color() - // => '#79c157' - chance.color({format: 'hex'}) - // => '#d67118' - chance.color({format: 'shorthex'}) - // => '#60f' - chance.color({format: 'rgb'}) - // => 'rgb(110,52,164)' - - http://tool.c7sky.com/webcolor - 网页设计常用色彩搭配表 - - https://github.com/One-com/one-color - An OO-based JavaScript color parser/computation toolkit with support for RGB, HSV, HSL, CMYK, and alpha channels. - API 很赞 - - https://github.com/harthur/color - JavaScript color conversion and manipulation library - - https://github.com/leaverou/css-colors - Share & convert CSS colors - http://leaverou.github.io/css-colors/#slategray - Type a CSS color keyword, #hex, hsl(), rgba(), whatever: - - 色调 hue - http://baike.baidu.com/view/23368.htm - 色调指的是一幅画中画面色彩的总体倾向,是大的色彩效果。 - 饱和度 saturation - http://baike.baidu.com/view/189644.htm - 饱和度是指色彩的鲜艳程度,也称色彩的纯度。饱和度取决于该色中含色成分和消色成分(灰色)的比例。含色成分越大,饱和度越大;消色成分越大,饱和度越小。 - 亮度 brightness - http://baike.baidu.com/view/34773.htm - 亮度是指发光体(反光体)表面发光(反光)强弱的物理量。 - 照度 luminosity - 物体被照亮的程度,采用单位面积所接受的光通量来表示,表示单位为勒[克斯](Lux,lx) ,即 1m / m2 。 - - http://stackoverflow.com/questions/1484506/random-color-generator-in-javascript - var letters = '0123456789ABCDEF'.split('') - var color = '#' - for (var i = 0; i < 6; i++) { - color += letters[Math.floor(Math.random() * 16)] - } - return color - - // 随机生成一个无脑的颜色,格式为 '#RRGGBB'。 - // _brainlessColor() - var color = Math.floor( - Math.random() * - (16 * 16 * 16 * 16 * 16 * 16 - 1) - ).toString(16) - color = "#" + ("000000" + color).slice(-6) - return color.toUpperCase() -*/ - -let _hue; -function _goldenRatioColor(saturation, value) { - const _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; - - if (typeof saturation !== 'number') saturation = 0.5; - if (typeof value !== 'number') value = 0.95; - - return color$1.hsv(_hue * 360, saturation * 100, value * 100); -} - -// 中国色 数据来自于 http://zhongguose.com - -// 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 -function color(name) { - if (name || DICT$1[name]) return DICT$1[name].nicer; - return pick(RandomColor).hex; -} - -// #DAC0DE -function hex() { - const hsv = _goldenRatioColor(); - return hsv.hex(); -} - -// rgb(128,255,255) -function rgb() { - const hsv = _goldenRatioColor(); - return hsv.hsv().string(); -} -// rgba(128,255,255,0.3) -function rgba() { - const hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); -} - -// hsl(300,80%,90%) -function hsl() { - const hsv = _goldenRatioColor(); - return hsv.hsl().string(); -} - -var firstName$1 = { - male: [ - "James", - "John", - "Robert", - "Michael", - "William", - "David", - "Richard", - "Charles", - "Joseph", - "Thomas", - "Christopher", - "Daniel", - "Paul", - "Mark", - "Donald", - "George", - "Kenneth", - "Steven", - "Edward", - "Brian", - "Ronald", - "Anthony", - "Kevin", - "Jason", - "Matthew", - "Gary", - "Timothy", - "Jose", - "Larry", - "Jeffrey", - "Frank", - "Scott", - "Eric" - ], - female: [ - "Mary", - "Patricia", - "Linda", - "Barbara", - "Elizabeth", - "Jennifer", - "Maria", - "Susan", - "Margaret", - "Dorothy", - "Lisa", - "Nancy", - "Karen", - "Betty", - "Helen", - "Sandra", - "Donna", - "Carol", - "Ruth", - "Sharon", - "Michelle", - "Laura", - "Sarah", - "Kimberly", - "Deborah", - "Jessica", - "Shirley", - "Cynthia", - "Angela", - "Melissa", - "Brenda", - "Amy", - "Anna" - ] -}; -var lastName$1 = [ - "Smith", - "Johnson", - "Williams", - "Brown", - "Jones", - "Miller", - "Davis", - "Garcia", - "Rodriguez", - "Wilson", - "Martinez", - "Anderson", - "Taylor", - "Thomas", - "Hernandez", - "Moore", - "Martin", - "Jackson", - "Thompson", - "White", - "Lopez", - "Lee", - "Gonzalez", - "Harris", - "Clark", - "Lewis", - "Robinson", - "Walker", - "Perez", - "Hall", - "Young", - "Allen" -]; -var cfirstName$1 = [ - "王", - "李", - "张", - "刘", - "陈", - "杨", - "赵", - "黄", - "周", - "吴", - "徐", - "孙", - "胡", - "朱", - "高", - "林", - "何", - "郭", - "马", - "罗", - "梁", - "宋", - "郑", - "谢", - "韩", - "唐", - "冯", - "于", - "董", - "萧", - "程", - "曹", - "袁", - "邓", - "许", - "傅", - "沈", - "曾", - "彭", - "吕", - "苏", - "卢", - "蒋", - "蔡", - "贾", - "丁", - "魏", - "薛", - "叶", - "阎", - "余", - "潘", - "杜", - "戴", - "夏", - "锺", - "汪", - "田", - "任", - "姜", - "范", - "方", - "石", - "姚", - "谭", - "廖", - "邹", - "熊", - "金", - "陆", - "郝", - "孔", - "白", - "崔", - "康", - "毛", - "邱", - "秦", - "江", - "史", - "顾", - "侯", - "邵", - "孟", - "龙", - "万", - "段", - "雷", - "钱", - "汤", - "尹", - "黎", - "易", - "常", - "武", - "乔", - "贺", - "赖", - "龚", - "文" -]; -var clastName$1 = [ - "伟", - "芳", - "娜", - "秀英", - "敏", - "静", - "丽", - "强", - "磊", - "军", - "洋", - "勇", - "艳", - "杰", - "娟", - "涛", - "明", - "超", - "秀兰", - "霞", - "平", - "刚", - "桂英" -]; -var Name = { - firstName: firstName$1, - lastName: lastName$1, - cfirstName: cfirstName$1, - clastName: clastName$1 -}; - -/* - ## Name - - [Beyond the Top 1000 Names](http://www.ssa.gov/oact/babynames/limits.html) -*/ -const { firstName, lastName, cfirstName, clastName } = Name; - -// 随机生成一个常见的英文名。 -function first() { - const names = firstName.male.concat(); - return pick(names); -} - -// 随机生成一个常见的英文姓。 -function last() { - return pick(lastName); -} - -// 随机生成一个常见的英文姓名。 -function name(middle) { - middle = middle ? ` ${first()} ` : ' '; - return `${first()}${middle}${last()}`; -} - -/* - 随机生成一个常见的中文姓。 - [世界常用姓氏排行](http://baike.baidu.com/view/1719115.htm) - [玄派网 - 网络小说创作辅助平台](http://xuanpai.sinaapp.com/) -*/ -function cfirst() { - return pick(cfirstName); -} /* - 随机生成一个常见的中文名。 - [中国最常见名字前50名_三九算命网](http://www.name999.net/xingming/xingshi/20131004/48.html) -*/ -function clast() { - return pick(clastName); -} -// 随机生成一个常见的中文姓名。 -function cname() { - return cfirst() + clast(); -} - -const rnds8Pool = new Uint8Array(256); // # of random values to pre-allocate - -let poolPtr = rnds8Pool.length; -function rng() { - if (poolPtr > rnds8Pool.length - 16) { - crypto__default['default'].randomFillSync(rnds8Pool); - poolPtr = 0; - } - - return rnds8Pool.slice(poolPtr, poolPtr += 16); -} - -var REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i; - -function validate(uuid) { - return typeof uuid === 'string' && REGEX.test(uuid); -} - -/** - * Convert array of 16 byte values to UUID string format of the form: - * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX - */ - -const byteToHex = []; - -for (let i = 0; i < 256; ++i) { - byteToHex.push((i + 0x100).toString(16).substr(1)); -} - -function stringify(arr, offset = 0) { - // Note: Be careful editing this code! It's been tuned for performance - // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434 - const uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one - // of the following: - // - One or more input array values don't map to a hex octet (leading to - // "undefined" in the uuid) - // - Invalid input values for the RFC `version` or `variant` fields - - if (!validate(uuid)) { - throw TypeError('Stringified UUID is invalid'); - } - - return uuid; -} - -function v4(options, buf, offset) { - options = options || {}; - const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved` - - rnds[6] = rnds[6] & 0x0f | 0x40; - rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided - - if (buf) { - offset = offset || 0; - - for (let i = 0; i < 16; ++i) { - buf[offset + i] = rnds[i]; - } - - return buf; - } - - return stringify(rnds); -} - -var DICT = { - "110000": "北京", - "110100": "北京市", - "110101": "东城区", - "110102": "西城区", - "110105": "朝阳区", - "110106": "丰台区", - "110107": "石景山区", - "110108": "海淀区", - "110109": "门头沟区", - "110111": "房山区", - "110112": "通州区", - "110113": "顺义区", - "110114": "昌平区", - "110115": "大兴区", - "110116": "怀柔区", - "110117": "平谷区", - "110228": "密云县", - "110229": "延庆县", - "110230": "其它区", - "120000": "天津", - "120100": "天津市", - "120101": "和平区", - "120102": "河东区", - "120103": "河西区", - "120104": "南开区", - "120105": "河北区", - "120106": "红桥区", - "120110": "东丽区", - "120111": "西青区", - "120112": "津南区", - "120113": "北辰区", - "120114": "武清区", - "120115": "宝坻区", - "120116": "滨海新区", - "120221": "宁河县", - "120223": "静海县", - "120225": "蓟县", - "120226": "其它区", - "130000": "河北省", - "130100": "石家庄市", - "130102": "长安区", - "130103": "桥东区", - "130104": "桥西区", - "130105": "新华区", - "130107": "井陉矿区", - "130108": "裕华区", - "130121": "井陉县", - "130123": "正定县", - "130124": "栾城县", - "130125": "行唐县", - "130126": "灵寿县", - "130127": "高邑县", - "130128": "深泽县", - "130129": "赞皇县", - "130130": "无极县", - "130131": "平山县", - "130132": "元氏县", - "130133": "赵县", - "130181": "辛集市", - "130182": "藁城市", - "130183": "晋州市", - "130184": "新乐市", - "130185": "鹿泉市", - "130186": "其它区", - "130200": "唐山市", - "130202": "路南区", - "130203": "路北区", - "130204": "古冶区", - "130205": "开平区", - "130207": "丰南区", - "130208": "丰润区", - "130223": "滦县", - "130224": "滦南县", - "130225": "乐亭县", - "130227": "迁西县", - "130229": "玉田县", - "130230": "曹妃甸区", - "130281": "遵化市", - "130283": "迁安市", - "130284": "其它区", - "130300": "秦皇岛市", - "130302": "海港区", - "130303": "山海关区", - "130304": "北戴河区", - "130321": "青龙满族自治县", - "130322": "昌黎县", - "130323": "抚宁县", - "130324": "卢龙县", - "130398": "其它区", - "130400": "邯郸市", - "130402": "邯山区", - "130403": "丛台区", - "130404": "复兴区", - "130406": "峰峰矿区", - "130421": "邯郸县", - "130423": "临漳县", - "130424": "成安县", - "130425": "大名县", - "130426": "涉县", - "130427": "磁县", - "130428": "肥乡县", - "130429": "永年县", - "130430": "邱县", - "130431": "鸡泽县", - "130432": "广平县", - "130433": "馆陶县", - "130434": "魏县", - "130435": "曲周县", - "130481": "武安市", - "130482": "其它区", - "130500": "邢台市", - "130502": "桥东区", - "130503": "桥西区", - "130521": "邢台县", - "130522": "临城县", - "130523": "内丘县", - "130524": "柏乡县", - "130525": "隆尧县", - "130526": "任县", - "130527": "南和县", - "130528": "宁晋县", - "130529": "巨鹿县", - "130530": "新河县", - "130531": "广宗县", - "130532": "平乡县", - "130533": "威县", - "130534": "清河县", - "130535": "临西县", - "130581": "南宫市", - "130582": "沙河市", - "130583": "其它区", - "130600": "保定市", - "130602": "新市区", - "130603": "北市区", - "130604": "南市区", - "130621": "满城县", - "130622": "清苑县", - "130623": "涞水县", - "130624": "阜平县", - "130625": "徐水县", - "130626": "定兴县", - "130627": "唐县", - "130628": "高阳县", - "130629": "容城县", - "130630": "涞源县", - "130631": "望都县", - "130632": "安新县", - "130633": "易县", - "130634": "曲阳县", - "130635": "蠡县", - "130636": "顺平县", - "130637": "博野县", - "130638": "雄县", - "130681": "涿州市", - "130682": "定州市", - "130683": "安国市", - "130684": "高碑店市", - "130699": "其它区", - "130700": "张家口市", - "130702": "桥东区", - "130703": "桥西区", - "130705": "宣化区", - "130706": "下花园区", - "130721": "宣化县", - "130722": "张北县", - "130723": "康保县", - "130724": "沽源县", - "130725": "尚义县", - "130726": "蔚县", - "130727": "阳原县", - "130728": "怀安县", - "130729": "万全县", - "130730": "怀来县", - "130731": "涿鹿县", - "130732": "赤城县", - "130733": "崇礼县", - "130734": "其它区", - "130800": "承德市", - "130802": "双桥区", - "130803": "双滦区", - "130804": "鹰手营子矿区", - "130821": "承德县", - "130822": "兴隆县", - "130823": "平泉县", - "130824": "滦平县", - "130825": "隆化县", - "130826": "丰宁满族自治县", - "130827": "宽城满族自治县", - "130828": "围场满族蒙古族自治县", - "130829": "其它区", - "130900": "沧州市", - "130902": "新华区", - "130903": "运河区", - "130921": "沧县", - "130922": "青县", - "130923": "东光县", - "130924": "海兴县", - "130925": "盐山县", - "130926": "肃宁县", - "130927": "南皮县", - "130928": "吴桥县", - "130929": "献县", - "130930": "孟村回族自治县", - "130981": "泊头市", - "130982": "任丘市", - "130983": "黄骅市", - "130984": "河间市", - "130985": "其它区", - "131000": "廊坊市", - "131002": "安次区", - "131003": "广阳区", - "131022": "固安县", - "131023": "永清县", - "131024": "香河县", - "131025": "大城县", - "131026": "文安县", - "131028": "大厂回族自治县", - "131081": "霸州市", - "131082": "三河市", - "131083": "其它区", - "131100": "衡水市", - "131102": "桃城区", - "131121": "枣强县", - "131122": "武邑县", - "131123": "武强县", - "131124": "饶阳县", - "131125": "安平县", - "131126": "故城县", - "131127": "景县", - "131128": "阜城县", - "131181": "冀州市", - "131182": "深州市", - "131183": "其它区", - "140000": "山西省", - "140100": "太原市", - "140105": "小店区", - "140106": "迎泽区", - "140107": "杏花岭区", - "140108": "尖草坪区", - "140109": "万柏林区", - "140110": "晋源区", - "140121": "清徐县", - "140122": "阳曲县", - "140123": "娄烦县", - "140181": "古交市", - "140182": "其它区", - "140200": "大同市", - "140202": "城区", - "140203": "矿区", - "140211": "南郊区", - "140212": "新荣区", - "140221": "阳高县", - "140222": "天镇县", - "140223": "广灵县", - "140224": "灵丘县", - "140225": "浑源县", - "140226": "左云县", - "140227": "大同县", - "140228": "其它区", - "140300": "阳泉市", - "140302": "城区", - "140303": "矿区", - "140311": "郊区", - "140321": "平定县", - "140322": "盂县", - "140323": "其它区", - "140400": "长治市", - "140421": "长治县", - "140423": "襄垣县", - "140424": "屯留县", - "140425": "平顺县", - "140426": "黎城县", - "140427": "壶关县", - "140428": "长子县", - "140429": "武乡县", - "140430": "沁县", - "140431": "沁源县", - "140481": "潞城市", - "140482": "城区", - "140483": "郊区", - "140485": "其它区", - "140500": "晋城市", - "140502": "城区", - "140521": "沁水县", - "140522": "阳城县", - "140524": "陵川县", - "140525": "泽州县", - "140581": "高平市", - "140582": "其它区", - "140600": "朔州市", - "140602": "朔城区", - "140603": "平鲁区", - "140621": "山阴县", - "140622": "应县", - "140623": "右玉县", - "140624": "怀仁县", - "140625": "其它区", - "140700": "晋中市", - "140702": "榆次区", - "140721": "榆社县", - "140722": "左权县", - "140723": "和顺县", - "140724": "昔阳县", - "140725": "寿阳县", - "140726": "太谷县", - "140727": "祁县", - "140728": "平遥县", - "140729": "灵石县", - "140781": "介休市", - "140782": "其它区", - "140800": "运城市", - "140802": "盐湖区", - "140821": "临猗县", - "140822": "万荣县", - "140823": "闻喜县", - "140824": "稷山县", - "140825": "新绛县", - "140826": "绛县", - "140827": "垣曲县", - "140828": "夏县", - "140829": "平陆县", - "140830": "芮城县", - "140881": "永济市", - "140882": "河津市", - "140883": "其它区", - "140900": "忻州市", - "140902": "忻府区", - "140921": "定襄县", - "140922": "五台县", - "140923": "代县", - "140924": "繁峙县", - "140925": "宁武县", - "140926": "静乐县", - "140927": "神池县", - "140928": "五寨县", - "140929": "岢岚县", - "140930": "河曲县", - "140931": "保德县", - "140932": "偏关县", - "140981": "原平市", - "140982": "其它区", - "141000": "临汾市", - "141002": "尧都区", - "141021": "曲沃县", - "141022": "翼城县", - "141023": "襄汾县", - "141024": "洪洞县", - "141025": "古县", - "141026": "安泽县", - "141027": "浮山县", - "141028": "吉县", - "141029": "乡宁县", - "141030": "大宁县", - "141031": "隰县", - "141032": "永和县", - "141033": "蒲县", - "141034": "汾西县", - "141081": "侯马市", - "141082": "霍州市", - "141083": "其它区", - "141100": "吕梁市", - "141102": "离石区", - "141121": "文水县", - "141122": "交城县", - "141123": "兴县", - "141124": "临县", - "141125": "柳林县", - "141126": "石楼县", - "141127": "岚县", - "141128": "方山县", - "141129": "中阳县", - "141130": "交口县", - "141181": "孝义市", - "141182": "汾阳市", - "141183": "其它区", - "150000": "内蒙古自治区", - "150100": "呼和浩特市", - "150102": "新城区", - "150103": "回民区", - "150104": "玉泉区", - "150105": "赛罕区", - "150121": "土默特左旗", - "150122": "托克托县", - "150123": "和林格尔县", - "150124": "清水河县", - "150125": "武川县", - "150126": "其它区", - "150200": "包头市", - "150202": "东河区", - "150203": "昆都仑区", - "150204": "青山区", - "150205": "石拐区", - "150206": "白云鄂博矿区", - "150207": "九原区", - "150221": "土默特右旗", - "150222": "固阳县", - "150223": "达尔罕茂明安联合旗", - "150224": "其它区", - "150300": "乌海市", - "150302": "海勃湾区", - "150303": "海南区", - "150304": "乌达区", - "150305": "其它区", - "150400": "赤峰市", - "150402": "红山区", - "150403": "元宝山区", - "150404": "松山区", - "150421": "阿鲁科尔沁旗", - "150422": "巴林左旗", - "150423": "巴林右旗", - "150424": "林西县", - "150425": "克什克腾旗", - "150426": "翁牛特旗", - "150428": "喀喇沁旗", - "150429": "宁城县", - "150430": "敖汉旗", - "150431": "其它区", - "150500": "通辽市", - "150502": "科尔沁区", - "150521": "科尔沁左翼中旗", - "150522": "科尔沁左翼后旗", - "150523": "开鲁县", - "150524": "库伦旗", - "150525": "奈曼旗", - "150526": "扎鲁特旗", - "150581": "霍林郭勒市", - "150582": "其它区", - "150600": "鄂尔多斯市", - "150602": "东胜区", - "150621": "达拉特旗", - "150622": "准格尔旗", - "150623": "鄂托克前旗", - "150624": "鄂托克旗", - "150625": "杭锦旗", - "150626": "乌审旗", - "150627": "伊金霍洛旗", - "150628": "其它区", - "150700": "呼伦贝尔市", - "150702": "海拉尔区", - "150703": "扎赉诺尔区", - "150721": "阿荣旗", - "150722": "莫力达瓦达斡尔族自治旗", - "150723": "鄂伦春自治旗", - "150724": "鄂温克族自治旗", - "150725": "陈巴尔虎旗", - "150726": "新巴尔虎左旗", - "150727": "新巴尔虎右旗", - "150781": "满洲里市", - "150782": "牙克石市", - "150783": "扎兰屯市", - "150784": "额尔古纳市", - "150785": "根河市", - "150786": "其它区", - "150800": "巴彦淖尔市", - "150802": "临河区", - "150821": "五原县", - "150822": "磴口县", - "150823": "乌拉特前旗", - "150824": "乌拉特中旗", - "150825": "乌拉特后旗", - "150826": "杭锦后旗", - "150827": "其它区", - "150900": "乌兰察布市", - "150902": "集宁区", - "150921": "卓资县", - "150922": "化德县", - "150923": "商都县", - "150924": "兴和县", - "150925": "凉城县", - "150926": "察哈尔右翼前旗", - "150927": "察哈尔右翼中旗", - "150928": "察哈尔右翼后旗", - "150929": "四子王旗", - "150981": "丰镇市", - "150982": "其它区", - "152200": "兴安盟", - "152201": "乌兰浩特市", - "152202": "阿尔山市", - "152221": "科尔沁右翼前旗", - "152222": "科尔沁右翼中旗", - "152223": "扎赉特旗", - "152224": "突泉县", - "152225": "其它区", - "152500": "锡林郭勒盟", - "152501": "二连浩特市", - "152502": "锡林浩特市", - "152522": "阿巴嘎旗", - "152523": "苏尼特左旗", - "152524": "苏尼特右旗", - "152525": "东乌珠穆沁旗", - "152526": "西乌珠穆沁旗", - "152527": "太仆寺旗", - "152528": "镶黄旗", - "152529": "正镶白旗", - "152530": "正蓝旗", - "152531": "多伦县", - "152532": "其它区", - "152900": "阿拉善盟", - "152921": "阿拉善左旗", - "152922": "阿拉善右旗", - "152923": "额济纳旗", - "152924": "其它区", - "210000": "辽宁省", - "210100": "沈阳市", - "210102": "和平区", - "210103": "沈河区", - "210104": "大东区", - "210105": "皇姑区", - "210106": "铁西区", - "210111": "苏家屯区", - "210112": "东陵区", - "210113": "新城子区", - "210114": "于洪区", - "210122": "辽中县", - "210123": "康平县", - "210124": "法库县", - "210181": "新民市", - "210184": "沈北新区", - "210185": "其它区", - "210200": "大连市", - "210202": "中山区", - "210203": "西岗区", - "210204": "沙河口区", - "210211": "甘井子区", - "210212": "旅顺口区", - "210213": "金州区", - "210224": "长海县", - "210281": "瓦房店市", - "210282": "普兰店市", - "210283": "庄河市", - "210298": "其它区", - "210300": "鞍山市", - "210302": "铁东区", - "210303": "铁西区", - "210304": "立山区", - "210311": "千山区", - "210321": "台安县", - "210323": "岫岩满族自治县", - "210381": "海城市", - "210382": "其它区", - "210400": "抚顺市", - "210402": "新抚区", - "210403": "东洲区", - "210404": "望花区", - "210411": "顺城区", - "210421": "抚顺县", - "210422": "新宾满族自治县", - "210423": "清原满族自治县", - "210424": "其它区", - "210500": "本溪市", - "210502": "平山区", - "210503": "溪湖区", - "210504": "明山区", - "210505": "南芬区", - "210521": "本溪满族自治县", - "210522": "桓仁满族自治县", - "210523": "其它区", - "210600": "丹东市", - "210602": "元宝区", - "210603": "振兴区", - "210604": "振安区", - "210624": "宽甸满族自治县", - "210681": "东港市", - "210682": "凤城市", - "210683": "其它区", - "210700": "锦州市", - "210702": "古塔区", - "210703": "凌河区", - "210711": "太和区", - "210726": "黑山县", - "210727": "义县", - "210781": "凌海市", - "210782": "北镇市", - "210783": "其它区", - "210800": "营口市", - "210802": "站前区", - "210803": "西市区", - "210804": "鲅鱼圈区", - "210811": "老边区", - "210881": "盖州市", - "210882": "大石桥市", - "210883": "其它区", - "210900": "阜新市", - "210902": "海州区", - "210903": "新邱区", - "210904": "太平区", - "210905": "清河门区", - "210911": "细河区", - "210921": "阜新蒙古族自治县", - "210922": "彰武县", - "210923": "其它区", - "211000": "辽阳市", - "211002": "白塔区", - "211003": "文圣区", - "211004": "宏伟区", - "211005": "弓长岭区", - "211011": "太子河区", - "211021": "辽阳县", - "211081": "灯塔市", - "211082": "其它区", - "211100": "盘锦市", - "211102": "双台子区", - "211103": "兴隆台区", - "211121": "大洼县", - "211122": "盘山县", - "211123": "其它区", - "211200": "铁岭市", - "211202": "银州区", - "211204": "清河区", - "211221": "铁岭县", - "211223": "西丰县", - "211224": "昌图县", - "211281": "调兵山市", - "211282": "开原市", - "211283": "其它区", - "211300": "朝阳市", - "211302": "双塔区", - "211303": "龙城区", - "211321": "朝阳县", - "211322": "建平县", - "211324": "喀喇沁左翼蒙古族自治县", - "211381": "北票市", - "211382": "凌源市", - "211383": "其它区", - "211400": "葫芦岛市", - "211402": "连山区", - "211403": "龙港区", - "211404": "南票区", - "211421": "绥中县", - "211422": "建昌县", - "211481": "兴城市", - "211482": "其它区", - "220000": "吉林省", - "220100": "长春市", - "220102": "南关区", - "220103": "宽城区", - "220104": "朝阳区", - "220105": "二道区", - "220106": "绿园区", - "220112": "双阳区", - "220122": "农安县", - "220181": "九台市", - "220182": "榆树市", - "220183": "德惠市", - "220188": "其它区", - "220200": "吉林市", - "220202": "昌邑区", - "220203": "龙潭区", - "220204": "船营区", - "220211": "丰满区", - "220221": "永吉县", - "220281": "蛟河市", - "220282": "桦甸市", - "220283": "舒兰市", - "220284": "磐石市", - "220285": "其它区", - "220300": "四平市", - "220302": "铁西区", - "220303": "铁东区", - "220322": "梨树县", - "220323": "伊通满族自治县", - "220381": "公主岭市", - "220382": "双辽市", - "220383": "其它区", - "220400": "辽源市", - "220402": "龙山区", - "220403": "西安区", - "220421": "东丰县", - "220422": "东辽县", - "220423": "其它区", - "220500": "通化市", - "220502": "东昌区", - "220503": "二道江区", - "220521": "通化县", - "220523": "辉南县", - "220524": "柳河县", - "220581": "梅河口市", - "220582": "集安市", - "220583": "其它区", - "220600": "白山市", - "220602": "浑江区", - "220621": "抚松县", - "220622": "靖宇县", - "220623": "长白朝鲜族自治县", - "220625": "江源区", - "220681": "临江市", - "220682": "其它区", - "220700": "松原市", - "220702": "宁江区", - "220721": "前郭尔罗斯蒙古族自治县", - "220722": "长岭县", - "220723": "乾安县", - "220724": "扶余市", - "220725": "其它区", - "220800": "白城市", - "220802": "洮北区", - "220821": "镇赉县", - "220822": "通榆县", - "220881": "洮南市", - "220882": "大安市", - "220883": "其它区", - "222400": "延边朝鲜族自治州", - "222401": "延吉市", - "222402": "图们市", - "222403": "敦化市", - "222404": "珲春市", - "222405": "龙井市", - "222406": "和龙市", - "222424": "汪清县", - "222426": "安图县", - "222427": "其它区", - "230000": "黑龙江省", - "230100": "哈尔滨市", - "230102": "道里区", - "230103": "南岗区", - "230104": "道外区", - "230106": "香坊区", - "230108": "平房区", - "230109": "松北区", - "230111": "呼兰区", - "230123": "依兰县", - "230124": "方正县", - "230125": "宾县", - "230126": "巴彦县", - "230127": "木兰县", - "230128": "通河县", - "230129": "延寿县", - "230181": "阿城区", - "230182": "双城市", - "230183": "尚志市", - "230184": "五常市", - "230186": "其它区", - "230200": "齐齐哈尔市", - "230202": "龙沙区", - "230203": "建华区", - "230204": "铁锋区", - "230205": "昂昂溪区", - "230206": "富拉尔基区", - "230207": "碾子山区", - "230208": "梅里斯达斡尔族区", - "230221": "龙江县", - "230223": "依安县", - "230224": "泰来县", - "230225": "甘南县", - "230227": "富裕县", - "230229": "克山县", - "230230": "克东县", - "230231": "拜泉县", - "230281": "讷河市", - "230282": "其它区", - "230300": "鸡西市", - "230302": "鸡冠区", - "230303": "恒山区", - "230304": "滴道区", - "230305": "梨树区", - "230306": "城子河区", - "230307": "麻山区", - "230321": "鸡东县", - "230381": "虎林市", - "230382": "密山市", - "230383": "其它区", - "230400": "鹤岗市", - "230402": "向阳区", - "230403": "工农区", - "230404": "南山区", - "230405": "兴安区", - "230406": "东山区", - "230407": "兴山区", - "230421": "萝北县", - "230422": "绥滨县", - "230423": "其它区", - "230500": "双鸭山市", - "230502": "尖山区", - "230503": "岭东区", - "230505": "四方台区", - "230506": "宝山区", - "230521": "集贤县", - "230522": "友谊县", - "230523": "宝清县", - "230524": "饶河县", - "230525": "其它区", - "230600": "大庆市", - "230602": "萨尔图区", - "230603": "龙凤区", - "230604": "让胡路区", - "230605": "红岗区", - "230606": "大同区", - "230621": "肇州县", - "230622": "肇源县", - "230623": "林甸县", - "230624": "杜尔伯特蒙古族自治县", - "230625": "其它区", - "230700": "伊春市", - "230702": "伊春区", - "230703": "南岔区", - "230704": "友好区", - "230705": "西林区", - "230706": "翠峦区", - "230707": "新青区", - "230708": "美溪区", - "230709": "金山屯区", - "230710": "五营区", - "230711": "乌马河区", - "230712": "汤旺河区", - "230713": "带岭区", - "230714": "乌伊岭区", - "230715": "红星区", - "230716": "上甘岭区", - "230722": "嘉荫县", - "230781": "铁力市", - "230782": "其它区", - "230800": "佳木斯市", - "230803": "向阳区", - "230804": "前进区", - "230805": "东风区", - "230811": "郊区", - "230822": "桦南县", - "230826": "桦川县", - "230828": "汤原县", - "230833": "抚远县", - "230881": "同江市", - "230882": "富锦市", - "230883": "其它区", - "230900": "七台河市", - "230902": "新兴区", - "230903": "桃山区", - "230904": "茄子河区", - "230921": "勃利县", - "230922": "其它区", - "231000": "牡丹江市", - "231002": "东安区", - "231003": "阳明区", - "231004": "爱民区", - "231005": "西安区", - "231024": "东宁县", - "231025": "林口县", - "231081": "绥芬河市", - "231083": "海林市", - "231084": "宁安市", - "231085": "穆棱市", - "231086": "其它区", - "231100": "黑河市", - "231102": "爱辉区", - "231121": "嫩江县", - "231123": "逊克县", - "231124": "孙吴县", - "231181": "北安市", - "231182": "五大连池市", - "231183": "其它区", - "231200": "绥化市", - "231202": "北林区", - "231221": "望奎县", - "231222": "兰西县", - "231223": "青冈县", - "231224": "庆安县", - "231225": "明水县", - "231226": "绥棱县", - "231281": "安达市", - "231282": "肇东市", - "231283": "海伦市", - "231284": "其它区", - "232700": "大兴安岭地区", - "232702": "松岭区", - "232703": "新林区", - "232704": "呼中区", - "232721": "呼玛县", - "232722": "塔河县", - "232723": "漠河县", - "232724": "加格达奇区", - "232725": "其它区", - "310000": "上海", - "310100": "上海市", - "310101": "黄浦区", - "310104": "徐汇区", - "310105": "长宁区", - "310106": "静安区", - "310107": "普陀区", - "310108": "闸北区", - "310109": "虹口区", - "310110": "杨浦区", - "310112": "闵行区", - "310113": "宝山区", - "310114": "嘉定区", - "310115": "浦东新区", - "310116": "金山区", - "310117": "松江区", - "310118": "青浦区", - "310120": "奉贤区", - "310230": "崇明县", - "310231": "其它区", - "320000": "江苏省", - "320100": "南京市", - "320102": "玄武区", - "320104": "秦淮区", - "320105": "建邺区", - "320106": "鼓楼区", - "320111": "浦口区", - "320113": "栖霞区", - "320114": "雨花台区", - "320115": "江宁区", - "320116": "六合区", - "320124": "溧水区", - "320125": "高淳区", - "320126": "其它区", - "320200": "无锡市", - "320202": "崇安区", - "320203": "南长区", - "320204": "北塘区", - "320205": "锡山区", - "320206": "惠山区", - "320211": "滨湖区", - "320281": "江阴市", - "320282": "宜兴市", - "320297": "其它区", - "320300": "徐州市", - "320302": "鼓楼区", - "320303": "云龙区", - "320305": "贾汪区", - "320311": "泉山区", - "320321": "丰县", - "320322": "沛县", - "320323": "铜山区", - "320324": "睢宁县", - "320381": "新沂市", - "320382": "邳州市", - "320383": "其它区", - "320400": "常州市", - "320402": "天宁区", - "320404": "钟楼区", - "320405": "戚墅堰区", - "320411": "新北区", - "320412": "武进区", - "320481": "溧阳市", - "320482": "金坛市", - "320483": "其它区", - "320500": "苏州市", - "320505": "虎丘区", - "320506": "吴中区", - "320507": "相城区", - "320508": "姑苏区", - "320581": "常熟市", - "320582": "张家港市", - "320583": "昆山市", - "320584": "吴江区", - "320585": "太仓市", - "320596": "其它区", - "320600": "南通市", - "320602": "崇川区", - "320611": "港闸区", - "320612": "通州区", - "320621": "海安县", - "320623": "如东县", - "320681": "启东市", - "320682": "如皋市", - "320684": "海门市", - "320694": "其它区", - "320700": "连云港市", - "320703": "连云区", - "320705": "新浦区", - "320706": "海州区", - "320721": "赣榆县", - "320722": "东海县", - "320723": "灌云县", - "320724": "灌南县", - "320725": "其它区", - "320800": "淮安市", - "320802": "清河区", - "320803": "淮安区", - "320804": "淮阴区", - "320811": "清浦区", - "320826": "涟水县", - "320829": "洪泽县", - "320830": "盱眙县", - "320831": "金湖县", - "320832": "其它区", - "320900": "盐城市", - "320902": "亭湖区", - "320903": "盐都区", - "320921": "响水县", - "320922": "滨海县", - "320923": "阜宁县", - "320924": "射阳县", - "320925": "建湖县", - "320981": "东台市", - "320982": "大丰市", - "320983": "其它区", - "321000": "扬州市", - "321002": "广陵区", - "321003": "邗江区", - "321023": "宝应县", - "321081": "仪征市", - "321084": "高邮市", - "321088": "江都区", - "321093": "其它区", - "321100": "镇江市", - "321102": "京口区", - "321111": "润州区", - "321112": "丹徒区", - "321181": "丹阳市", - "321182": "扬中市", - "321183": "句容市", - "321184": "其它区", - "321200": "泰州市", - "321202": "海陵区", - "321203": "高港区", - "321281": "兴化市", - "321282": "靖江市", - "321283": "泰兴市", - "321284": "姜堰区", - "321285": "其它区", - "321300": "宿迁市", - "321302": "宿城区", - "321311": "宿豫区", - "321322": "沭阳县", - "321323": "泗阳县", - "321324": "泗洪县", - "321325": "其它区", - "330000": "浙江省", - "330100": "杭州市", - "330102": "上城区", - "330103": "下城区", - "330104": "江干区", - "330105": "拱墅区", - "330106": "西湖区", - "330108": "滨江区", - "330109": "萧山区", - "330110": "余杭区", - "330122": "桐庐县", - "330127": "淳安县", - "330182": "建德市", - "330183": "富阳市", - "330185": "临安市", - "330186": "其它区", - "330200": "宁波市", - "330203": "海曙区", - "330204": "江东区", - "330205": "江北区", - "330206": "北仑区", - "330211": "镇海区", - "330212": "鄞州区", - "330225": "象山县", - "330226": "宁海县", - "330281": "余姚市", - "330282": "慈溪市", - "330283": "奉化市", - "330284": "其它区", - "330300": "温州市", - "330302": "鹿城区", - "330303": "龙湾区", - "330304": "瓯海区", - "330322": "洞头县", - "330324": "永嘉县", - "330326": "平阳县", - "330327": "苍南县", - "330328": "文成县", - "330329": "泰顺县", - "330381": "瑞安市", - "330382": "乐清市", - "330383": "其它区", - "330400": "嘉兴市", - "330402": "南湖区", - "330411": "秀洲区", - "330421": "嘉善县", - "330424": "海盐县", - "330481": "海宁市", - "330482": "平湖市", - "330483": "桐乡市", - "330484": "其它区", - "330500": "湖州市", - "330502": "吴兴区", - "330503": "南浔区", - "330521": "德清县", - "330522": "长兴县", - "330523": "安吉县", - "330524": "其它区", - "330600": "绍兴市", - "330602": "越城区", - "330621": "绍兴县", - "330624": "新昌县", - "330681": "诸暨市", - "330682": "上虞市", - "330683": "嵊州市", - "330684": "其它区", - "330700": "金华市", - "330702": "婺城区", - "330703": "金东区", - "330723": "武义县", - "330726": "浦江县", - "330727": "磐安县", - "330781": "兰溪市", - "330782": "义乌市", - "330783": "东阳市", - "330784": "永康市", - "330785": "其它区", - "330800": "衢州市", - "330802": "柯城区", - "330803": "衢江区", - "330822": "常山县", - "330824": "开化县", - "330825": "龙游县", - "330881": "江山市", - "330882": "其它区", - "330900": "舟山市", - "330902": "定海区", - "330903": "普陀区", - "330921": "岱山县", - "330922": "嵊泗县", - "330923": "其它区", - "331000": "台州市", - "331002": "椒江区", - "331003": "黄岩区", - "331004": "路桥区", - "331021": "玉环县", - "331022": "三门县", - "331023": "天台县", - "331024": "仙居县", - "331081": "温岭市", - "331082": "临海市", - "331083": "其它区", - "331100": "丽水市", - "331102": "莲都区", - "331121": "青田县", - "331122": "缙云县", - "331123": "遂昌县", - "331124": "松阳县", - "331125": "云和县", - "331126": "庆元县", - "331127": "景宁畲族自治县", - "331181": "龙泉市", - "331182": "其它区", - "340000": "安徽省", - "340100": "合肥市", - "340102": "瑶海区", - "340103": "庐阳区", - "340104": "蜀山区", - "340111": "包河区", - "340121": "长丰县", - "340122": "肥东县", - "340123": "肥西县", - "340192": "其它区", - "340200": "芜湖市", - "340202": "镜湖区", - "340203": "弋江区", - "340207": "鸠江区", - "340208": "三山区", - "340221": "芜湖县", - "340222": "繁昌县", - "340223": "南陵县", - "340224": "其它区", - "340300": "蚌埠市", - "340302": "龙子湖区", - "340303": "蚌山区", - "340304": "禹会区", - "340311": "淮上区", - "340321": "怀远县", - "340322": "五河县", - "340323": "固镇县", - "340324": "其它区", - "340400": "淮南市", - "340402": "大通区", - "340403": "田家庵区", - "340404": "谢家集区", - "340405": "八公山区", - "340406": "潘集区", - "340421": "凤台县", - "340422": "其它区", - "340500": "马鞍山市", - "340503": "花山区", - "340504": "雨山区", - "340506": "博望区", - "340521": "当涂县", - "340522": "其它区", - "340600": "淮北市", - "340602": "杜集区", - "340603": "相山区", - "340604": "烈山区", - "340621": "濉溪县", - "340622": "其它区", - "340700": "铜陵市", - "340702": "铜官山区", - "340703": "狮子山区", - "340711": "郊区", - "340721": "铜陵县", - "340722": "其它区", - "340800": "安庆市", - "340802": "迎江区", - "340803": "大观区", - "340811": "宜秀区", - "340822": "怀宁县", - "340823": "枞阳县", - "340824": "潜山县", - "340825": "太湖县", - "340826": "宿松县", - "340827": "望江县", - "340828": "岳西县", - "340881": "桐城市", - "340882": "其它区", - "341000": "黄山市", - "341002": "屯溪区", - "341003": "黄山区", - "341004": "徽州区", - "341021": "歙县", - "341022": "休宁县", - "341023": "黟县", - "341024": "祁门县", - "341025": "其它区", - "341100": "滁州市", - "341102": "琅琊区", - "341103": "南谯区", - "341122": "来安县", - "341124": "全椒县", - "341125": "定远县", - "341126": "凤阳县", - "341181": "天长市", - "341182": "明光市", - "341183": "其它区", - "341200": "阜阳市", - "341202": "颍州区", - "341203": "颍东区", - "341204": "颍泉区", - "341221": "临泉县", - "341222": "太和县", - "341225": "阜南县", - "341226": "颍上县", - "341282": "界首市", - "341283": "其它区", - "341300": "宿州市", - "341302": "埇桥区", - "341321": "砀山县", - "341322": "萧县", - "341323": "灵璧县", - "341324": "泗县", - "341325": "其它区", - "341400": "巢湖市", - "341421": "庐江县", - "341422": "无为县", - "341423": "含山县", - "341424": "和县", - "341500": "六安市", - "341502": "金安区", - "341503": "裕安区", - "341521": "寿县", - "341522": "霍邱县", - "341523": "舒城县", - "341524": "金寨县", - "341525": "霍山县", - "341526": "其它区", - "341600": "亳州市", - "341602": "谯城区", - "341621": "涡阳县", - "341622": "蒙城县", - "341623": "利辛县", - "341624": "其它区", - "341700": "池州市", - "341702": "贵池区", - "341721": "东至县", - "341722": "石台县", - "341723": "青阳县", - "341724": "其它区", - "341800": "宣城市", - "341802": "宣州区", - "341821": "郎溪县", - "341822": "广德县", - "341823": "泾县", - "341824": "绩溪县", - "341825": "旌德县", - "341881": "宁国市", - "341882": "其它区", - "350000": "福建省", - "350100": "福州市", - "350102": "鼓楼区", - "350103": "台江区", - "350104": "仓山区", - "350105": "马尾区", - "350111": "晋安区", - "350121": "闽侯县", - "350122": "连江县", - "350123": "罗源县", - "350124": "闽清县", - "350125": "永泰县", - "350128": "平潭县", - "350181": "福清市", - "350182": "长乐市", - "350183": "其它区", - "350200": "厦门市", - "350203": "思明区", - "350205": "海沧区", - "350206": "湖里区", - "350211": "集美区", - "350212": "同安区", - "350213": "翔安区", - "350214": "其它区", - "350300": "莆田市", - "350302": "城厢区", - "350303": "涵江区", - "350304": "荔城区", - "350305": "秀屿区", - "350322": "仙游县", - "350323": "其它区", - "350400": "三明市", - "350402": "梅列区", - "350403": "三元区", - "350421": "明溪县", - "350423": "清流县", - "350424": "宁化县", - "350425": "大田县", - "350426": "尤溪县", - "350427": "沙县", - "350428": "将乐县", - "350429": "泰宁县", - "350430": "建宁县", - "350481": "永安市", - "350482": "其它区", - "350500": "泉州市", - "350502": "鲤城区", - "350503": "丰泽区", - "350504": "洛江区", - "350505": "泉港区", - "350521": "惠安县", - "350524": "安溪县", - "350525": "永春县", - "350526": "德化县", - "350527": "金门县", - "350581": "石狮市", - "350582": "晋江市", - "350583": "南安市", - "350584": "其它区", - "350600": "漳州市", - "350602": "芗城区", - "350603": "龙文区", - "350622": "云霄县", - "350623": "漳浦县", - "350624": "诏安县", - "350625": "长泰县", - "350626": "东山县", - "350627": "南靖县", - "350628": "平和县", - "350629": "华安县", - "350681": "龙海市", - "350682": "其它区", - "350700": "南平市", - "350702": "延平区", - "350721": "顺昌县", - "350722": "浦城县", - "350723": "光泽县", - "350724": "松溪县", - "350725": "政和县", - "350781": "邵武市", - "350782": "武夷山市", - "350783": "建瓯市", - "350784": "建阳市", - "350785": "其它区", - "350800": "龙岩市", - "350802": "新罗区", - "350821": "长汀县", - "350822": "永定县", - "350823": "上杭县", - "350824": "武平县", - "350825": "连城县", - "350881": "漳平市", - "350882": "其它区", - "350900": "宁德市", - "350902": "蕉城区", - "350921": "霞浦县", - "350922": "古田县", - "350923": "屏南县", - "350924": "寿宁县", - "350925": "周宁县", - "350926": "柘荣县", - "350981": "福安市", - "350982": "福鼎市", - "350983": "其它区", - "360000": "江西省", - "360100": "南昌市", - "360102": "东湖区", - "360103": "西湖区", - "360104": "青云谱区", - "360105": "湾里区", - "360111": "青山湖区", - "360121": "南昌县", - "360122": "新建县", - "360123": "安义县", - "360124": "进贤县", - "360128": "其它区", - "360200": "景德镇市", - "360202": "昌江区", - "360203": "珠山区", - "360222": "浮梁县", - "360281": "乐平市", - "360282": "其它区", - "360300": "萍乡市", - "360302": "安源区", - "360313": "湘东区", - "360321": "莲花县", - "360322": "上栗县", - "360323": "芦溪县", - "360324": "其它区", - "360400": "九江市", - "360402": "庐山区", - "360403": "浔阳区", - "360421": "九江县", - "360423": "武宁县", - "360424": "修水县", - "360425": "永修县", - "360426": "德安县", - "360427": "星子县", - "360428": "都昌县", - "360429": "湖口县", - "360430": "彭泽县", - "360481": "瑞昌市", - "360482": "其它区", - "360483": "共青城市", - "360500": "新余市", - "360502": "渝水区", - "360521": "分宜县", - "360522": "其它区", - "360600": "鹰潭市", - "360602": "月湖区", - "360622": "余江县", - "360681": "贵溪市", - "360682": "其它区", - "360700": "赣州市", - "360702": "章贡区", - "360721": "赣县", - "360722": "信丰县", - "360723": "大余县", - "360724": "上犹县", - "360725": "崇义县", - "360726": "安远县", - "360727": "龙南县", - "360728": "定南县", - "360729": "全南县", - "360730": "宁都县", - "360731": "于都县", - "360732": "兴国县", - "360733": "会昌县", - "360734": "寻乌县", - "360735": "石城县", - "360781": "瑞金市", - "360782": "南康市", - "360783": "其它区", - "360800": "吉安市", - "360802": "吉州区", - "360803": "青原区", - "360821": "吉安县", - "360822": "吉水县", - "360823": "峡江县", - "360824": "新干县", - "360825": "永丰县", - "360826": "泰和县", - "360827": "遂川县", - "360828": "万安县", - "360829": "安福县", - "360830": "永新县", - "360881": "井冈山市", - "360882": "其它区", - "360900": "宜春市", - "360902": "袁州区", - "360921": "奉新县", - "360922": "万载县", - "360923": "上高县", - "360924": "宜丰县", - "360925": "靖安县", - "360926": "铜鼓县", - "360981": "丰城市", - "360982": "樟树市", - "360983": "高安市", - "360984": "其它区", - "361000": "抚州市", - "361002": "临川区", - "361021": "南城县", - "361022": "黎川县", - "361023": "南丰县", - "361024": "崇仁县", - "361025": "乐安县", - "361026": "宜黄县", - "361027": "金溪县", - "361028": "资溪县", - "361029": "东乡县", - "361030": "广昌县", - "361031": "其它区", - "361100": "上饶市", - "361102": "信州区", - "361121": "上饶县", - "361122": "广丰县", - "361123": "玉山县", - "361124": "铅山县", - "361125": "横峰县", - "361126": "弋阳县", - "361127": "余干县", - "361128": "鄱阳县", - "361129": "万年县", - "361130": "婺源县", - "361181": "德兴市", - "361182": "其它区", - "370000": "山东省", - "370100": "济南市", - "370102": "历下区", - "370103": "市中区", - "370104": "槐荫区", - "370105": "天桥区", - "370112": "历城区", - "370113": "长清区", - "370124": "平阴县", - "370125": "济阳县", - "370126": "商河县", - "370181": "章丘市", - "370182": "其它区", - "370200": "青岛市", - "370202": "市南区", - "370203": "市北区", - "370211": "黄岛区", - "370212": "崂山区", - "370213": "李沧区", - "370214": "城阳区", - "370281": "胶州市", - "370282": "即墨市", - "370283": "平度市", - "370285": "莱西市", - "370286": "其它区", - "370300": "淄博市", - "370302": "淄川区", - "370303": "张店区", - "370304": "博山区", - "370305": "临淄区", - "370306": "周村区", - "370321": "桓台县", - "370322": "高青县", - "370323": "沂源县", - "370324": "其它区", - "370400": "枣庄市", - "370402": "市中区", - "370403": "薛城区", - "370404": "峄城区", - "370405": "台儿庄区", - "370406": "山亭区", - "370481": "滕州市", - "370482": "其它区", - "370500": "东营市", - "370502": "东营区", - "370503": "河口区", - "370521": "垦利县", - "370522": "利津县", - "370523": "广饶县", - "370591": "其它区", - "370600": "烟台市", - "370602": "芝罘区", - "370611": "福山区", - "370612": "牟平区", - "370613": "莱山区", - "370634": "长岛县", - "370681": "龙口市", - "370682": "莱阳市", - "370683": "莱州市", - "370684": "蓬莱市", - "370685": "招远市", - "370686": "栖霞市", - "370687": "海阳市", - "370688": "其它区", - "370700": "潍坊市", - "370702": "潍城区", - "370703": "寒亭区", - "370704": "坊子区", - "370705": "奎文区", - "370724": "临朐县", - "370725": "昌乐县", - "370781": "青州市", - "370782": "诸城市", - "370783": "寿光市", - "370784": "安丘市", - "370785": "高密市", - "370786": "昌邑市", - "370787": "其它区", - "370800": "济宁市", - "370802": "市中区", - "370811": "任城区", - "370826": "微山县", - "370827": "鱼台县", - "370828": "金乡县", - "370829": "嘉祥县", - "370830": "汶上县", - "370831": "泗水县", - "370832": "梁山县", - "370881": "曲阜市", - "370882": "兖州市", - "370883": "邹城市", - "370884": "其它区", - "370900": "泰安市", - "370902": "泰山区", - "370903": "岱岳区", - "370921": "宁阳县", - "370923": "东平县", - "370982": "新泰市", - "370983": "肥城市", - "370984": "其它区", - "371000": "威海市", - "371002": "环翠区", - "371081": "文登市", - "371082": "荣成市", - "371083": "乳山市", - "371084": "其它区", - "371100": "日照市", - "371102": "东港区", - "371103": "岚山区", - "371121": "五莲县", - "371122": "莒县", - "371123": "其它区", - "371200": "莱芜市", - "371202": "莱城区", - "371203": "钢城区", - "371204": "其它区", - "371300": "临沂市", - "371302": "兰山区", - "371311": "罗庄区", - "371312": "河东区", - "371321": "沂南县", - "371322": "郯城县", - "371323": "沂水县", - "371324": "苍山县", - "371325": "费县", - "371326": "平邑县", - "371327": "莒南县", - "371328": "蒙阴县", - "371329": "临沭县", - "371330": "其它区", - "371400": "德州市", - "371402": "德城区", - "371421": "陵县", - "371422": "宁津县", - "371423": "庆云县", - "371424": "临邑县", - "371425": "齐河县", - "371426": "平原县", - "371427": "夏津县", - "371428": "武城县", - "371481": "乐陵市", - "371482": "禹城市", - "371483": "其它区", - "371500": "聊城市", - "371502": "东昌府区", - "371521": "阳谷县", - "371522": "莘县", - "371523": "茌平县", - "371524": "东阿县", - "371525": "冠县", - "371526": "高唐县", - "371581": "临清市", - "371582": "其它区", - "371600": "滨州市", - "371602": "滨城区", - "371621": "惠民县", - "371622": "阳信县", - "371623": "无棣县", - "371624": "沾化县", - "371625": "博兴县", - "371626": "邹平县", - "371627": "其它区", - "371700": "菏泽市", - "371702": "牡丹区", - "371721": "曹县", - "371722": "单县", - "371723": "成武县", - "371724": "巨野县", - "371725": "郓城县", - "371726": "鄄城县", - "371727": "定陶县", - "371728": "东明县", - "371729": "其它区", - "410000": "河南省", - "410100": "郑州市", - "410102": "中原区", - "410103": "二七区", - "410104": "管城回族区", - "410105": "金水区", - "410106": "上街区", - "410108": "惠济区", - "410122": "中牟县", - "410181": "巩义市", - "410182": "荥阳市", - "410183": "新密市", - "410184": "新郑市", - "410185": "登封市", - "410188": "其它区", - "410200": "开封市", - "410202": "龙亭区", - "410203": "顺河回族区", - "410204": "鼓楼区", - "410205": "禹王台区", - "410211": "金明区", - "410221": "杞县", - "410222": "通许县", - "410223": "尉氏县", - "410224": "开封县", - "410225": "兰考县", - "410226": "其它区", - "410300": "洛阳市", - "410302": "老城区", - "410303": "西工区", - "410304": "瀍河回族区", - "410305": "涧西区", - "410306": "吉利区", - "410307": "洛龙区", - "410322": "孟津县", - "410323": "新安县", - "410324": "栾川县", - "410325": "嵩县", - "410326": "汝阳县", - "410327": "宜阳县", - "410328": "洛宁县", - "410329": "伊川县", - "410381": "偃师市", - "410400": "平顶山市", - "410402": "新华区", - "410403": "卫东区", - "410404": "石龙区", - "410411": "湛河区", - "410421": "宝丰县", - "410422": "叶县", - "410423": "鲁山县", - "410425": "郏县", - "410481": "舞钢市", - "410482": "汝州市", - "410483": "其它区", - "410500": "安阳市", - "410502": "文峰区", - "410503": "北关区", - "410505": "殷都区", - "410506": "龙安区", - "410522": "安阳县", - "410523": "汤阴县", - "410526": "滑县", - "410527": "内黄县", - "410581": "林州市", - "410582": "其它区", - "410600": "鹤壁市", - "410602": "鹤山区", - "410603": "山城区", - "410611": "淇滨区", - "410621": "浚县", - "410622": "淇县", - "410623": "其它区", - "410700": "新乡市", - "410702": "红旗区", - "410703": "卫滨区", - "410704": "凤泉区", - "410711": "牧野区", - "410721": "新乡县", - "410724": "获嘉县", - "410725": "原阳县", - "410726": "延津县", - "410727": "封丘县", - "410728": "长垣县", - "410781": "卫辉市", - "410782": "辉县市", - "410783": "其它区", - "410800": "焦作市", - "410802": "解放区", - "410803": "中站区", - "410804": "马村区", - "410811": "山阳区", - "410821": "修武县", - "410822": "博爱县", - "410823": "武陟县", - "410825": "温县", - "410881": "济源市", - "410882": "沁阳市", - "410883": "孟州市", - "410884": "其它区", - "410900": "濮阳市", - "410902": "华龙区", - "410922": "清丰县", - "410923": "南乐县", - "410926": "范县", - "410927": "台前县", - "410928": "濮阳县", - "410929": "其它区", - "411000": "许昌市", - "411002": "魏都区", - "411023": "许昌县", - "411024": "鄢陵县", - "411025": "襄城县", - "411081": "禹州市", - "411082": "长葛市", - "411083": "其它区", - "411100": "漯河市", - "411102": "源汇区", - "411103": "郾城区", - "411104": "召陵区", - "411121": "舞阳县", - "411122": "临颍县", - "411123": "其它区", - "411200": "三门峡市", - "411202": "湖滨区", - "411221": "渑池县", - "411222": "陕县", - "411224": "卢氏县", - "411281": "义马市", - "411282": "灵宝市", - "411283": "其它区", - "411300": "南阳市", - "411302": "宛城区", - "411303": "卧龙区", - "411321": "南召县", - "411322": "方城县", - "411323": "西峡县", - "411324": "镇平县", - "411325": "内乡县", - "411326": "淅川县", - "411327": "社旗县", - "411328": "唐河县", - "411329": "新野县", - "411330": "桐柏县", - "411381": "邓州市", - "411382": "其它区", - "411400": "商丘市", - "411402": "梁园区", - "411403": "睢阳区", - "411421": "民权县", - "411422": "睢县", - "411423": "宁陵县", - "411424": "柘城县", - "411425": "虞城县", - "411426": "夏邑县", - "411481": "永城市", - "411482": "其它区", - "411500": "信阳市", - "411502": "浉河区", - "411503": "平桥区", - "411521": "罗山县", - "411522": "光山县", - "411523": "新县", - "411524": "商城县", - "411525": "固始县", - "411526": "潢川县", - "411527": "淮滨县", - "411528": "息县", - "411529": "其它区", - "411600": "周口市", - "411602": "川汇区", - "411621": "扶沟县", - "411622": "西华县", - "411623": "商水县", - "411624": "沈丘县", - "411625": "郸城县", - "411626": "淮阳县", - "411627": "太康县", - "411628": "鹿邑县", - "411681": "项城市", - "411682": "其它区", - "411700": "驻马店市", - "411702": "驿城区", - "411721": "西平县", - "411722": "上蔡县", - "411723": "平舆县", - "411724": "正阳县", - "411725": "确山县", - "411726": "泌阳县", - "411727": "汝南县", - "411728": "遂平县", - "411729": "新蔡县", - "411730": "其它区", - "420000": "湖北省", - "420100": "武汉市", - "420102": "江岸区", - "420103": "江汉区", - "420104": "硚口区", - "420105": "汉阳区", - "420106": "武昌区", - "420107": "青山区", - "420111": "洪山区", - "420112": "东西湖区", - "420113": "汉南区", - "420114": "蔡甸区", - "420115": "江夏区", - "420116": "黄陂区", - "420117": "新洲区", - "420118": "其它区", - "420200": "黄石市", - "420202": "黄石港区", - "420203": "西塞山区", - "420204": "下陆区", - "420205": "铁山区", - "420222": "阳新县", - "420281": "大冶市", - "420282": "其它区", - "420300": "十堰市", - "420302": "茅箭区", - "420303": "张湾区", - "420321": "郧县", - "420322": "郧西县", - "420323": "竹山县", - "420324": "竹溪县", - "420325": "房县", - "420381": "丹江口市", - "420383": "其它区", - "420500": "宜昌市", - "420502": "西陵区", - "420503": "伍家岗区", - "420504": "点军区", - "420505": "猇亭区", - "420506": "夷陵区", - "420525": "远安县", - "420526": "兴山县", - "420527": "秭归县", - "420528": "长阳土家族自治县", - "420529": "五峰土家族自治县", - "420581": "宜都市", - "420582": "当阳市", - "420583": "枝江市", - "420584": "其它区", - "420600": "襄阳市", - "420602": "襄城区", - "420606": "樊城区", - "420607": "襄州区", - "420624": "南漳县", - "420625": "谷城县", - "420626": "保康县", - "420682": "老河口市", - "420683": "枣阳市", - "420684": "宜城市", - "420685": "其它区", - "420700": "鄂州市", - "420702": "梁子湖区", - "420703": "华容区", - "420704": "鄂城区", - "420705": "其它区", - "420800": "荆门市", - "420802": "东宝区", - "420804": "掇刀区", - "420821": "京山县", - "420822": "沙洋县", - "420881": "钟祥市", - "420882": "其它区", - "420900": "孝感市", - "420902": "孝南区", - "420921": "孝昌县", - "420922": "大悟县", - "420923": "云梦县", - "420981": "应城市", - "420982": "安陆市", - "420984": "汉川市", - "420985": "其它区", - "421000": "荆州市", - "421002": "沙市区", - "421003": "荆州区", - "421022": "公安县", - "421023": "监利县", - "421024": "江陵县", - "421081": "石首市", - "421083": "洪湖市", - "421087": "松滋市", - "421088": "其它区", - "421100": "黄冈市", - "421102": "黄州区", - "421121": "团风县", - "421122": "红安县", - "421123": "罗田县", - "421124": "英山县", - "421125": "浠水县", - "421126": "蕲春县", - "421127": "黄梅县", - "421181": "麻城市", - "421182": "武穴市", - "421183": "其它区", - "421200": "咸宁市", - "421202": "咸安区", - "421221": "嘉鱼县", - "421222": "通城县", - "421223": "崇阳县", - "421224": "通山县", - "421281": "赤壁市", - "421283": "其它区", - "421300": "随州市", - "421302": "曾都区", - "421321": "随县", - "421381": "广水市", - "421382": "其它区", - "422800": "恩施土家族苗族自治州", - "422801": "恩施市", - "422802": "利川市", - "422822": "建始县", - "422823": "巴东县", - "422825": "宣恩县", - "422826": "咸丰县", - "422827": "来凤县", - "422828": "鹤峰县", - "422829": "其它区", - "429004": "仙桃市", - "429005": "潜江市", - "429006": "天门市", - "429021": "神农架林区", - "430000": "湖南省", - "430100": "长沙市", - "430102": "芙蓉区", - "430103": "天心区", - "430104": "岳麓区", - "430105": "开福区", - "430111": "雨花区", - "430121": "长沙县", - "430122": "望城区", - "430124": "宁乡县", - "430181": "浏阳市", - "430182": "其它区", - "430200": "株洲市", - "430202": "荷塘区", - "430203": "芦淞区", - "430204": "石峰区", - "430211": "天元区", - "430221": "株洲县", - "430223": "攸县", - "430224": "茶陵县", - "430225": "炎陵县", - "430281": "醴陵市", - "430282": "其它区", - "430300": "湘潭市", - "430302": "雨湖区", - "430304": "岳塘区", - "430321": "湘潭县", - "430381": "湘乡市", - "430382": "韶山市", - "430383": "其它区", - "430400": "衡阳市", - "430405": "珠晖区", - "430406": "雁峰区", - "430407": "石鼓区", - "430408": "蒸湘区", - "430412": "南岳区", - "430421": "衡阳县", - "430422": "衡南县", - "430423": "衡山县", - "430424": "衡东县", - "430426": "祁东县", - "430481": "耒阳市", - "430482": "常宁市", - "430483": "其它区", - "430500": "邵阳市", - "430502": "双清区", - "430503": "大祥区", - "430511": "北塔区", - "430521": "邵东县", - "430522": "新邵县", - "430523": "邵阳县", - "430524": "隆回县", - "430525": "洞口县", - "430527": "绥宁县", - "430528": "新宁县", - "430529": "城步苗族自治县", - "430581": "武冈市", - "430582": "其它区", - "430600": "岳阳市", - "430602": "岳阳楼区", - "430603": "云溪区", - "430611": "君山区", - "430621": "岳阳县", - "430623": "华容县", - "430624": "湘阴县", - "430626": "平江县", - "430681": "汨罗市", - "430682": "临湘市", - "430683": "其它区", - "430700": "常德市", - "430702": "武陵区", - "430703": "鼎城区", - "430721": "安乡县", - "430722": "汉寿县", - "430723": "澧县", - "430724": "临澧县", - "430725": "桃源县", - "430726": "石门县", - "430781": "津市市", - "430782": "其它区", - "430800": "张家界市", - "430802": "永定区", - "430811": "武陵源区", - "430821": "慈利县", - "430822": "桑植县", - "430823": "其它区", - "430900": "益阳市", - "430902": "资阳区", - "430903": "赫山区", - "430921": "南县", - "430922": "桃江县", - "430923": "安化县", - "430981": "沅江市", - "430982": "其它区", - "431000": "郴州市", - "431002": "北湖区", - "431003": "苏仙区", - "431021": "桂阳县", - "431022": "宜章县", - "431023": "永兴县", - "431024": "嘉禾县", - "431025": "临武县", - "431026": "汝城县", - "431027": "桂东县", - "431028": "安仁县", - "431081": "资兴市", - "431082": "其它区", - "431100": "永州市", - "431102": "零陵区", - "431103": "冷水滩区", - "431121": "祁阳县", - "431122": "东安县", - "431123": "双牌县", - "431124": "道县", - "431125": "江永县", - "431126": "宁远县", - "431127": "蓝山县", - "431128": "新田县", - "431129": "江华瑶族自治县", - "431130": "其它区", - "431200": "怀化市", - "431202": "鹤城区", - "431221": "中方县", - "431222": "沅陵县", - "431223": "辰溪县", - "431224": "溆浦县", - "431225": "会同县", - "431226": "麻阳苗族自治县", - "431227": "新晃侗族自治县", - "431228": "芷江侗族自治县", - "431229": "靖州苗族侗族自治县", - "431230": "通道侗族自治县", - "431281": "洪江市", - "431282": "其它区", - "431300": "娄底市", - "431302": "娄星区", - "431321": "双峰县", - "431322": "新化县", - "431381": "冷水江市", - "431382": "涟源市", - "431383": "其它区", - "433100": "湘西土家族苗族自治州", - "433101": "吉首市", - "433122": "泸溪县", - "433123": "凤凰县", - "433124": "花垣县", - "433125": "保靖县", - "433126": "古丈县", - "433127": "永顺县", - "433130": "龙山县", - "433131": "其它区", - "440000": "广东省", - "440100": "广州市", - "440103": "荔湾区", - "440104": "越秀区", - "440105": "海珠区", - "440106": "天河区", - "440111": "白云区", - "440112": "黄埔区", - "440113": "番禺区", - "440114": "花都区", - "440115": "南沙区", - "440116": "萝岗区", - "440183": "增城市", - "440184": "从化市", - "440189": "其它区", - "440200": "韶关市", - "440203": "武江区", - "440204": "浈江区", - "440205": "曲江区", - "440222": "始兴县", - "440224": "仁化县", - "440229": "翁源县", - "440232": "乳源瑶族自治县", - "440233": "新丰县", - "440281": "乐昌市", - "440282": "南雄市", - "440283": "其它区", - "440300": "深圳市", - "440303": "罗湖区", - "440304": "福田区", - "440305": "南山区", - "440306": "宝安区", - "440307": "龙岗区", - "440308": "盐田区", - "440309": "其它区", - "440320": "光明新区", - "440321": "坪山新区", - "440322": "大鹏新区", - "440323": "龙华新区", - "440400": "珠海市", - "440402": "香洲区", - "440403": "斗门区", - "440404": "金湾区", - "440488": "其它区", - "440500": "汕头市", - "440507": "龙湖区", - "440511": "金平区", - "440512": "濠江区", - "440513": "潮阳区", - "440514": "潮南区", - "440515": "澄海区", - "440523": "南澳县", - "440524": "其它区", - "440600": "佛山市", - "440604": "禅城区", - "440605": "南海区", - "440606": "顺德区", - "440607": "三水区", - "440608": "高明区", - "440609": "其它区", - "440700": "江门市", - "440703": "蓬江区", - "440704": "江海区", - "440705": "新会区", - "440781": "台山市", - "440783": "开平市", - "440784": "鹤山市", - "440785": "恩平市", - "440786": "其它区", - "440800": "湛江市", - "440802": "赤坎区", - "440803": "霞山区", - "440804": "坡头区", - "440811": "麻章区", - "440823": "遂溪县", - "440825": "徐闻县", - "440881": "廉江市", - "440882": "雷州市", - "440883": "吴川市", - "440884": "其它区", - "440900": "茂名市", - "440902": "茂南区", - "440903": "茂港区", - "440923": "电白县", - "440981": "高州市", - "440982": "化州市", - "440983": "信宜市", - "440984": "其它区", - "441200": "肇庆市", - "441202": "端州区", - "441203": "鼎湖区", - "441223": "广宁县", - "441224": "怀集县", - "441225": "封开县", - "441226": "德庆县", - "441283": "高要市", - "441284": "四会市", - "441285": "其它区", - "441300": "惠州市", - "441302": "惠城区", - "441303": "惠阳区", - "441322": "博罗县", - "441323": "惠东县", - "441324": "龙门县", - "441325": "其它区", - "441400": "梅州市", - "441402": "梅江区", - "441421": "梅县", - "441422": "大埔县", - "441423": "丰顺县", - "441424": "五华县", - "441426": "平远县", - "441427": "蕉岭县", - "441481": "兴宁市", - "441482": "其它区", - "441500": "汕尾市", - "441502": "城区", - "441521": "海丰县", - "441523": "陆河县", - "441581": "陆丰市", - "441582": "其它区", - "441600": "河源市", - "441602": "源城区", - "441621": "紫金县", - "441622": "龙川县", - "441623": "连平县", - "441624": "和平县", - "441625": "东源县", - "441626": "其它区", - "441700": "阳江市", - "441702": "江城区", - "441721": "阳西县", - "441723": "阳东县", - "441781": "阳春市", - "441782": "其它区", - "441800": "清远市", - "441802": "清城区", - "441821": "佛冈县", - "441823": "阳山县", - "441825": "连山壮族瑶族自治县", - "441826": "连南瑶族自治县", - "441827": "清新区", - "441881": "英德市", - "441882": "连州市", - "441883": "其它区", - "441900": "东莞市", - "442000": "中山市", - "442101": "东沙群岛", - "445100": "潮州市", - "445102": "湘桥区", - "445121": "潮安区", - "445122": "饶平县", - "445186": "其它区", - "445200": "揭阳市", - "445202": "榕城区", - "445221": "揭东区", - "445222": "揭西县", - "445224": "惠来县", - "445281": "普宁市", - "445285": "其它区", - "445300": "云浮市", - "445302": "云城区", - "445321": "新兴县", - "445322": "郁南县", - "445323": "云安县", - "445381": "罗定市", - "445382": "其它区", - "450000": "广西壮族自治区", - "450100": "南宁市", - "450102": "兴宁区", - "450103": "青秀区", - "450105": "江南区", - "450107": "西乡塘区", - "450108": "良庆区", - "450109": "邕宁区", - "450122": "武鸣县", - "450123": "隆安县", - "450124": "马山县", - "450125": "上林县", - "450126": "宾阳县", - "450127": "横县", - "450128": "其它区", - "450200": "柳州市", - "450202": "城中区", - "450203": "鱼峰区", - "450204": "柳南区", - "450205": "柳北区", - "450221": "柳江县", - "450222": "柳城县", - "450223": "鹿寨县", - "450224": "融安县", - "450225": "融水苗族自治县", - "450226": "三江侗族自治县", - "450227": "其它区", - "450300": "桂林市", - "450302": "秀峰区", - "450303": "叠彩区", - "450304": "象山区", - "450305": "七星区", - "450311": "雁山区", - "450321": "阳朔县", - "450322": "临桂区", - "450323": "灵川县", - "450324": "全州县", - "450325": "兴安县", - "450326": "永福县", - "450327": "灌阳县", - "450328": "龙胜各族自治县", - "450329": "资源县", - "450330": "平乐县", - "450331": "荔浦县", - "450332": "恭城瑶族自治县", - "450333": "其它区", - "450400": "梧州市", - "450403": "万秀区", - "450405": "长洲区", - "450406": "龙圩区", - "450421": "苍梧县", - "450422": "藤县", - "450423": "蒙山县", - "450481": "岑溪市", - "450482": "其它区", - "450500": "北海市", - "450502": "海城区", - "450503": "银海区", - "450512": "铁山港区", - "450521": "合浦县", - "450522": "其它区", - "450600": "防城港市", - "450602": "港口区", - "450603": "防城区", - "450621": "上思县", - "450681": "东兴市", - "450682": "其它区", - "450700": "钦州市", - "450702": "钦南区", - "450703": "钦北区", - "450721": "灵山县", - "450722": "浦北县", - "450723": "其它区", - "450800": "贵港市", - "450802": "港北区", - "450803": "港南区", - "450804": "覃塘区", - "450821": "平南县", - "450881": "桂平市", - "450882": "其它区", - "450900": "玉林市", - "450902": "玉州区", - "450903": "福绵区", - "450921": "容县", - "450922": "陆川县", - "450923": "博白县", - "450924": "兴业县", - "450981": "北流市", - "450982": "其它区", - "451000": "百色市", - "451002": "右江区", - "451021": "田阳县", - "451022": "田东县", - "451023": "平果县", - "451024": "德保县", - "451025": "靖西县", - "451026": "那坡县", - "451027": "凌云县", - "451028": "乐业县", - "451029": "田林县", - "451030": "西林县", - "451031": "隆林各族自治县", - "451032": "其它区", - "451100": "贺州市", - "451102": "八步区", - "451119": "平桂管理区", - "451121": "昭平县", - "451122": "钟山县", - "451123": "富川瑶族自治县", - "451124": "其它区", - "451200": "河池市", - "451202": "金城江区", - "451221": "南丹县", - "451222": "天峨县", - "451223": "凤山县", - "451224": "东兰县", - "451225": "罗城仫佬族自治县", - "451226": "环江毛南族自治县", - "451227": "巴马瑶族自治县", - "451228": "都安瑶族自治县", - "451229": "大化瑶族自治县", - "451281": "宜州市", - "451282": "其它区", - "451300": "来宾市", - "451302": "兴宾区", - "451321": "忻城县", - "451322": "象州县", - "451323": "武宣县", - "451324": "金秀瑶族自治县", - "451381": "合山市", - "451382": "其它区", - "451400": "崇左市", - "451402": "江州区", - "451421": "扶绥县", - "451422": "宁明县", - "451423": "龙州县", - "451424": "大新县", - "451425": "天等县", - "451481": "凭祥市", - "451482": "其它区", - "460000": "海南省", - "460100": "海口市", - "460105": "秀英区", - "460106": "龙华区", - "460107": "琼山区", - "460108": "美兰区", - "460109": "其它区", - "460200": "三亚市", - "460300": "三沙市", - "460321": "西沙群岛", - "460322": "南沙群岛", - "460323": "中沙群岛的岛礁及其海域", - "469001": "五指山市", - "469002": "琼海市", - "469003": "儋州市", - "469005": "文昌市", - "469006": "万宁市", - "469007": "东方市", - "469025": "定安县", - "469026": "屯昌县", - "469027": "澄迈县", - "469028": "临高县", - "469030": "白沙黎族自治县", - "469031": "昌江黎族自治县", - "469033": "乐东黎族自治县", - "469034": "陵水黎族自治县", - "469035": "保亭黎族苗族自治县", - "469036": "琼中黎族苗族自治县", - "500000": "重庆", - "500100": "重庆市", - "500101": "万州区", - "500102": "涪陵区", - "500103": "渝中区", - "500104": "大渡口区", - "500105": "江北区", - "500106": "沙坪坝区", - "500107": "九龙坡区", - "500108": "南岸区", - "500109": "北碚区", - "500110": "万盛区", - "500111": "双桥区", - "500112": "渝北区", - "500113": "巴南区", - "500114": "黔江区", - "500115": "长寿区", - "500222": "綦江区", - "500223": "潼南县", - "500224": "铜梁县", - "500225": "大足区", - "500226": "荣昌县", - "500227": "璧山县", - "500228": "梁平县", - "500229": "城口县", - "500230": "丰都县", - "500231": "垫江县", - "500232": "武隆县", - "500233": "忠县", - "500234": "开县", - "500235": "云阳县", - "500236": "奉节县", - "500237": "巫山县", - "500238": "巫溪县", - "500240": "石柱土家族自治县", - "500241": "秀山土家族苗族自治县", - "500242": "酉阳土家族苗族自治县", - "500243": "彭水苗族土家族自治县", - "500381": "江津区", - "500382": "合川区", - "500383": "永川区", - "500384": "南川区", - "500385": "其它区", - "510000": "四川省", - "510100": "成都市", - "510104": "锦江区", - "510105": "青羊区", - "510106": "金牛区", - "510107": "武侯区", - "510108": "成华区", - "510112": "龙泉驿区", - "510113": "青白江区", - "510114": "新都区", - "510115": "温江区", - "510121": "金堂县", - "510122": "双流县", - "510124": "郫县", - "510129": "大邑县", - "510131": "蒲江县", - "510132": "新津县", - "510181": "都江堰市", - "510182": "彭州市", - "510183": "邛崃市", - "510184": "崇州市", - "510185": "其它区", - "510300": "自贡市", - "510302": "自流井区", - "510303": "贡井区", - "510304": "大安区", - "510311": "沿滩区", - "510321": "荣县", - "510322": "富顺县", - "510323": "其它区", - "510400": "攀枝花市", - "510402": "东区", - "510403": "西区", - "510411": "仁和区", - "510421": "米易县", - "510422": "盐边县", - "510423": "其它区", - "510500": "泸州市", - "510502": "江阳区", - "510503": "纳溪区", - "510504": "龙马潭区", - "510521": "泸县", - "510522": "合江县", - "510524": "叙永县", - "510525": "古蔺县", - "510526": "其它区", - "510600": "德阳市", - "510603": "旌阳区", - "510623": "中江县", - "510626": "罗江县", - "510681": "广汉市", - "510682": "什邡市", - "510683": "绵竹市", - "510684": "其它区", - "510700": "绵阳市", - "510703": "涪城区", - "510704": "游仙区", - "510722": "三台县", - "510723": "盐亭县", - "510724": "安县", - "510725": "梓潼县", - "510726": "北川羌族自治县", - "510727": "平武县", - "510781": "江油市", - "510782": "其它区", - "510800": "广元市", - "510802": "利州区", - "510811": "昭化区", - "510812": "朝天区", - "510821": "旺苍县", - "510822": "青川县", - "510823": "剑阁县", - "510824": "苍溪县", - "510825": "其它区", - "510900": "遂宁市", - "510903": "船山区", - "510904": "安居区", - "510921": "蓬溪县", - "510922": "射洪县", - "510923": "大英县", - "510924": "其它区", - "511000": "内江市", - "511002": "市中区", - "511011": "东兴区", - "511024": "威远县", - "511025": "资中县", - "511028": "隆昌县", - "511029": "其它区", - "511100": "乐山市", - "511102": "市中区", - "511111": "沙湾区", - "511112": "五通桥区", - "511113": "金口河区", - "511123": "犍为县", - "511124": "井研县", - "511126": "夹江县", - "511129": "沐川县", - "511132": "峨边彝族自治县", - "511133": "马边彝族自治县", - "511181": "峨眉山市", - "511182": "其它区", - "511300": "南充市", - "511302": "顺庆区", - "511303": "高坪区", - "511304": "嘉陵区", - "511321": "南部县", - "511322": "营山县", - "511323": "蓬安县", - "511324": "仪陇县", - "511325": "西充县", - "511381": "阆中市", - "511382": "其它区", - "511400": "眉山市", - "511402": "东坡区", - "511421": "仁寿县", - "511422": "彭山县", - "511423": "洪雅县", - "511424": "丹棱县", - "511425": "青神县", - "511426": "其它区", - "511500": "宜宾市", - "511502": "翠屏区", - "511521": "宜宾县", - "511522": "南溪区", - "511523": "江安县", - "511524": "长宁县", - "511525": "高县", - "511526": "珙县", - "511527": "筠连县", - "511528": "兴文县", - "511529": "屏山县", - "511530": "其它区", - "511600": "广安市", - "511602": "广安区", - "511603": "前锋区", - "511621": "岳池县", - "511622": "武胜县", - "511623": "邻水县", - "511681": "华蓥市", - "511683": "其它区", - "511700": "达州市", - "511702": "通川区", - "511721": "达川区", - "511722": "宣汉县", - "511723": "开江县", - "511724": "大竹县", - "511725": "渠县", - "511781": "万源市", - "511782": "其它区", - "511800": "雅安市", - "511802": "雨城区", - "511821": "名山区", - "511822": "荥经县", - "511823": "汉源县", - "511824": "石棉县", - "511825": "天全县", - "511826": "芦山县", - "511827": "宝兴县", - "511828": "其它区", - "511900": "巴中市", - "511902": "巴州区", - "511903": "恩阳区", - "511921": "通江县", - "511922": "南江县", - "511923": "平昌县", - "511924": "其它区", - "512000": "资阳市", - "512002": "雁江区", - "512021": "安岳县", - "512022": "乐至县", - "512081": "简阳市", - "512082": "其它区", - "513200": "阿坝藏族羌族自治州", - "513221": "汶川县", - "513222": "理县", - "513223": "茂县", - "513224": "松潘县", - "513225": "九寨沟县", - "513226": "金川县", - "513227": "小金县", - "513228": "黑水县", - "513229": "马尔康县", - "513230": "壤塘县", - "513231": "阿坝县", - "513232": "若尔盖县", - "513233": "红原县", - "513234": "其它区", - "513300": "甘孜藏族自治州", - "513321": "康定县", - "513322": "泸定县", - "513323": "丹巴县", - "513324": "九龙县", - "513325": "雅江县", - "513326": "道孚县", - "513327": "炉霍县", - "513328": "甘孜县", - "513329": "新龙县", - "513330": "德格县", - "513331": "白玉县", - "513332": "石渠县", - "513333": "色达县", - "513334": "理塘县", - "513335": "巴塘县", - "513336": "乡城县", - "513337": "稻城县", - "513338": "得荣县", - "513339": "其它区", - "513400": "凉山彝族自治州", - "513401": "西昌市", - "513422": "木里藏族自治县", - "513423": "盐源县", - "513424": "德昌县", - "513425": "会理县", - "513426": "会东县", - "513427": "宁南县", - "513428": "普格县", - "513429": "布拖县", - "513430": "金阳县", - "513431": "昭觉县", - "513432": "喜德县", - "513433": "冕宁县", - "513434": "越西县", - "513435": "甘洛县", - "513436": "美姑县", - "513437": "雷波县", - "513438": "其它区", - "520000": "贵州省", - "520100": "贵阳市", - "520102": "南明区", - "520103": "云岩区", - "520111": "花溪区", - "520112": "乌当区", - "520113": "白云区", - "520121": "开阳县", - "520122": "息烽县", - "520123": "修文县", - "520151": "观山湖区", - "520181": "清镇市", - "520182": "其它区", - "520200": "六盘水市", - "520201": "钟山区", - "520203": "六枝特区", - "520221": "水城县", - "520222": "盘县", - "520223": "其它区", - "520300": "遵义市", - "520302": "红花岗区", - "520303": "汇川区", - "520321": "遵义县", - "520322": "桐梓县", - "520323": "绥阳县", - "520324": "正安县", - "520325": "道真仡佬族苗族自治县", - "520326": "务川仡佬族苗族自治县", - "520327": "凤冈县", - "520328": "湄潭县", - "520329": "余庆县", - "520330": "习水县", - "520381": "赤水市", - "520382": "仁怀市", - "520383": "其它区", - "520400": "安顺市", - "520402": "西秀区", - "520421": "平坝县", - "520422": "普定县", - "520423": "镇宁布依族苗族自治县", - "520424": "关岭布依族苗族自治县", - "520425": "紫云苗族布依族自治县", - "520426": "其它区", - "522200": "铜仁市", - "522201": "碧江区", - "522222": "江口县", - "522223": "玉屏侗族自治县", - "522224": "石阡县", - "522225": "思南县", - "522226": "印江土家族苗族自治县", - "522227": "德江县", - "522228": "沿河土家族自治县", - "522229": "松桃苗族自治县", - "522230": "万山区", - "522231": "其它区", - "522300": "黔西南布依族苗族自治州", - "522301": "兴义市", - "522322": "兴仁县", - "522323": "普安县", - "522324": "晴隆县", - "522325": "贞丰县", - "522326": "望谟县", - "522327": "册亨县", - "522328": "安龙县", - "522329": "其它区", - "522400": "毕节市", - "522401": "七星关区", - "522422": "大方县", - "522423": "黔西县", - "522424": "金沙县", - "522425": "织金县", - "522426": "纳雍县", - "522427": "威宁彝族回族苗族自治县", - "522428": "赫章县", - "522429": "其它区", - "522600": "黔东南苗族侗族自治州", - "522601": "凯里市", - "522622": "黄平县", - "522623": "施秉县", - "522624": "三穗县", - "522625": "镇远县", - "522626": "岑巩县", - "522627": "天柱县", - "522628": "锦屏县", - "522629": "剑河县", - "522630": "台江县", - "522631": "黎平县", - "522632": "榕江县", - "522633": "从江县", - "522634": "雷山县", - "522635": "麻江县", - "522636": "丹寨县", - "522637": "其它区", - "522700": "黔南布依族苗族自治州", - "522701": "都匀市", - "522702": "福泉市", - "522722": "荔波县", - "522723": "贵定县", - "522725": "瓮安县", - "522726": "独山县", - "522727": "平塘县", - "522728": "罗甸县", - "522729": "长顺县", - "522730": "龙里县", - "522731": "惠水县", - "522732": "三都水族自治县", - "522733": "其它区", - "530000": "云南省", - "530100": "昆明市", - "530102": "五华区", - "530103": "盘龙区", - "530111": "官渡区", - "530112": "西山区", - "530113": "东川区", - "530121": "呈贡区", - "530122": "晋宁县", - "530124": "富民县", - "530125": "宜良县", - "530126": "石林彝族自治县", - "530127": "嵩明县", - "530128": "禄劝彝族苗族自治县", - "530129": "寻甸回族彝族自治县", - "530181": "安宁市", - "530182": "其它区", - "530300": "曲靖市", - "530302": "麒麟区", - "530321": "马龙县", - "530322": "陆良县", - "530323": "师宗县", - "530324": "罗平县", - "530325": "富源县", - "530326": "会泽县", - "530328": "沾益县", - "530381": "宣威市", - "530382": "其它区", - "530400": "玉溪市", - "530402": "红塔区", - "530421": "江川县", - "530422": "澄江县", - "530423": "通海县", - "530424": "华宁县", - "530425": "易门县", - "530426": "峨山彝族自治县", - "530427": "新平彝族傣族自治县", - "530428": "元江哈尼族彝族傣族自治县", - "530429": "其它区", - "530500": "保山市", - "530502": "隆阳区", - "530521": "施甸县", - "530522": "腾冲县", - "530523": "龙陵县", - "530524": "昌宁县", - "530525": "其它区", - "530600": "昭通市", - "530602": "昭阳区", - "530621": "鲁甸县", - "530622": "巧家县", - "530623": "盐津县", - "530624": "大关县", - "530625": "永善县", - "530626": "绥江县", - "530627": "镇雄县", - "530628": "彝良县", - "530629": "威信县", - "530630": "水富县", - "530631": "其它区", - "530700": "丽江市", - "530702": "古城区", - "530721": "玉龙纳西族自治县", - "530722": "永胜县", - "530723": "华坪县", - "530724": "宁蒗彝族自治县", - "530725": "其它区", - "530800": "普洱市", - "530802": "思茅区", - "530821": "宁洱哈尼族彝族自治县", - "530822": "墨江哈尼族自治县", - "530823": "景东彝族自治县", - "530824": "景谷傣族彝族自治县", - "530825": "镇沅彝族哈尼族拉祜族自治县", - "530826": "江城哈尼族彝族自治县", - "530827": "孟连傣族拉祜族佤族自治县", - "530828": "澜沧拉祜族自治县", - "530829": "西盟佤族自治县", - "530830": "其它区", - "530900": "临沧市", - "530902": "临翔区", - "530921": "凤庆县", - "530922": "云县", - "530923": "永德县", - "530924": "镇康县", - "530925": "双江拉祜族佤族布朗族傣族自治县", - "530926": "耿马傣族佤族自治县", - "530927": "沧源佤族自治县", - "530928": "其它区", - "532300": "楚雄彝族自治州", - "532301": "楚雄市", - "532322": "双柏县", - "532323": "牟定县", - "532324": "南华县", - "532325": "姚安县", - "532326": "大姚县", - "532327": "永仁县", - "532328": "元谋县", - "532329": "武定县", - "532331": "禄丰县", - "532332": "其它区", - "532500": "红河哈尼族彝族自治州", - "532501": "个旧市", - "532502": "开远市", - "532522": "蒙自市", - "532523": "屏边苗族自治县", - "532524": "建水县", - "532525": "石屏县", - "532526": "弥勒市", - "532527": "泸西县", - "532528": "元阳县", - "532529": "红河县", - "532530": "金平苗族瑶族傣族自治县", - "532531": "绿春县", - "532532": "河口瑶族自治县", - "532533": "其它区", - "532600": "文山壮族苗族自治州", - "532621": "文山市", - "532622": "砚山县", - "532623": "西畴县", - "532624": "麻栗坡县", - "532625": "马关县", - "532626": "丘北县", - "532627": "广南县", - "532628": "富宁县", - "532629": "其它区", - "532800": "西双版纳傣族自治州", - "532801": "景洪市", - "532822": "勐海县", - "532823": "勐腊县", - "532824": "其它区", - "532900": "大理白族自治州", - "532901": "大理市", - "532922": "漾濞彝族自治县", - "532923": "祥云县", - "532924": "宾川县", - "532925": "弥渡县", - "532926": "南涧彝族自治县", - "532927": "巍山彝族回族自治县", - "532928": "永平县", - "532929": "云龙县", - "532930": "洱源县", - "532931": "剑川县", - "532932": "鹤庆县", - "532933": "其它区", - "533100": "德宏傣族景颇族自治州", - "533102": "瑞丽市", - "533103": "芒市", - "533122": "梁河县", - "533123": "盈江县", - "533124": "陇川县", - "533125": "其它区", - "533300": "怒江傈僳族自治州", - "533321": "泸水县", - "533323": "福贡县", - "533324": "贡山独龙族怒族自治县", - "533325": "兰坪白族普米族自治县", - "533326": "其它区", - "533400": "迪庆藏族自治州", - "533421": "香格里拉县", - "533422": "德钦县", - "533423": "维西傈僳族自治县", - "533424": "其它区", - "540000": "西藏自治区", - "540100": "拉萨市", - "540102": "城关区", - "540121": "林周县", - "540122": "当雄县", - "540123": "尼木县", - "540124": "曲水县", - "540125": "堆龙德庆县", - "540126": "达孜县", - "540127": "墨竹工卡县", - "540128": "其它区", - "542100": "昌都地区", - "542121": "昌都县", - "542122": "江达县", - "542123": "贡觉县", - "542124": "类乌齐县", - "542125": "丁青县", - "542126": "察雅县", - "542127": "八宿县", - "542128": "左贡县", - "542129": "芒康县", - "542132": "洛隆县", - "542133": "边坝县", - "542134": "其它区", - "542200": "山南地区", - "542221": "乃东县", - "542222": "扎囊县", - "542223": "贡嘎县", - "542224": "桑日县", - "542225": "琼结县", - "542226": "曲松县", - "542227": "措美县", - "542228": "洛扎县", - "542229": "加查县", - "542231": "隆子县", - "542232": "错那县", - "542233": "浪卡子县", - "542234": "其它区", - "542300": "日喀则地区", - "542301": "日喀则市", - "542322": "南木林县", - "542323": "江孜县", - "542324": "定日县", - "542325": "萨迦县", - "542326": "拉孜县", - "542327": "昂仁县", - "542328": "谢通门县", - "542329": "白朗县", - "542330": "仁布县", - "542331": "康马县", - "542332": "定结县", - "542333": "仲巴县", - "542334": "亚东县", - "542335": "吉隆县", - "542336": "聂拉木县", - "542337": "萨嘎县", - "542338": "岗巴县", - "542339": "其它区", - "542400": "那曲地区", - "542421": "那曲县", - "542422": "嘉黎县", - "542423": "比如县", - "542424": "聂荣县", - "542425": "安多县", - "542426": "申扎县", - "542427": "索县", - "542428": "班戈县", - "542429": "巴青县", - "542430": "尼玛县", - "542431": "其它区", - "542432": "双湖县", - "542500": "阿里地区", - "542521": "普兰县", - "542522": "札达县", - "542523": "噶尔县", - "542524": "日土县", - "542525": "革吉县", - "542526": "改则县", - "542527": "措勤县", - "542528": "其它区", - "542600": "林芝地区", - "542621": "林芝县", - "542622": "工布江达县", - "542623": "米林县", - "542624": "墨脱县", - "542625": "波密县", - "542626": "察隅县", - "542627": "朗县", - "542628": "其它区", - "610000": "陕西省", - "610100": "西安市", - "610102": "新城区", - "610103": "碑林区", - "610104": "莲湖区", - "610111": "灞桥区", - "610112": "未央区", - "610113": "雁塔区", - "610114": "阎良区", - "610115": "临潼区", - "610116": "长安区", - "610122": "蓝田县", - "610124": "周至县", - "610125": "户县", - "610126": "高陵县", - "610127": "其它区", - "610200": "铜川市", - "610202": "王益区", - "610203": "印台区", - "610204": "耀州区", - "610222": "宜君县", - "610223": "其它区", - "610300": "宝鸡市", - "610302": "渭滨区", - "610303": "金台区", - "610304": "陈仓区", - "610322": "凤翔县", - "610323": "岐山县", - "610324": "扶风县", - "610326": "眉县", - "610327": "陇县", - "610328": "千阳县", - "610329": "麟游县", - "610330": "凤县", - "610331": "太白县", - "610332": "其它区", - "610400": "咸阳市", - "610402": "秦都区", - "610403": "杨陵区", - "610404": "渭城区", - "610422": "三原县", - "610423": "泾阳县", - "610424": "乾县", - "610425": "礼泉县", - "610426": "永寿县", - "610427": "彬县", - "610428": "长武县", - "610429": "旬邑县", - "610430": "淳化县", - "610431": "武功县", - "610481": "兴平市", - "610482": "其它区", - "610500": "渭南市", - "610502": "临渭区", - "610521": "华县", - "610522": "潼关县", - "610523": "大荔县", - "610524": "合阳县", - "610525": "澄城县", - "610526": "蒲城县", - "610527": "白水县", - "610528": "富平县", - "610581": "韩城市", - "610582": "华阴市", - "610583": "其它区", - "610600": "延安市", - "610602": "宝塔区", - "610621": "延长县", - "610622": "延川县", - "610623": "子长县", - "610624": "安塞县", - "610625": "志丹县", - "610626": "吴起县", - "610627": "甘泉县", - "610628": "富县", - "610629": "洛川县", - "610630": "宜川县", - "610631": "黄龙县", - "610632": "黄陵县", - "610633": "其它区", - "610700": "汉中市", - "610702": "汉台区", - "610721": "南郑县", - "610722": "城固县", - "610723": "洋县", - "610724": "西乡县", - "610725": "勉县", - "610726": "宁强县", - "610727": "略阳县", - "610728": "镇巴县", - "610729": "留坝县", - "610730": "佛坪县", - "610731": "其它区", - "610800": "榆林市", - "610802": "榆阳区", - "610821": "神木县", - "610822": "府谷县", - "610823": "横山县", - "610824": "靖边县", - "610825": "定边县", - "610826": "绥德县", - "610827": "米脂县", - "610828": "佳县", - "610829": "吴堡县", - "610830": "清涧县", - "610831": "子洲县", - "610832": "其它区", - "610900": "安康市", - "610902": "汉滨区", - "610921": "汉阴县", - "610922": "石泉县", - "610923": "宁陕县", - "610924": "紫阳县", - "610925": "岚皋县", - "610926": "平利县", - "610927": "镇坪县", - "610928": "旬阳县", - "610929": "白河县", - "610930": "其它区", - "611000": "商洛市", - "611002": "商州区", - "611021": "洛南县", - "611022": "丹凤县", - "611023": "商南县", - "611024": "山阳县", - "611025": "镇安县", - "611026": "柞水县", - "611027": "其它区", - "620000": "甘肃省", - "620100": "兰州市", - "620102": "城关区", - "620103": "七里河区", - "620104": "西固区", - "620105": "安宁区", - "620111": "红古区", - "620121": "永登县", - "620122": "皋兰县", - "620123": "榆中县", - "620124": "其它区", - "620200": "嘉峪关市", - "620300": "金昌市", - "620302": "金川区", - "620321": "永昌县", - "620322": "其它区", - "620400": "白银市", - "620402": "白银区", - "620403": "平川区", - "620421": "靖远县", - "620422": "会宁县", - "620423": "景泰县", - "620424": "其它区", - "620500": "天水市", - "620502": "秦州区", - "620503": "麦积区", - "620521": "清水县", - "620522": "秦安县", - "620523": "甘谷县", - "620524": "武山县", - "620525": "张家川回族自治县", - "620526": "其它区", - "620600": "武威市", - "620602": "凉州区", - "620621": "民勤县", - "620622": "古浪县", - "620623": "天祝藏族自治县", - "620624": "其它区", - "620700": "张掖市", - "620702": "甘州区", - "620721": "肃南裕固族自治县", - "620722": "民乐县", - "620723": "临泽县", - "620724": "高台县", - "620725": "山丹县", - "620726": "其它区", - "620800": "平凉市", - "620802": "崆峒区", - "620821": "泾川县", - "620822": "灵台县", - "620823": "崇信县", - "620824": "华亭县", - "620825": "庄浪县", - "620826": "静宁县", - "620827": "其它区", - "620900": "酒泉市", - "620902": "肃州区", - "620921": "金塔县", - "620922": "瓜州县", - "620923": "肃北蒙古族自治县", - "620924": "阿克塞哈萨克族自治县", - "620981": "玉门市", - "620982": "敦煌市", - "620983": "其它区", - "621000": "庆阳市", - "621002": "西峰区", - "621021": "庆城县", - "621022": "环县", - "621023": "华池县", - "621024": "合水县", - "621025": "正宁县", - "621026": "宁县", - "621027": "镇原县", - "621028": "其它区", - "621100": "定西市", - "621102": "安定区", - "621121": "通渭县", - "621122": "陇西县", - "621123": "渭源县", - "621124": "临洮县", - "621125": "漳县", - "621126": "岷县", - "621127": "其它区", - "621200": "陇南市", - "621202": "武都区", - "621221": "成县", - "621222": "文县", - "621223": "宕昌县", - "621224": "康县", - "621225": "西和县", - "621226": "礼县", - "621227": "徽县", - "621228": "两当县", - "621229": "其它区", - "622900": "临夏回族自治州", - "622901": "临夏市", - "622921": "临夏县", - "622922": "康乐县", - "622923": "永靖县", - "622924": "广河县", - "622925": "和政县", - "622926": "东乡族自治县", - "622927": "积石山保安族东乡族撒拉族自治县", - "622928": "其它区", - "623000": "甘南藏族自治州", - "623001": "合作市", - "623021": "临潭县", - "623022": "卓尼县", - "623023": "舟曲县", - "623024": "迭部县", - "623025": "玛曲县", - "623026": "碌曲县", - "623027": "夏河县", - "623028": "其它区", - "630000": "青海省", - "630100": "西宁市", - "630102": "城东区", - "630103": "城中区", - "630104": "城西区", - "630105": "城北区", - "630121": "大通回族土族自治县", - "630122": "湟中县", - "630123": "湟源县", - "630124": "其它区", - "632100": "海东市", - "632121": "平安县", - "632122": "民和回族土族自治县", - "632123": "乐都区", - "632126": "互助土族自治县", - "632127": "化隆回族自治县", - "632128": "循化撒拉族自治县", - "632129": "其它区", - "632200": "海北藏族自治州", - "632221": "门源回族自治县", - "632222": "祁连县", - "632223": "海晏县", - "632224": "刚察县", - "632225": "其它区", - "632300": "黄南藏族自治州", - "632321": "同仁县", - "632322": "尖扎县", - "632323": "泽库县", - "632324": "河南蒙古族自治县", - "632325": "其它区", - "632500": "海南藏族自治州", - "632521": "共和县", - "632522": "同德县", - "632523": "贵德县", - "632524": "兴海县", - "632525": "贵南县", - "632526": "其它区", - "632600": "果洛藏族自治州", - "632621": "玛沁县", - "632622": "班玛县", - "632623": "甘德县", - "632624": "达日县", - "632625": "久治县", - "632626": "玛多县", - "632627": "其它区", - "632700": "玉树藏族自治州", - "632721": "玉树市", - "632722": "杂多县", - "632723": "称多县", - "632724": "治多县", - "632725": "囊谦县", - "632726": "曲麻莱县", - "632727": "其它区", - "632800": "海西蒙古族藏族自治州", - "632801": "格尔木市", - "632802": "德令哈市", - "632821": "乌兰县", - "632822": "都兰县", - "632823": "天峻县", - "632824": "其它区", - "640000": "宁夏回族自治区", - "640100": "银川市", - "640104": "兴庆区", - "640105": "西夏区", - "640106": "金凤区", - "640121": "永宁县", - "640122": "贺兰县", - "640181": "灵武市", - "640182": "其它区", - "640200": "石嘴山市", - "640202": "大武口区", - "640205": "惠农区", - "640221": "平罗县", - "640222": "其它区", - "640300": "吴忠市", - "640302": "利通区", - "640303": "红寺堡区", - "640323": "盐池县", - "640324": "同心县", - "640381": "青铜峡市", - "640382": "其它区", - "640400": "固原市", - "640402": "原州区", - "640422": "西吉县", - "640423": "隆德县", - "640424": "泾源县", - "640425": "彭阳县", - "640426": "其它区", - "640500": "中卫市", - "640502": "沙坡头区", - "640521": "中宁县", - "640522": "海原县", - "640523": "其它区", - "650000": "新疆维吾尔自治区", - "650100": "乌鲁木齐市", - "650102": "天山区", - "650103": "沙依巴克区", - "650104": "新市区", - "650105": "水磨沟区", - "650106": "头屯河区", - "650107": "达坂城区", - "650109": "米东区", - "650121": "乌鲁木齐县", - "650122": "其它区", - "650200": "克拉玛依市", - "650202": "独山子区", - "650203": "克拉玛依区", - "650204": "白碱滩区", - "650205": "乌尔禾区", - "650206": "其它区", - "652100": "吐鲁番地区", - "652101": "吐鲁番市", - "652122": "鄯善县", - "652123": "托克逊县", - "652124": "其它区", - "652200": "哈密地区", - "652201": "哈密市", - "652222": "巴里坤哈萨克自治县", - "652223": "伊吾县", - "652224": "其它区", - "652300": "昌吉回族自治州", - "652301": "昌吉市", - "652302": "阜康市", - "652323": "呼图壁县", - "652324": "玛纳斯县", - "652325": "奇台县", - "652327": "吉木萨尔县", - "652328": "木垒哈萨克自治县", - "652329": "其它区", - "652700": "博尔塔拉蒙古自治州", - "652701": "博乐市", - "652702": "阿拉山口市", - "652722": "精河县", - "652723": "温泉县", - "652724": "其它区", - "652800": "巴音郭楞蒙古自治州", - "652801": "库尔勒市", - "652822": "轮台县", - "652823": "尉犁县", - "652824": "若羌县", - "652825": "且末县", - "652826": "焉耆回族自治县", - "652827": "和静县", - "652828": "和硕县", - "652829": "博湖县", - "652830": "其它区", - "652900": "阿克苏地区", - "652901": "阿克苏市", - "652922": "温宿县", - "652923": "库车县", - "652924": "沙雅县", - "652925": "新和县", - "652926": "拜城县", - "652927": "乌什县", - "652928": "阿瓦提县", - "652929": "柯坪县", - "652930": "其它区", - "653000": "克孜勒苏柯尔克孜自治州", - "653001": "阿图什市", - "653022": "阿克陶县", - "653023": "阿合奇县", - "653024": "乌恰县", - "653025": "其它区", - "653100": "喀什地区", - "653101": "喀什市", - "653121": "疏附县", - "653122": "疏勒县", - "653123": "英吉沙县", - "653124": "泽普县", - "653125": "莎车县", - "653126": "叶城县", - "653127": "麦盖提县", - "653128": "岳普湖县", - "653129": "伽师县", - "653130": "巴楚县", - "653131": "塔什库尔干塔吉克自治县", - "653132": "其它区", - "653200": "和田地区", - "653201": "和田市", - "653221": "和田县", - "653222": "墨玉县", - "653223": "皮山县", - "653224": "洛浦县", - "653225": "策勒县", - "653226": "于田县", - "653227": "民丰县", - "653228": "其它区", - "654000": "伊犁哈萨克自治州", - "654002": "伊宁市", - "654003": "奎屯市", - "654021": "伊宁县", - "654022": "察布查尔锡伯自治县", - "654023": "霍城县", - "654024": "巩留县", - "654025": "新源县", - "654026": "昭苏县", - "654027": "特克斯县", - "654028": "尼勒克县", - "654029": "其它区", - "654200": "塔城地区", - "654201": "塔城市", - "654202": "乌苏市", - "654221": "额敏县", - "654223": "沙湾县", - "654224": "托里县", - "654225": "裕民县", - "654226": "和布克赛尔蒙古自治县", - "654227": "其它区", - "654300": "阿勒泰地区", - "654301": "阿勒泰市", - "654321": "布尔津县", - "654322": "富蕴县", - "654323": "福海县", - "654324": "哈巴河县", - "654325": "青河县", - "654326": "吉木乃县", - "654327": "其它区", - "659001": "石河子市", - "659002": "阿拉尔市", - "659003": "图木舒克市", - "659004": "五家渠市", - "710000": "台湾", - "710100": "台北市", - "710101": "中正区", - "710102": "大同区", - "710103": "中山区", - "710104": "松山区", - "710105": "大安区", - "710106": "万华区", - "710107": "信义区", - "710108": "士林区", - "710109": "北投区", - "710110": "内湖区", - "710111": "南港区", - "710112": "文山区", - "710113": "其它区", - "710200": "高雄市", - "710201": "新兴区", - "710202": "前金区", - "710203": "芩雅区", - "710204": "盐埕区", - "710205": "鼓山区", - "710206": "旗津区", - "710207": "前镇区", - "710208": "三民区", - "710209": "左营区", - "710210": "楠梓区", - "710211": "小港区", - "710212": "其它区", - "710241": "苓雅区", - "710242": "仁武区", - "710243": "大社区", - "710244": "冈山区", - "710245": "路竹区", - "710246": "阿莲区", - "710247": "田寮区", - "710248": "燕巢区", - "710249": "桥头区", - "710250": "梓官区", - "710251": "弥陀区", - "710252": "永安区", - "710253": "湖内区", - "710254": "凤山区", - "710255": "大寮区", - "710256": "林园区", - "710257": "鸟松区", - "710258": "大树区", - "710259": "旗山区", - "710260": "美浓区", - "710261": "六龟区", - "710262": "内门区", - "710263": "杉林区", - "710264": "甲仙区", - "710265": "桃源区", - "710266": "那玛夏区", - "710267": "茂林区", - "710268": "茄萣区", - "710300": "台南市", - "710301": "中西区", - "710302": "东区", - "710303": "南区", - "710304": "北区", - "710305": "安平区", - "710306": "安南区", - "710307": "其它区", - "710339": "永康区", - "710340": "归仁区", - "710341": "新化区", - "710342": "左镇区", - "710343": "玉井区", - "710344": "楠西区", - "710345": "南化区", - "710346": "仁德区", - "710347": "关庙区", - "710348": "龙崎区", - "710349": "官田区", - "710350": "麻豆区", - "710351": "佳里区", - "710352": "西港区", - "710353": "七股区", - "710354": "将军区", - "710355": "学甲区", - "710356": "北门区", - "710357": "新营区", - "710358": "后壁区", - "710359": "白河区", - "710360": "东山区", - "710361": "六甲区", - "710362": "下营区", - "710363": "柳营区", - "710364": "盐水区", - "710365": "善化区", - "710366": "大内区", - "710367": "山上区", - "710368": "新市区", - "710369": "安定区", - "710400": "台中市", - "710401": "中区", - "710402": "东区", - "710403": "南区", - "710404": "西区", - "710405": "北区", - "710406": "北屯区", - "710407": "西屯区", - "710408": "南屯区", - "710409": "其它区", - "710431": "太平区", - "710432": "大里区", - "710433": "雾峰区", - "710434": "乌日区", - "710435": "丰原区", - "710436": "后里区", - "710437": "石冈区", - "710438": "东势区", - "710439": "和平区", - "710440": "新社区", - "710441": "潭子区", - "710442": "大雅区", - "710443": "神冈区", - "710444": "大肚区", - "710445": "沙鹿区", - "710446": "龙井区", - "710447": "梧栖区", - "710448": "清水区", - "710449": "大甲区", - "710450": "外埔区", - "710451": "大安区", - "710500": "金门县", - "710507": "金沙镇", - "710508": "金湖镇", - "710509": "金宁乡", - "710510": "金城镇", - "710511": "烈屿乡", - "710512": "乌坵乡", - "710600": "南投县", - "710614": "南投市", - "710615": "中寮乡", - "710616": "草屯镇", - "710617": "国姓乡", - "710618": "埔里镇", - "710619": "仁爱乡", - "710620": "名间乡", - "710621": "集集镇", - "710622": "水里乡", - "710623": "鱼池乡", - "710624": "信义乡", - "710625": "竹山镇", - "710626": "鹿谷乡", - "710700": "基隆市", - "710701": "仁爱区", - "710702": "信义区", - "710703": "中正区", - "710704": "中山区", - "710705": "安乐区", - "710706": "暖暖区", - "710707": "七堵区", - "710708": "其它区", - "710800": "新竹市", - "710801": "东区", - "710802": "北区", - "710803": "香山区", - "710804": "其它区", - "710900": "嘉义市", - "710901": "东区", - "710902": "西区", - "710903": "其它区", - "711100": "新北市", - "711130": "万里区", - "711131": "金山区", - "711132": "板桥区", - "711133": "汐止区", - "711134": "深坑区", - "711135": "石碇区", - "711136": "瑞芳区", - "711137": "平溪区", - "711138": "双溪区", - "711139": "贡寮区", - "711140": "新店区", - "711141": "坪林区", - "711142": "乌来区", - "711143": "永和区", - "711144": "中和区", - "711145": "土城区", - "711146": "三峡区", - "711147": "树林区", - "711148": "莺歌区", - "711149": "三重区", - "711150": "新庄区", - "711151": "泰山区", - "711152": "林口区", - "711153": "芦洲区", - "711154": "五股区", - "711155": "八里区", - "711156": "淡水区", - "711157": "三芝区", - "711158": "石门区", - "711200": "宜兰县", - "711214": "宜兰市", - "711215": "头城镇", - "711216": "礁溪乡", - "711217": "壮围乡", - "711218": "员山乡", - "711219": "罗东镇", - "711220": "三星乡", - "711221": "大同乡", - "711222": "五结乡", - "711223": "冬山乡", - "711224": "苏澳镇", - "711225": "南澳乡", - "711226": "钓鱼台", - "711300": "新竹县", - "711314": "竹北市", - "711315": "湖口乡", - "711316": "新丰乡", - "711317": "新埔镇", - "711318": "关西镇", - "711319": "芎林乡", - "711320": "宝山乡", - "711321": "竹东镇", - "711322": "五峰乡", - "711323": "横山乡", - "711324": "尖石乡", - "711325": "北埔乡", - "711326": "峨眉乡", - "711400": "桃园县", - "711414": "中坜市", - "711415": "平镇市", - "711416": "龙潭乡", - "711417": "杨梅市", - "711418": "新屋乡", - "711419": "观音乡", - "711420": "桃园市", - "711421": "龟山乡", - "711422": "八德市", - "711423": "大溪镇", - "711424": "复兴乡", - "711425": "大园乡", - "711426": "芦竹乡", - "711500": "苗栗县", - "711519": "竹南镇", - "711520": "头份镇", - "711521": "三湾乡", - "711522": "南庄乡", - "711523": "狮潭乡", - "711524": "后龙镇", - "711525": "通霄镇", - "711526": "苑里镇", - "711527": "苗栗市", - "711528": "造桥乡", - "711529": "头屋乡", - "711530": "公馆乡", - "711531": "大湖乡", - "711532": "泰安乡", - "711533": "铜锣乡", - "711534": "三义乡", - "711535": "西湖乡", - "711536": "卓兰镇", - "711700": "彰化县", - "711727": "彰化市", - "711728": "芬园乡", - "711729": "花坛乡", - "711730": "秀水乡", - "711731": "鹿港镇", - "711732": "福兴乡", - "711733": "线西乡", - "711734": "和美镇", - "711735": "伸港乡", - "711736": "员林镇", - "711737": "社头乡", - "711738": "永靖乡", - "711739": "埔心乡", - "711740": "溪湖镇", - "711741": "大村乡", - "711742": "埔盐乡", - "711743": "田中镇", - "711744": "北斗镇", - "711745": "田尾乡", - "711746": "埤头乡", - "711747": "溪州乡", - "711748": "竹塘乡", - "711749": "二林镇", - "711750": "大城乡", - "711751": "芳苑乡", - "711752": "二水乡", - "711900": "嘉义县", - "711919": "番路乡", - "711920": "梅山乡", - "711921": "竹崎乡", - "711922": "阿里山乡", - "711923": "中埔乡", - "711924": "大埔乡", - "711925": "水上乡", - "711926": "鹿草乡", - "711927": "太保市", - "711928": "朴子市", - "711929": "东石乡", - "711930": "六脚乡", - "711931": "新港乡", - "711932": "民雄乡", - "711933": "大林镇", - "711934": "溪口乡", - "711935": "义竹乡", - "711936": "布袋镇", - "712100": "云林县", - "712121": "斗南镇", - "712122": "大埤乡", - "712123": "虎尾镇", - "712124": "土库镇", - "712125": "褒忠乡", - "712126": "东势乡", - "712127": "台西乡", - "712128": "仑背乡", - "712129": "麦寮乡", - "712130": "斗六市", - "712131": "林内乡", - "712132": "古坑乡", - "712133": "莿桐乡", - "712134": "西螺镇", - "712135": "二仑乡", - "712136": "北港镇", - "712137": "水林乡", - "712138": "口湖乡", - "712139": "四湖乡", - "712140": "元长乡", - "712400": "屏东县", - "712434": "屏东市", - "712435": "三地门乡", - "712436": "雾台乡", - "712437": "玛家乡", - "712438": "九如乡", - "712439": "里港乡", - "712440": "高树乡", - "712441": "盐埔乡", - "712442": "长治乡", - "712443": "麟洛乡", - "712444": "竹田乡", - "712445": "内埔乡", - "712446": "万丹乡", - "712447": "潮州镇", - "712448": "泰武乡", - "712449": "来义乡", - "712450": "万峦乡", - "712451": "崁顶乡", - "712452": "新埤乡", - "712453": "南州乡", - "712454": "林边乡", - "712455": "东港镇", - "712456": "琉球乡", - "712457": "佳冬乡", - "712458": "新园乡", - "712459": "枋寮乡", - "712460": "枋山乡", - "712461": "春日乡", - "712462": "狮子乡", - "712463": "车城乡", - "712464": "牡丹乡", - "712465": "恒春镇", - "712466": "满州乡", - "712500": "台东县", - "712517": "台东市", - "712518": "绿岛乡", - "712519": "兰屿乡", - "712520": "延平乡", - "712521": "卑南乡", - "712522": "鹿野乡", - "712523": "关山镇", - "712524": "海端乡", - "712525": "池上乡", - "712526": "东河乡", - "712527": "成功镇", - "712528": "长滨乡", - "712529": "金峰乡", - "712530": "大武乡", - "712531": "达仁乡", - "712532": "太麻里乡", - "712600": "花莲县", - "712615": "花莲市", - "712616": "新城乡", - "712617": "太鲁阁", - "712618": "秀林乡", - "712619": "吉安乡", - "712620": "寿丰乡", - "712621": "凤林镇", - "712622": "光复乡", - "712623": "丰滨乡", - "712624": "瑞穗乡", - "712625": "万荣乡", - "712626": "玉里镇", - "712627": "卓溪乡", - "712628": "富里乡", - "712700": "澎湖县", - "712707": "马公市", - "712708": "西屿乡", - "712709": "望安乡", - "712710": "七美乡", - "712711": "白沙乡", - "712712": "湖西乡", - "712800": "连江县", - "712805": "南竿乡", - "712806": "北竿乡", - "712807": "莒光乡", - "712808": "东引乡", - "810000": "香港特别行政区", - "810100": "香港岛", - "810101": "中西区", - "810102": "湾仔", - "810103": "东区", - "810104": "南区", - "810200": "九龙", - "810201": "九龙城区", - "810202": "油尖旺区", - "810203": "深水埗区", - "810204": "黄大仙区", - "810205": "观塘区", - "810300": "新界", - "810301": "北区", - "810302": "大埔区", - "810303": "沙田区", - "810304": "西贡区", - "810305": "元朗区", - "810306": "屯门区", - "810307": "荃湾区", - "810308": "葵青区", - "810309": "离岛区", - "820000": "澳门特别行政区", - "820100": "澳门半岛", - "820200": "离岛", - "990000": "海外", - "990100": "海外" -}; - -/* - ## Address 字典数据 - - 字典数据来源 http://www.atatech.org/articles/30028?rnd=254259856 - - 国标 省(市)级行政区划码表 - - 华北 北京市 天津市 河北省 山西省 内蒙古自治区 - 东北 辽宁省 吉林省 黑龙江省 - 华东 上海市 江苏省 浙江省 安徽省 福建省 江西省 山东省 - 华南 广东省 广西壮族自治区 海南省 - 华中 河南省 湖北省 湖南省 - 西南 重庆市 四川省 贵州省 云南省 西藏自治区 - 西北 陕西省 甘肃省 青海省 宁夏回族自治区 新疆维吾尔自治区 - 港澳台 香港特别行政区 澳门特别行政区 台湾省 -*/ - -// id pid/parentId name children - -// 将扁平数组转化为树状 -function createTree(list) { - const bugList = []; // 用于一次遍历后没有找到父级元素的元素 - const { result, mapped } = list.reduce( - (all, item) => { - const { mapped, result } = all; - const { id, pid } = item; - mapped[id] = item; // 记录这个点 - - if (pid === id) { - // 自己为自己父级则为 - result.push(item); - return { mapped, result }; - } - const hasParent = mapped.hasOwnProperty(pid); - if (!hasParent) { - // 父级尚未插入到mapped记录中 - bugList.push(item); - return { mapped, result }; - } - const parent = mapped[pid]; - parent.children = [...(parent.children || []), item]; - return { mapped, result }; - }, - { - mapped: {}, // 缓存已经记录过的数据 - result: [], - }, - ); - bugList.forEach((item) => { - const parent = mapped[item.pid]; - parent.children = [...(parent.children || []), item]; - }); - return result; -} -const ids = Object.keys(DICT); - -// 转化数组内对象的表现形式 -const fixed = Object.entries(DICT).map(([id, value]) => { - let pid = - id.slice(2, 6) === '0000' ? id : id.slice(4, 6) === '00' ? id.slice(0, 2) + '0000' : id.slice(0, 4) + '00'; - if (!ids.includes(pid)) { - // 修复 pid 并不存在,但是是归属于顶级的错误 - pid = id.slice(0, 2) + '0000'; - } - return { - id, - pid, - name: value, - }; -}); - -const DICT_FIXED = createTree(fixed); - -var _patternLetters = { - yyyy: 'getFullYear', - yy: function (date) { - return ('' + date.getFullYear()).slice(2); - }, - y: 'yy', - - MM: function (date) { - const m = date.getMonth() + 1; - return m < 10 ? '0' + m : m; - }, - M: function (date) { - return date.getMonth() + 1; - }, - - dd: function (date) { - const d = date.getDate(); - return d < 10 ? '0' + d : d; - }, - d: 'getDate', - - HH: function (date) { - const h = date.getHours(); - return h < 10 ? '0' + h : h; - }, - H: 'getHours', - hh: function (date) { - const h = date.getHours() % 12; - return h < 10 ? '0' + h : h; - }, - h: function (date) { - return date.getHours() % 12; - }, - - mm: function (date) { - const m = date.getMinutes(); - return m < 10 ? '0' + m : m; - }, - m: 'getMinutes', - - ss: function (date) { - const s = date.getSeconds(); - return s < 10 ? '0' + s : s; - }, - s: 'getSeconds', - - SS: function (date) { - const ms = date.getMilliseconds(); - return (ms < 10 && '00' + ms) || (ms < 100 && '0' + ms) || ms; - }, - S: 'getMilliseconds', - - A: function (date) { - return date.getHours() < 12 ? 'AM' : 'PM'; - }, - a: function (date) { - return date.getHours() < 12 ? 'am' : 'pm'; - }, - T: 'getTime', -}; - -/* eslint-disable no-fallthrough*/ - -const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); - -// 返回一个随机的日期字符串。 -function date(format = 'yyyy-MM-dd') { - return _formatDate(_randomDate(), format); -} -function datetime(format = 'yyyy-MM-dd HH:mm:ss') { - return date(format); -} -function time(format = 'HH:mm:ss') { - return date(format); -} -function now(unit, format) { - // now(unit) now(format) - if (arguments.length === 1) { - // now(format) - if (!/year|month|day|hour|minute|second|week/.test(unit)) { - format = unit; - unit = ''; - } - } - unit = (unit || '').toLowerCase(); - format = format || 'yyyy-MM-dd HH:mm:ss'; - - const date = new Date(); - - /* jshint -W086 */ - // 参考自 http://momentjs.cn/docs/#/manipulating/start-of/ - switch (unit) { - case 'year': - date.setMonth(0); - case 'month': - date.setDate(1); - case 'week': - case 'day': - date.setHours(0); - case 'hour': - date.setMinutes(0); - case 'minute': - date.setSeconds(0); - case 'second': - date.setMilliseconds(0); - } - switch (unit) { - case 'week': - date.setDate(date.getDate() - date.getDay()); - } - - return _formatDate(date, format); -} - -function _formatDate(date, format) { - return format.replace(_rformat, function creatNewSubString($0, flag) { - // 这个函数用于捕获格式化日期的关键字,然后进行替换 - const targetPattern = _patternLetters[flag]; - return typeof targetPattern === 'function' - ? targetPattern(date) - : targetPattern in _patternLetters - ? creatNewSubString($0, targetPattern) - : date[targetPattern](); - }); -} - -function _randomDate(min = new Date(0), max = new Date()) { - return new Date(integer(min.getTime(), max.getTime())); -} - -function timestamp(min, max) { - if (min instanceof Date && max instanceof Date) return _randomDate(min, max).getTime(); - return _randomDate().getTime(); -} - -/* - 随机生成一个 18 位身份证。 - - [身份证](http://baike.baidu.com/view/1697.htm#4) - 地址码 6 + 出生日期码 8 + 顺序码 3 + 校验码 1 - [《中华人民共和国行政区划代码》国家标准(GB/T2260)](http://zhidao.baidu.com/question/1954561.html) -*/ -function id() { - let id; - let sum = 0; - const rank = ['7', '9', '10', '5', '8', '4', '2', '1', '6', '3', '7', '9', '10', '5', '8', '4', '2']; - const last = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']; - - id = pick(DICT_FIXED).id + date('yyyyMMdd') + string$1('number', 3); - - for (let i = 0; i < id.length; i++) { - sum += id[i] * rank[i]; - } - id += last[sum % 11]; - - return id; -} - -/* - 随机生成一个 GUID。 - - http://www.broofa.com/2008/09/javascript-uuid-function/ - [UUID 规范](http://www.ietf.org/rfc/rfc4122.txt) - UUIDs (Universally Unique IDentifier) - GUIDs (Globally Unique IDentifier) - The formal definition of the UUID string representation is provided by the following ABNF [7]: - UUID = time-low "-" time-mid "-" - time-high-and-version "-" - clock-seq-and-reserved - clock-seq-low "-" node - time-low = 4hexOctet - time-mid = 2hexOctet - time-high-and-version = 2hexOctet - clock-seq-and-reserved = hexOctet - clock-seq-low = hexOctet - node = 6hexOctet - hexOctet = hexDigit hexDigit - hexDigit = - "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" / - "a" / "b" / "c" / "d" / "e" / "f" / - "A" / "B" / "C" / "D" / "E" / "F" - - https://github.com/victorquinn/chancejs/blob/develop/chance.js#L1349 - - KonghaYao : GUID 为微软对 GUID 的一种实现,在此实现的 guid 是对 uuid 的字符串转换 - - UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) - GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) - */ -function guid() { - return v4().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); -} - -/* - ## Miscellaneous -*/ -/* - 生成一个全局的自增整数。 - 类似自增主键(auto increment primary key)。 -*/ -let key = 0; -const increment = function (step) { - return (key += +step || 1); -}; -const inc = increment; - -// Dice -function d4() { - return natural(1, 4); -} -function d6() { - return natural(1, 6); -} -function d8() { - return natural(1, 8); -} -function d12() { - return natural(1, 12); -} -function d20() { - return natural(1, 20); -} -function d100() { - return natural(1, 100); -} - -// 随机生成一个句子,第一个单词的首字母大写。 -function sentence(min = 12, max = 18) { - const len = random(min, max); - const string = times(len, () => word()).join(' '); - return capitalize(string) + '.'; -} - -// 随机生成一个单词。 -function word(min = 3, max = 10) { - const len = random(min, max); - return times(len, () => character('lower')).join(''); -} - -// 随机生成一段文本。 -function paragraph(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => sentence()).join('\n'); -} - -// 随机生成一句标题,其中每个单词的首字母大写。 -function title(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => capitalize(word())).join(''); -} - -function cparagraph(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => csentence()).join('\n'); -} - -// 随机生成一个中文句子。 -function csentence(min = 12, max = 18) { - const len = random(min, max); - return times(len, () => cword()).join('') + '。'; -} -// 随机生成一句中文标题。 -function ctitle(min = 3, max = 7) { - const len = random(min, max); - return times(len, () => cword()).join(''); -} -// 最常用的 500 个汉字 http://baike.baidu.com/view/568436.htm -const DICT_HANZI = - '的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞'; -// 随机生成一个或多个汉字。 -function cword(...args) { - let len = 1; - let pool = DICT_HANZI; - let min; - let max; - switch (args.length) { - case 0: // () - break; - case 1: // ( pool ) - if (typeof args[0] === 'string') { - [pool] = args; - } else { - // ( length ) - [len] = args; - } - break; - case 2: - // ( pool, length ) - if (typeof args[0] === 'string') { - [pool, len] = args; - } else { - // ( min, max ) - [min, max] = args; - len = natural(min, max); - } - break; - case 3: - // (pool,min,max) - [pool, min, max] = args; - len = natural(min, max); - break; - } - - return sampleSize(pool, len).join(''); -} - -// 协议簇 -const protocols = 'http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais'.split(' '); -// 域名后缀 -const tlds = ( - 'com net org edu gov int mil cn ' + - // 国内域名 - 'com.cn net.cn gov.cn org.cn ' + - // 中文国内域名 - '中国 中国互联.公司 中国互联.网络 ' + - // 新国际域名 - 'tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ' + - // 世界各国域名后缀 - 'ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw' -).split(' '); - -/* - 随机生成一个 URL。 - - [URL 规范](http://www.w3.org/Addressing/URL/url-spec.txt) - http Hypertext Transfer Protocol - ftp File Transfer protocol - gopher The Gopher protocol - mailto Electronic mail address - mid Message identifiers for electronic mail - cid Content identifiers for MIME body part - news Usenet news - nntp Usenet news for local NNTP access only - prospero Access using the prospero protocols - telnet rlogin tn3270 Reference to interactive sessions - wais Wide Area Information Servers -*/ -function url(Protocol, host) { - return `${Protocol || protocol()}://${host || domain()}/${word()}`; -} - -// 随机生成一个 URL 协议。 -function protocol() { - return pick(protocols); -} -// 随机生成一个域名。 -function domain(Tld) { - return `${word()}.${Tld || tld()}`; -} -/* - 随机生成一个顶级域名。 - 国际顶级域名 international top-level domain-names, iTLDs - 国家顶级域名 national top-level domainnames, nTLDs - [域名后缀大全](http://www.163ns.com/zixun/post/4417.html) -*/ -function tld() { - // Top Level Domain - return pick(tlds); -} - -// 随机生成一个邮件地址。 -function email(domain) { - return `${character('lower')}.${word()}@${domain || word() + '.' + tld()}`; -} -// 随机生成一个 IP 地址。 -function ip() { - // 这里不能用 Array(4).fill fill 是向数组注入同一个值 - return [...Array(4)].map(() => natural(0, 255)).join('.'); -} - -var _adSize$1 = [ - "300x250", - "250x250", - "240x400", - "336x280", - "180x150", - "720x300", - "468x60", - "234x60", - "88x31", - "120x90", - "120x60", - "120x240", - "125x125", - "728x90", - "160x600", - "120x600", - "300x600" -]; -var _screenSize$1 = [ - "320x200", - "320x240", - "640x480", - "800x480", - "800x480", - "1024x600", - "1024x768", - "1280x800", - "1440x900", - "1920x1200", - "2560x1600" -]; -var _videoSize$1 = [ - "720x480", - "768x576", - "1280x720", - "1920x1080" -]; -var size = { - _adSize: _adSize$1, - _screenSize: _screenSize$1, - _videoSize: _videoSize$1 -}; - -var Addvocate = "#ff6138"; -var Adobe = "#ff0000"; -var Aim = "#fcd20b"; -var Amazon = "#e47911"; -var Android = "#a4c639"; -var AOL = "#0060a3"; -var Atlassian = "#003366"; -var Behance = "#053eff"; -var bitly = "#ee6123"; -var Blogger = "#fc4f08"; -var Boeing = "#0039a6"; -var Carbonmade = "#613854"; -var Cheddar = "#ff7243"; -var Delicious = "#205cc0"; -var Dell = "#3287c1"; -var Designmoo = "#e54a4f"; -var Deviantart = "#4e6252"; -var Devour = "#fd0001"; -var DEWALT = "#febd17"; -var Dribbble = "#ea4c89"; -var Dropbox = "#3d9ae8"; -var Drupal = "#0c76ab"; -var Dunked = "#2a323a"; -var eBay = "#89c507"; -var Ember = "#f05e1b"; -var Engadget = "#00bdf6"; -var Envato = "#528036"; -var Etsy = "#eb6d20"; -var Evernote = "#5ba525"; -var Facebook = "#3b5998"; -var Firefox = "#e66000"; -var Forrst = "#5b9a68"; -var Foursquare = "#25a0ca"; -var Garmin = "#007cc3"; -var GetGlue = "#2d75a2"; -var Gimmebar = "#f70078"; -var GitHub = "#171515"; -var Grooveshark = "#f77f00"; -var Groupon = "#82b548"; -var HelloWallet = "#0085ca"; -var HootSuite = "#003366"; -var Houzz = "#73ba37"; -var HTML5 = "#ec6231"; -var IKEA = "#ffcc33"; -var IMDb = "#f3ce13"; -var Instagram = "#3f729b"; -var Intel = "#0071c5"; -var Intuit = "#365ebf"; -var Kickstarter = "#76cc1e"; -var kippt = "#e03500"; -var Kodery = "#00af81"; -var LastFM = "#c3000d"; -var LinkedIn = "#0e76a8"; -var Livestream = "#cf0005"; -var Lumo = "#576396"; -var Mixpanel = "#a086d3"; -var Meetup = "#e51937"; -var Nokia = "#183693"; -var NVIDIA = "#76b900"; -var Opera = "#cc0f16"; -var Path = "#e41f11"; -var Pinboard = "#0000e6"; -var Pinterest = "#c8232c"; -var PlayStation = "#665cbe"; -var Pocket = "#ee4056"; -var Prezi = "#318bff"; -var Pusha = "#0f71b4"; -var Quora = "#a82400"; -var Rdio = "#008fd5"; -var Readability = "#9c0000"; -var Resource = "#7eb400"; -var Rockpack = "#0ba6ab"; -var Roon = "#62b0d9"; -var RSS = "#ee802f"; -var Salesforce = "#1798c1"; -var Samsung = "#0c4da2"; -var Shopify = "#96bf48"; -var Skype = "#00aff0"; -var Snagajob = "#f47a20"; -var Softonic = "#008ace"; -var SoundCloud = "#ff7700"; -var Spotify = "#81b71a"; -var Sprint = "#fee100"; -var Squarespace = "#121212"; -var StackOverflow = "#ef8236"; -var Staples = "#cc0000"; -var Stripe = "#008cdd"; -var StudyBlue = "#00afe1"; -var StumbleUpon = "#f74425"; -var Technorati = "#40a800"; -var Treehouse = "#5cb868"; -var Trulia = "#5eab1f"; -var Tumblr = "#34526f"; -var Twitter = "#00acee"; -var TYPO3 = "#ff8700"; -var Ubuntu = "#dd4814"; -var Ustream = "#3388ff"; -var Verizon = "#ef1d1d"; -var Vimeo = "#86c9ef"; -var Vine = "#00a478"; -var Virb = "#06afd8"; -var Wooga = "#5b009c"; -var Wunderlist = "#2b88d9"; -var XBOX = "#9bc848"; -var XING = "#126567"; -var Yandex = "#ffcc00"; -var Yelp = "#c41200"; -var YouTube = "#c4302b"; -var Zalongo = "#5498dc"; -var Zendesk = "#78a300"; -var Zerply = "#9dcc7a"; -var Zootool = "#5e8b1d"; -var _brandColors = { - "4ormat": "#fb0a2a", - "500px": "#02adea", - "About.me (blue)": "#00405d", - "About.me (yellow)": "#ffcc33", - Addvocate: Addvocate, - Adobe: Adobe, - Aim: Aim, - Amazon: Amazon, - Android: Android, - "Angie's List": "#7fbb00", - AOL: AOL, - Atlassian: Atlassian, - Behance: Behance, - "Big Cartel": "#97b538", - bitly: bitly, - Blogger: Blogger, - Boeing: Boeing, - "Booking.com": "#003580", - Carbonmade: Carbonmade, - Cheddar: Cheddar, - "Code School": "#3d4944", - Delicious: Delicious, - Dell: Dell, - Designmoo: Designmoo, - Deviantart: Deviantart, - "Designer News": "#2d72da", - Devour: Devour, - DEWALT: DEWALT, - "Disqus (blue)": "#59a3fc", - "Disqus (orange)": "#db7132", - Dribbble: Dribbble, - Dropbox: Dropbox, - Drupal: Drupal, - Dunked: Dunked, - eBay: eBay, - Ember: Ember, - Engadget: Engadget, - Envato: Envato, - Etsy: Etsy, - Evernote: Evernote, - "Fab.com": "#dd0017", - Facebook: Facebook, - Firefox: Firefox, - "Flickr (blue)": "#0063dc", - "Flickr (pink)": "#ff0084", - Forrst: Forrst, - Foursquare: Foursquare, - Garmin: Garmin, - GetGlue: GetGlue, - Gimmebar: Gimmebar, - GitHub: GitHub, - "Google Blue": "#0140ca", - "Google Green": "#16a61e", - "Google Red": "#dd1812", - "Google Yellow": "#fcca03", - "Google+": "#dd4b39", - Grooveshark: Grooveshark, - Groupon: Groupon, - "Hacker News": "#ff6600", - HelloWallet: HelloWallet, - "Heroku (light)": "#c7c5e6", - "Heroku (dark)": "#6567a5", - HootSuite: HootSuite, - Houzz: Houzz, - HTML5: HTML5, - IKEA: IKEA, - IMDb: IMDb, - Instagram: Instagram, - Intel: Intel, - Intuit: Intuit, - Kickstarter: Kickstarter, - kippt: kippt, - Kodery: Kodery, - LastFM: LastFM, - LinkedIn: LinkedIn, - Livestream: Livestream, - Lumo: Lumo, - Mixpanel: Mixpanel, - Meetup: Meetup, - Nokia: Nokia, - NVIDIA: NVIDIA, - Opera: Opera, - Path: Path, - "PayPal (dark)": "#1e477a", - "PayPal (light)": "#3b7bbf", - Pinboard: Pinboard, - Pinterest: Pinterest, - PlayStation: PlayStation, - Pocket: Pocket, - Prezi: Prezi, - Pusha: Pusha, - Quora: Quora, - "QUOTE.fm": "#66ceff", - Rdio: Rdio, - Readability: Readability, - "Red Hat": "#cc0000", - Resource: Resource, - Rockpack: Rockpack, - Roon: Roon, - RSS: RSS, - Salesforce: Salesforce, - Samsung: Samsung, - Shopify: Shopify, - Skype: Skype, - Snagajob: Snagajob, - Softonic: Softonic, - SoundCloud: SoundCloud, - "Space Box": "#f86960", - Spotify: Spotify, - Sprint: Sprint, - Squarespace: Squarespace, - StackOverflow: StackOverflow, - Staples: Staples, - "Status Chart": "#d7584f", - Stripe: Stripe, - StudyBlue: StudyBlue, - StumbleUpon: StumbleUpon, - "T-Mobile": "#ea0a8e", - Technorati: Technorati, - "The Next Web": "#ef4423", - Treehouse: Treehouse, - Trulia: Trulia, - Tumblr: Tumblr, - "Twitch.tv": "#6441a5", - Twitter: Twitter, - TYPO3: TYPO3, - Ubuntu: Ubuntu, - Ustream: Ustream, - Verizon: Verizon, - Vimeo: Vimeo, - Vine: Vine, - Virb: Virb, - "Virgin Media": "#cc0000", - Wooga: Wooga, - "WordPress (blue)": "#21759b", - "WordPress (orange)": "#d54e21", - "WordPress (grey)": "#464646", - Wunderlist: Wunderlist, - XBOX: XBOX, - XING: XING, - "Yahoo!": "#720e9e", - Yandex: Yandex, - Yelp: Yelp, - YouTube: YouTube, - Zalongo: Zalongo, - Zendesk: Zendesk, - Zerply: Zerply, - Zootool: Zootool -}; - -/* eslint-disable no-redeclare*/ -const { _adSize, _screenSize, _videoSize } = size; -const _brandNames = Object.keys(_brandColors); - -/* - 生成一个随机的图片地址。 - - 使用 api 替代图片源 - http://fpoimg.com/ - 参考自 - http://rensanning.iteye.com/blog/1933310 - http://code.tutsplus.com/articles/the-top-8-placeholders-for-web-designers--net-19485 -*/ -function image(...args) { - let size; - let background; - let foreground; - let format; - let text; - switch (arguments.length) { - case 4: - [size, background, foreground, text] = args; - break; - case 3: - [size, background, text] = args; - break; - default: - [size, background, foreground, format, text] = args; - } - - // Random.image() - if (!size) size = pick(_adSize); - - // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ''); - background = (background || hex()).replace(/^#/, ''); - - // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ - format ? '.' + format : '' - }${text ? '&text=' + text : ''}`; -} -/* - 生成一段随机的 Base64 图片编码。 - - https://github.com/imsky/holder - Holder renders image placeholders entirely on the client side. - - dataImageHolder: function(size) { - return 'holder.js/' + size - }, -*/ -function dataImage(size, text) { - let canvas; - if (typeof document !== 'undefined') { - canvas = document.createElement('canvas'); - } else { - /* - https://github.com/Automattic/node-canvas - npm install canvas --save - 安装问题: - * http://stackoverflow.com/questions/22953206/gulp-issues-with-cario-install-command-not-found-when-trying-to-installing-canva - * https://github.com/Automattic/node-canvas/issues/415 - * https://github.com/Automattic/node-canvas/wiki/_pages - - PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 - */ - const Canvas = module.require('canvas'); - canvas = new Canvas(); - } - - const ctx = canvas && canvas.getContext && canvas.getContext('2d'); - if (!canvas || !ctx) return ''; - - if (!size) size = pick(_adSize); - text = text !== undefined ? text : size; - - size = size.split('x'); - - const width = parseInt(size[0], 10); - const height = parseInt(size[1], 10); - const background = _brandColors[pick(_brandNames)]; - const foreground = '#FFF'; - const textHeight = 14; - const font = 'sans-serif'; - - canvas.width = width; - canvas.height = height; - ctx.textAlign = 'center'; - ctx.textBaseline = 'middle'; - ctx.fillStyle = background; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = foreground; - ctx.font = 'bold ' + textHeight + 'px ' + font; - ctx.fillText(text, width / 2, height / 2, width); - return canvas.toDataURL('image/png'); -} - -/* - ## Address -*/ -const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; - -// 随机生成一个大区。 -function region() { - return pick(REGION); -} -// 随机生成一个(中国)省(或直辖市、自治区、特别行政区)。 -function province() { - return pick(DICT_FIXED).name; -} -// 随机生成一个(中国)市。 -function city(prefix) { - const province = pick(DICT_FIXED); - const city = pick(province.children); - return prefix ? [province.name, city.name].join(' ') : city.name; -} -// 随机生成一个(中国)县。 -function county(prefix) { - const province = pick(DICT_FIXED); - const city = pick(province.children); - const county = pick(city.children) || { - name: '-', - }; - return prefix ? [province.name, city.name, county.name].join(' ') : county.name; -} -// 随机生成一个邮政编码(六位数字)。 -function zip(len) { - let zip = ''; - for (let i = 0; i < (len || 6); i++) zip += natural(0, 9); - return zip; -} - -// 用于生成 Blob 和 File 型数据的工具 -function prepare(anyData) { - let prepared; - switch (type(anyData)) { - case 'array': - prepared = anyData; - break; - default: - prepared = [anyData]; - } - return prepared; -} -function genFile(anyData) { - return new File(prepare(anyData), word()); -} -function genBlob(anyData) { - return new Blob(prepare(anyData)); -} - -/* - ## Mock.Random - - 工具类,用于生成各种随机数据。 -*/ - -var Random = /*#__PURE__*/Object.freeze({ - __proto__: null, - integer: integer, - isNumber: isNumber, - random: random, - natural: natural, - int: integer, - float: float, - boolean: boolean$1, - bool: boolean$1, - character: character, - char: character, - string: string$1, - str: string$1, - range: range, - color: color, - hex: hex, - rgb: rgb, - rgba: rgba, - hsl: hsl, - _goldenRatioColor: _goldenRatioColor, - first: first, - last: last, - name: name, - cfirst: cfirst, - clast: clast, - cname: cname, - capitalize: capitalize, - upper: upper, - lower: lower, - pick: pick, - shuffle: shuffle, - order: order, - d4: d4, - d6: d6, - d8: d8, - d12: d12, - d20: d20, - d100: d100, - guid: guid, - uuid: v4, - id: id, - increment: increment, - inc: inc, - paragraph: paragraph, - word: word, - sentence: sentence, - title: title, - ctitle: ctitle, - csentence: csentence, - cparagraph: cparagraph, - cword: cword, - protocol: protocol, - domain: domain, - tld: tld, - email: email, - ip: ip, - url: url, - _patternLetters: _patternLetters, - _rformat: _rformat, - _formatDate: _formatDate, - _randomDate: _randomDate, - time: time, - datetime: datetime, - date: date, - now: now, - timestamp: timestamp, - _adSize: _adSize, - _screenSize: _screenSize, - _videoSize: _videoSize, - image: image, - img: image, - _brandColors: _brandColors, - _brandNames: _brandNames, - dataImage: dataImage, - region: region, - province: province, - city: city, - county: county, - zip: zip, - genFile: genFile, - genBlob: genBlob -}); - -/* - ## Constant - - 常量集合。 - */ -/* - RE_KEY - 'name|min-max': value - 'name|count': value - 'name|min-max.dmin-dmax': value - 'name|min-max.dcount': value - 'name|count.dmin-dmax': value - 'name|count.dcount': value - 'name|+step': value - - 1 name, 2 step, 3 range [ min, max ], 4 drange [ dmin, dmax ] - - RE_PLACEHOLDER - placeholder(*) - - [正则查看工具](http://www.regexper.com/) - - #26 生成规则 支持 负数,例如 number|-100-100 -*/ -var Constant = { - GUID: 1, - RE_KEY: /(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/, - RE_RANGE: /([\+\-]?\d+)-?([\+\-]?\d+)?/, - RE_PLACEHOLDER: /\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g, - // /\\*@([^@#%&()\?\s\/\.]+)(?:\((.*?)\))?/g - // RE_INDEX: /^index$/, - // RE_KEY: /^key$/ -}; - -/* - ## Parser - - 解析数据模板(属性名部分)。 - - * Parser.parse( name ) - - ```json - { - parameters: [ name, inc, range, decimal ], - rnage: [ min , max ], - - min: min, - max: max, - count : count, - - decimal: decimal, - dmin: dmin, - dmax: dmax, - dcount: dcount - } - ``` - */ -/* jshint -W041 */ -function parser$1(name = '') { - if (typeof name !== 'string') name = name + ''; - const parameters = name.match(Constant.RE_KEY); - - const range = parameters && parameters[3] && parameters[3].match(Constant.RE_RANGE); - const min = range && range[1] && parseInt(range[1], 10); // || 1 - const max = range && range[2] && parseInt(range[2], 10); // || 1 - // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; - - const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); - const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, - const dmax = decimal && decimal[2] && parseInt(decimal[2], 10); // || 0, - // int || dmin-dmax || 0 - const dcount = decimal ? (!decimal[2] && parseInt(decimal[1], 10)) || integer(dmin, dmax) : undefined; - - const result = { - // 1 name, 2 inc, 3 range, 4 decimal - parameters, - // 1 min, 2 max - range, - min, - max, - // min-max - count, - // 是否有 decimal - decimal, - dmin, - dmax, - dcount, // dmin-dimax - }; - - const isReturn = Object.keys(result).some((key) => key !== undefined); - if (isReturn) return result; - return {}; -} - -function array({ - name, - rule: { min, max, parameters, count }, - template, - context: { path, templatePath, root, templateRoot }, -}) { - let result = []; - - // 'name|1': [] - // 'name|count': [] - // 'name|min-max': [] - if (template.length === 0) return []; - - // 'arr': [{ 'email': '@EMAIL' }, { 'email': '@EMAIL' }] - if (!parameters) { - template.forEach((item, index) => { - result.push( - gen(item, index, { - path: [...path, index], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - }); - } else { - // 'method|1': ['GET', 'POST', 'HEAD', 'DELETE'] - if (min === 1 && max === undefined) { - // fix #17 - result = pick( - gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - } else { - // 'data|+1': [{}, {}] - if (parameters[2]) { - template.__order_index = template.__order_index || 0; - - result = gen(template, undefined, { - path: [...path, name], - templatePath: [...templatePath, name], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - })[template.__order_index % template.length]; - - template.__order_index += +parameters[2]; - } else { - // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { - template.forEach((item, index) => { - result.push( - gen(item, result.length, { - path: [...path, result.length], - templatePath: [...templatePath, index], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }), - ); - }); - }); - } - } - } - return result; -} - -function boolean({ rule: { max, min, parameters }, template = '' }) { - // 'prop|multiple': false, 当前值是相反值的概率倍数 - // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? boolean$1(min, max, template) : template; -} - -function _function(options) { - const { - template, - context: { currentContext }, - } = options; - // ( context, options ) - return template.call(currentContext, options); -} - -function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { - let result; - if (decimal) { - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { - result = float(min, max, dmin, dmax); // 内置字符串转数字 - }); - } else { - // integer - // 'grade1|1-100': 1, - result = range && !parameters[2] ? count : template; - } - return result; -} - -function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { - const result = {}; - let keys = []; - const fnKeys = []; - - // 'obj|min-max': {} - /* jshint -W041 */ - if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); - keys.forEach((key) => { - const parsedKey = key.replace(Constant.RE_KEY, '$1'); - - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - }); - } else { - // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 - for (const key in template) { - (typeof template[key] === 'function' ? fnKeys : keys).push(key); - } - keys = keys.concat(fnKeys); - - /* - 会改变非函数属性的顺序 - keys = Object.keys(template) - keys.sort(function(a, b) { - var afn = typeof template[a] === 'function' - var bfn = typeof template[b] === 'function' - if (afn === bfn) return 0 - if (afn && !bfn) return 1 - if (!afn && bfn) return -1 - }) - */ - - keys.forEach((key) => { - const parsedKey = key.replace(Constant.RE_KEY, '$1'); - result[parsedKey] = gen(template[key], key, { - path: [...path, parsedKey], - templatePath: [...templatePath, key], - currentContext: result, - templateCurrentContext: template, - root: root || result, - templateRoot: templateRoot || template, - }); - // 'id|+1': 1 - const inc = key.match(Constant.RE_KEY); - if (inc && inc[2] && type(template[key]) === 'number') { - template[key] += parseInt(inc[2], 10); - } - }); - } - return result; -} - -/*eslint-disable*/ - -function Token(n) { - (this.type = n), (this.offset = Token.offset()), (this.text = Token.text()); -} - -function Alternate(n, l) { - Token.call(this, 'alternate'), (this.left = n), (this.right = l); -} - -function Match(n) { - Token.call(this, 'match'), (this.body = n.filter(Boolean)); -} - -function Group(n, l) { - Token.call(this, n), (this.body = l); -} - -function CaptureGroup(n) { - Group.call(this, 'capture-group'), (this.index = cgs[this.offset] || (cgs[this.offset] = index++)), (this.body = n); -} - -function Quantified(n, l) { - Token.call(this, 'quantified'), (this.body = n), (this.quantifier = l); -} - -function Quantifier(n, l) { - Token.call(this, 'quantifier'), (this.min = n), (this.max = l), (this.greedy = !0); -} - -function CharSet(n, l) { - Token.call(this, 'charset'), (this.invert = n), (this.body = l); -} - -function CharacterRange(n, l) { - Token.call(this, 'range'), (this.start = n), (this.end = l); -} - -function Literal(n) { - Token.call(this, 'literal'), (this.body = n), (this.escaped = this.body != this.text); -} - -function Unicode(n) { - Token.call(this, 'unicode'), (this.code = n.toUpperCase()); -} - -function Hex(n) { - Token.call(this, 'hex'), (this.code = n.toUpperCase()); -} - -function Octal(n) { - Token.call(this, 'octal'), (this.code = n.toUpperCase()); -} - -function BackReference(n) { - Token.call(this, 'back-reference'), (this.code = n.toUpperCase()); -} - -function ControlCharacter(n) { - Token.call(this, 'control-character'), (this.code = n.toUpperCase()); -} - -var parser = (function () { - function n(n, l) { - function u() { - this.constructor = n; - } - (u.prototype = l.prototype), (n.prototype = new u()); - } - function l(n, l, u, t, r) { - function e(n, l) { - function u(n) { - function l(n) { - return n.charCodeAt(0).toString(16).toUpperCase(); - } - return n - .replace(/\\/g, '\\\\') - .replace(/"/g, '\\"') - .replace(/\x08/g, '\\b') - .replace(/\t/g, '\\t') - .replace(/\n/g, '\\n') - .replace(/\f/g, '\\f') - .replace(/\r/g, '\\r') - .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (n) { - return '\\x0' + l(n); - }) - .replace(/[\x10-\x1F\x80-\xFF]/g, function (n) { - return '\\x' + l(n); - }) - .replace(/[\u0180-\u0FFF]/g, function (n) { - return '\\u0' + l(n); - }) - .replace(/[\u1080-\uFFFF]/g, function (n) { - return '\\u' + l(n); - }); - } - var t, r; - switch (n.length) { - case 0: - t = 'end of input'; - break; - - case 1: - t = n[0]; - break; - - default: - t = n.slice(0, -1).join(', ') + ' or ' + n[n.length - 1]; - } - return (r = l ? '"' + u(l) + '"' : 'end of input'), 'Expected ' + t + ' but ' + r + ' found.'; - } - (this.expected = n), - (this.found = l), - (this.offset = u), - (this.line = t), - (this.column = r), - (this.name = 'SyntaxError'), - (this.message = e(n, l)); - } - function u(n) { - function u() { - return n.substring(Lt, qt); - } - function t() { - return Lt; - } - function r(l) { - function u(l, u, t) { - var r, e; - for (r = u; t > r; r++) - (e = n.charAt(r)), - '\n' === e - ? (l.seenCR || l.line++, (l.column = 1), (l.seenCR = !1)) - : '\r' === e || '\u2028' === e || '\u2029' === e - ? (l.line++, (l.column = 1), (l.seenCR = !0)) - : (l.column++, (l.seenCR = !1)); - } - return ( - Mt !== l && - (Mt > l && - ((Mt = 0), - (Dt = { - line: 1, - column: 1, - seenCR: !1, - })), - u(Dt, Mt, l), - (Mt = l)), - Dt - ); - } - function e(n) { - Ht > qt || (qt > Ht && ((Ht = qt), (Ot = [])), Ot.push(n)); - } - function o(n) { - var l = 0; - for (n.sort(); l < n.length; ) n[l - 1] === n[l] ? n.splice(l, 1) : l++; - } - function c() { - var l, u, t, r, o; - return ( - (l = qt), - (u = i()), - null !== u - ? ((t = qt), - 124 === n.charCodeAt(qt) ? ((r = fl), qt++) : ((r = null), 0 === Wt && e(sl)), - null !== r - ? ((o = c()), null !== o ? ((r = [r, o]), (t = r)) : ((qt = t), (t = il))) - : ((qt = t), (t = il)), - null === t && (t = al), - null !== t - ? ((Lt = l), (u = hl(u, t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function i() { - var n, l, u, t, r; - if (((n = qt), (l = f()), null === l && (l = al), null !== l)) - if (((u = qt), Wt++, (t = d()), Wt--, null === t ? (u = al) : ((qt = u), (u = il)), null !== u)) { - for (t = [], r = h(), null === r && (r = a()); null !== r; ) - t.push(r), (r = h()), null === r && (r = a()); - null !== t - ? ((r = s()), - null === r && (r = al), - null !== r - ? ((Lt = n), (l = dl(l, t, r)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)); - } else (qt = n), (n = il); - else (qt = n), (n = il); - return n; - } - function a() { - var n; - return (n = x()), null === n && ((n = Q()), null === n && (n = B())), n; - } - function f() { - var l, u; - return ( - (l = qt), - 94 === n.charCodeAt(qt) ? ((u = pl), qt++) : ((u = null), 0 === Wt && e(vl)), - null !== u && ((Lt = l), (u = wl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function s() { - var l, u; - return ( - (l = qt), - 36 === n.charCodeAt(qt) ? ((u = Al), qt++) : ((u = null), 0 === Wt && e(Cl)), - null !== u && ((Lt = l), (u = gl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function h() { - var n, l, u; - return ( - (n = qt), - (l = a()), - null !== l - ? ((u = d()), - null !== u - ? ((Lt = n), (l = bl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)), - n - ); - } - function d() { - var n, l, u; - return ( - Wt++, - (n = qt), - (l = p()), - null !== l - ? ((u = k()), - null === u && (u = al), - null !== u - ? ((Lt = n), (l = Tl(l, u)), null === l ? ((qt = n), (n = l)) : (n = l)) - : ((qt = n), (n = il))) - : ((qt = n), (n = il)), - Wt--, - null === n && ((l = null), 0 === Wt && e(kl)), - n - ); - } - function p() { - var n; - return ( - (n = v()), - null === n && - ((n = w()), - null === n && - ((n = A()), null === n && ((n = C()), null === n && ((n = g()), null === n && (n = b()))))), - n - ); - } - function v() { - var l, u, t, r, o, c; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (44 === n.charCodeAt(qt) ? ((r = ml), qt++) : ((r = null), 0 === Wt && e(Rl)), - null !== r - ? ((o = T()), - null !== o - ? (125 === n.charCodeAt(qt) - ? ((c = Fl), qt++) - : ((c = null), 0 === Wt && e(Ql)), - null !== c - ? ((Lt = l), (u = Sl(t, o)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function w() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (n.substr(qt, 2) === Ul ? ((r = Ul), (qt += 2)) : ((r = null), 0 === Wt && e(El)), - null !== r - ? ((Lt = l), (u = Gl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function A() { - var l, u, t, r; - return ( - (l = qt), - 123 === n.charCodeAt(qt) ? ((u = xl), qt++) : ((u = null), 0 === Wt && e(yl)), - null !== u - ? ((t = T()), - null !== t - ? (125 === n.charCodeAt(qt) ? ((r = Fl), qt++) : ((r = null), 0 === Wt && e(Ql)), - null !== r - ? ((Lt = l), (u = Bl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function C() { - var l, u; - return ( - (l = qt), - 43 === n.charCodeAt(qt) ? ((u = jl), qt++) : ((u = null), 0 === Wt && e($l)), - null !== u && ((Lt = l), (u = ql())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function g() { - var l, u; - return ( - (l = qt), - 42 === n.charCodeAt(qt) ? ((u = Ll), qt++) : ((u = null), 0 === Wt && e(Ml)), - null !== u && ((Lt = l), (u = Dl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function b() { - var l, u; - return ( - (l = qt), - 63 === n.charCodeAt(qt) ? ((u = Hl), qt++) : ((u = null), 0 === Wt && e(Ol)), - null !== u && ((Lt = l), (u = Wl())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function k() { - var l; - return 63 === n.charCodeAt(qt) ? ((l = Hl), qt++) : ((l = null), 0 === Wt && e(Ol)), l; - } - function T() { - var l, u, t; - if ( - ((l = qt), - (u = []), - zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)), - null !== t) - ) - for (; null !== t; ) - u.push(t), zl.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(Il)); - else u = il; - return null !== u && ((Lt = l), (u = Jl(u))), null === u ? ((qt = l), (l = u)) : (l = u), l; - } - function x() { - var l, u, t, r; - return ( - (l = qt), - 40 === n.charCodeAt(qt) ? ((u = Kl), qt++) : ((u = null), 0 === Wt && e(Nl)), - null !== u - ? ((t = R()), - null === t && ((t = F()), null === t && ((t = m()), null === t && (t = y()))), - null !== t - ? (41 === n.charCodeAt(qt) ? ((r = Pl), qt++) : ((r = null), 0 === Wt && e(Vl)), - null !== r - ? ((Lt = l), (u = Xl(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function y() { - var n, l; - return ( - (n = qt), - (l = c()), - null !== l && ((Lt = n), (l = Yl(l))), - null === l ? ((qt = n), (n = l)) : (n = l), - n - ); - } - function m() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === Zl ? ((u = Zl), (qt += 2)) : ((u = null), 0 === Wt && e(_l)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = nu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function R() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === lu ? ((u = lu), (qt += 2)) : ((u = null), 0 === Wt && e(uu)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = tu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function F() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === ru ? ((u = ru), (qt += 2)) : ((u = null), 0 === Wt && e(eu)), - null !== u - ? ((t = c()), - null !== t - ? ((Lt = l), (u = ou(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Q() { - var l, u, t, r, o; - if ( - (Wt++, - (l = qt), - 91 === n.charCodeAt(qt) ? ((u = iu), qt++) : ((u = null), 0 === Wt && e(au)), - null !== u) - ) - if ( - (94 === n.charCodeAt(qt) ? ((t = pl), qt++) : ((t = null), 0 === Wt && e(vl)), - null === t && (t = al), - null !== t) - ) { - for (r = [], o = S(), null === o && (o = U()); null !== o; ) - r.push(o), (o = S()), null === o && (o = U()); - null !== r - ? (93 === n.charCodeAt(qt) ? ((o = fu), qt++) : ((o = null), 0 === Wt && e(su)), - null !== o - ? ((Lt = l), (u = hu(t, r)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - else (qt = l), (l = il); - return Wt--, null === l && ((u = null), 0 === Wt && e(cu)), l; - } - function S() { - var l, u, t, r; - return ( - Wt++, - (l = qt), - (u = U()), - null !== u - ? (45 === n.charCodeAt(qt) ? ((t = pu), qt++) : ((t = null), 0 === Wt && e(vu)), - null !== t - ? ((r = U()), - null !== r - ? ((Lt = l), (u = wu(u, r)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - Wt--, - null === l && ((u = null), 0 === Wt && e(du)), - l - ); - } - function U() { - var n; - return Wt++, (n = G()), null === n && (n = E()), Wt--, null === n && (0 === Wt && e(Au)), n; - } - function E() { - var l, u; - return ( - (l = qt), - Cu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(gu)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function G() { - var n; - return ( - (n = L()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = _()), - null === n && - ((n = nl()), - null === n && - ((n = ll()), - null === n && - ((n = ul()), - null === n && - (n = tl()))))))))))))))))), - n - ); - } - function B() { - var n; - return (n = j()), null === n && ((n = q()), null === n && (n = $())), n; - } - function j() { - var l, u; - return ( - (l = qt), - 46 === n.charCodeAt(qt) ? ((u = ku), qt++) : ((u = null), 0 === Wt && e(Tu)), - null !== u && ((Lt = l), (u = xu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function $() { - var l, u; - return ( - Wt++, - (l = qt), - mu.test(n.charAt(qt)) ? ((u = n.charAt(qt)), qt++) : ((u = null), 0 === Wt && e(Ru)), - null !== u && ((Lt = l), (u = bu(u))), - null === u ? ((qt = l), (l = u)) : (l = u), - Wt--, - null === l && ((u = null), 0 === Wt && e(yu)), - l - ); - } - function q() { - var n; - return ( - (n = M()), - null === n && - ((n = D()), - null === n && - ((n = Y()), - null === n && - ((n = H()), - null === n && - ((n = O()), - null === n && - ((n = W()), - null === n && - ((n = z()), - null === n && - ((n = I()), - null === n && - ((n = J()), - null === n && - ((n = K()), - null === n && - ((n = N()), - null === n && - ((n = P()), - null === n && - ((n = V()), - null === n && - ((n = X()), - null === n && - ((n = Z()), - null === n && - ((n = _()), - null === n && - ((n = nl()), - null === n && - ((n = ll()), - null === n && - ((n = ul()), - null === n && - (n = - tl()))))))))))))))))))), - n - ); - } - function L() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), - null !== u && ((Lt = l), (u = Su())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function M() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Fu ? ((u = Fu), (qt += 2)) : ((u = null), 0 === Wt && e(Qu)), - null !== u && ((Lt = l), (u = Uu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function D() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Eu ? ((u = Eu), (qt += 2)) : ((u = null), 0 === Wt && e(Gu)), - null !== u && ((Lt = l), (u = Bu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function H() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ju ? ((u = ju), (qt += 2)) : ((u = null), 0 === Wt && e($u)), - null !== u && ((Lt = l), (u = qu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function O() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Lu ? ((u = Lu), (qt += 2)) : ((u = null), 0 === Wt && e(Mu)), - null !== u && ((Lt = l), (u = Du())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function W() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Hu ? ((u = Hu), (qt += 2)) : ((u = null), 0 === Wt && e(Ou)), - null !== u && ((Lt = l), (u = Wu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function z() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === zu ? ((u = zu), (qt += 2)) : ((u = null), 0 === Wt && e(Iu)), - null !== u && ((Lt = l), (u = Ju())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function I() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Ku ? ((u = Ku), (qt += 2)) : ((u = null), 0 === Wt && e(Nu)), - null !== u && ((Lt = l), (u = Pu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function J() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Vu ? ((u = Vu), (qt += 2)) : ((u = null), 0 === Wt && e(Xu)), - null !== u && ((Lt = l), (u = Yu())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function K() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Zu ? ((u = Zu), (qt += 2)) : ((u = null), 0 === Wt && e(_u)), - null !== u && ((Lt = l), (u = nt())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function N() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === lt ? ((u = lt), (qt += 2)) : ((u = null), 0 === Wt && e(ut)), - null !== u && ((Lt = l), (u = tt())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function P() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === rt ? ((u = rt), (qt += 2)) : ((u = null), 0 === Wt && e(et)), - null !== u && ((Lt = l), (u = ot())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function V() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ct ? ((u = ct), (qt += 2)) : ((u = null), 0 === Wt && e(it)), - null !== u && ((Lt = l), (u = at())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function X() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === ft ? ((u = ft), (qt += 2)) : ((u = null), 0 === Wt && e(st)), - null !== u && ((Lt = l), (u = ht())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function Y() { - var l, u, t; - return ( - (l = qt), - n.substr(qt, 2) === dt ? ((u = dt), (qt += 2)) : ((u = null), 0 === Wt && e(pt)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t - ? ((Lt = l), (u = wt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function Z() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (gt.test(n.charAt(qt)) ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(bt)), - null !== t - ? ((Lt = l), (u = kt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - function _() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), - null !== u) - ) { - if ( - ((t = []), - yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - yt.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(mt)); - else t = il; - null !== t - ? ((Lt = l), (u = Rt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function nl() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Ft ? ((u = Ft), (qt += 2)) : ((u = null), 0 === Wt && e(Qt)), - null !== u) - ) { - if ( - ((t = []), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t - ? ((Lt = l), (u = Et(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ll() { - var l, u, t, r; - if ( - ((l = qt), - n.substr(qt, 2) === Gt ? ((u = Gt), (qt += 2)) : ((u = null), 0 === Wt && e(Bt)), - null !== u) - ) { - if ( - ((t = []), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)), - null !== r) - ) - for (; null !== r; ) - t.push(r), - St.test(n.charAt(qt)) ? ((r = n.charAt(qt)), qt++) : ((r = null), 0 === Wt && e(Ut)); - else t = il; - null !== t - ? ((Lt = l), (u = jt(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il)); - } else (qt = l), (l = il); - return l; - } - function ul() { - var l, u; - return ( - (l = qt), - n.substr(qt, 2) === Tt ? ((u = Tt), (qt += 2)) : ((u = null), 0 === Wt && e(xt)), - null !== u && ((Lt = l), (u = $t())), - null === u ? ((qt = l), (l = u)) : (l = u), - l - ); - } - function tl() { - var l, u, t; - return ( - (l = qt), - 92 === n.charCodeAt(qt) ? ((u = At), qt++) : ((u = null), 0 === Wt && e(Ct)), - null !== u - ? (n.length > qt ? ((t = n.charAt(qt)), qt++) : ((t = null), 0 === Wt && e(vt)), - null !== t - ? ((Lt = l), (u = bu(t)), null === u ? ((qt = l), (l = u)) : (l = u)) - : ((qt = l), (l = il))) - : ((qt = l), (l = il)), - l - ); - } - var rl, - el = arguments.length > 1 ? arguments[1] : {}, - ol = { - regexp: c, - }, - cl = c, - il = null, - al = '', - fl = '|', - sl = '"|"', - hl = function (n, l) { - return l ? new Alternate(n, l[1]) : n; - }, - dl = function (n, l, u) { - return new Match([n].concat(l).concat([u])); - }, - pl = '^', - vl = '"^"', - wl = function () { - return new Token('start'); - }, - Al = '$', - Cl = '"$"', - gl = function () { - return new Token('end'); - }, - bl = function (n, l) { - return new Quantified(n, l); - }, - kl = 'Quantifier', - Tl = function (n, l) { - return l && (n.greedy = !1), n; - }, - xl = '{', - yl = '"{"', - ml = ',', - Rl = '","', - Fl = '}', - Ql = '"}"', - Sl = function (n, l) { - return new Quantifier(n, l); - }, - Ul = ',}', - El = '",}"', - Gl = function (n) { - return new Quantifier(n, 1 / 0); - }, - Bl = function (n) { - return new Quantifier(n, n); - }, - jl = '+', - $l = '"+"', - ql = function () { - return new Quantifier(1, 1 / 0); - }, - Ll = '*', - Ml = '"*"', - Dl = function () { - return new Quantifier(0, 1 / 0); - }, - Hl = '?', - Ol = '"?"', - Wl = function () { - return new Quantifier(0, 1); - }, - zl = /^[0-9]/, - Il = '[0-9]', - Jl = function (n) { - return +n.join(''); - }, - Kl = '(', - Nl = '"("', - Pl = ')', - Vl = '")"', - Xl = function (n) { - return n; - }, - Yl = function (n) { - return new CaptureGroup(n); - }, - Zl = '?:', - _l = '"?:"', - nu = function (n) { - return new Group('non-capture-group', n); - }, - lu = '?=', - uu = '"?="', - tu = function (n) { - return new Group('positive-lookahead', n); - }, - ru = '?!', - eu = '"?!"', - ou = function (n) { - return new Group('negative-lookahead', n); - }, - cu = 'CharacterSet', - iu = '[', - au = '"["', - fu = ']', - su = '"]"', - hu = function (n, l) { - return new CharSet(!!n, l); - }, - du = 'CharacterRange', - pu = '-', - vu = '"-"', - wu = function (n, l) { - return new CharacterRange(n, l); - }, - Au = 'Character', - Cu = /^[^\\\]]/, - gu = '[^\\\\\\]]', - bu = function (n) { - return new Literal(n); - }, - ku = '.', - Tu = '"."', - xu = function () { - return new Token('any-character'); - }, - yu = 'Literal', - mu = /^[^|\\\/.[()?+*$\^]/, - Ru = '[^|\\\\\\/.[()?+*$\\^]', - Fu = '\\b', - Qu = '"\\\\b"', - Su = function () { - return new Token('backspace'); - }, - Uu = function () { - return new Token('word-boundary'); - }, - Eu = '\\B', - Gu = '"\\\\B"', - Bu = function () { - return new Token('non-word-boundary'); - }, - ju = '\\d', - $u = '"\\\\d"', - qu = function () { - return new Token('digit'); - }, - Lu = '\\D', - Mu = '"\\\\D"', - Du = function () { - return new Token('non-digit'); - }, - Hu = '\\f', - Ou = '"\\\\f"', - Wu = function () { - return new Token('form-feed'); - }, - zu = '\\n', - Iu = '"\\\\n"', - Ju = function () { - return new Token('line-feed'); - }, - Ku = '\\r', - Nu = '"\\\\r"', - Pu = function () { - return new Token('carriage-return'); - }, - Vu = '\\s', - Xu = '"\\\\s"', - Yu = function () { - return new Token('white-space'); - }, - Zu = '\\S', - _u = '"\\\\S"', - nt = function () { - return new Token('non-white-space'); - }, - lt = '\\t', - ut = '"\\\\t"', - tt = function () { - return new Token('tab'); - }, - rt = '\\v', - et = '"\\\\v"', - ot = function () { - return new Token('vertical-tab'); - }, - ct = '\\w', - it = '"\\\\w"', - at = function () { - return new Token('word'); - }, - ft = '\\W', - st = '"\\\\W"', - ht = function () { - return new Token('non-word'); - }, - dt = '\\c', - pt = '"\\\\c"', - vt = 'any character', - wt = function (n) { - return new ControlCharacter(n); - }, - At = '\\', - Ct = '"\\\\"', - gt = /^[1-9]/, - bt = '[1-9]', - kt = function (n) { - return new BackReference(n); - }, - Tt = '\\0', - xt = '"\\\\0"', - yt = /^[0-7]/, - mt = '[0-7]', - Rt = function (n) { - return new Octal(n.join('')); - }, - Ft = '\\x', - Qt = '"\\\\x"', - St = /^[0-9a-fA-F]/, - Ut = '[0-9a-fA-F]', - Et = function (n) { - return new Hex(n.join('')); - }, - Gt = '\\u', - Bt = '"\\\\u"', - jt = function (n) { - return new Unicode(n.join('')); - }, - $t = function () { - return new Token('null-character'); - }, - qt = 0, - Lt = 0, - Mt = 0, - Dt = { - line: 1, - column: 1, - seenCR: !1, - }, - Ht = 0, - Ot = [], - Wt = 0; - if ('startRule' in el) { - if (!(el.startRule in ol)) throw new Error('Can\'t start parsing from rule "' + el.startRule + '".'); - cl = ol[el.startRule]; - } - if (((Token.offset = t), (Token.text = u), (rl = cl()), null !== rl && qt === n.length)) return rl; - throw ( - (o(Ot), - (Lt = Math.max(qt, Ht)), - new l(Ot, Lt < n.length ? n.charAt(Lt) : null, Lt, r(Lt).line, r(Lt).column)) - ); - } - return ( - n(l, Error), - { - SyntaxError: l, - parse: u, - } - ); - })(), - index = 1, - cgs = {}; - -/*eslint-disable*/ -/* - - */ -const Handler$1 = { - extend: extend, -}; - -// http://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart -/* let ASCII_CONTROL_CODE_CHART = { - '@': ['\u0000'], - A: ['\u0001'], - B: ['\u0002'], - C: ['\u0003'], - D: ['\u0004'], - E: ['\u0005'], - F: ['\u0006'], - G: ['\u0007', '\a'], - H: ['\u0008', '\b'], - I: ['\u0009', '\t'], - J: ['\u000A', '\n'], - K: ['\u000B', '\v'], - L: ['\u000C', '\f'], - M: ['\u000D', '\r'], - N: ['\u000E'], - O: ['\u000F'], - P: ['\u0010'], - Q: ['\u0011'], - R: ['\u0012'], - S: ['\u0013'], - T: ['\u0014'], - U: ['\u0015'], - V: ['\u0016'], - W: ['\u0017'], - X: ['\u0018'], - Y: ['\u0019'], - Z: ['\u001A'], - '[': ['\u001B', '\e'], - '\\': ['\u001C'], - ']': ['\u001D'], - '^': ['\u001E'], - '_': ['\u001F'] -}*/ - -// ASCII printable code chart -// let LOWER = 'abcdefghijklmnopqrstuvwxyz' -// let UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' -// let NUMBER = '0123456789' -// let SYMBOL = ' !"#$%&\'()*+,-./' + ':;<=>?@' + '[\\]^_`' + '{|}~' -const LOWER = ascii(97, 122); -const UPPER = ascii(65, 90); -const NUMBER = ascii(48, 57); -const OTHER = ascii(32, 47) + ascii(58, 64) + ascii(91, 96) + ascii(123, 126); // 排除 95 _ ascii(91, 94) + ascii(96, 96) -const PRINTABLE = ascii(32, 126); -const SPACE = ' \f\n\r\t\v\u00A0\u2028\u2029'; -const CHARACTER_CLASSES = { - '\\w': LOWER + UPPER + NUMBER + '_', // ascii(95, 95) - '\\W': OTHER.replace('_', ''), - '\\s': SPACE, - '\\S': (function () { - let result = PRINTABLE; - for (let i = 0; i < SPACE.length; i++) { - result = result.replace(SPACE[i], ''); - } - return result; - })(), - '\\d': NUMBER, - '\\D': LOWER + UPPER + OTHER, -}; - -// 从 from 到 to 包含两个端点的字符串 -function ascii(from, to) { - return [...Array(to - from + 1).keys()].map((i) => String.fromCharCode(i + from)).join(''); -} - -// let ast = RegExpParser.parse(regexp.source) -Handler$1.gen = function (node, result, cache) { - cache = cache || { - guid: 1, - }; - return Handler$1[node.type] ? Handler$1[node.type](node, result, cache) : Handler$1.token(node, result, cache); -}; - -Handler$1.extend({ - /* jshint unused:false */ - token: function (node, result, cache) { - switch (node.type) { - case 'start': - case 'end': - return ''; - case 'any-character': - return character(); - case 'backspace': - return ''; - case 'word-boundary': // TODO - return ''; - case 'non-word-boundary': // TODO - break; - case 'digit': - return pick(NUMBER.split('')); - case 'non-digit': - return pick((LOWER + UPPER + OTHER).split('')); - case 'form-feed': - break; - case 'line-feed': - return node.body || node.text; - case 'carriage-return': - break; - case 'white-space': - return pick(SPACE.split('')); - case 'non-white-space': - return pick((LOWER + UPPER + NUMBER).split('')); - case 'tab': - break; - case 'vertical-tab': - break; - case 'word': // \w [a-zA-Z0-9] - return pick((LOWER + UPPER + NUMBER).split('')); - case 'non-word': // \W [^a-zA-Z0-9] - return pick(OTHER.replace('_', '').split('')); - } - return node.body || node.text; - }, - /* - { - type: 'alternate', - offset: 0, - text: '', - left: { - boyd: [] - }, - right: { - boyd: [] - } - } - */ - alternate: function (node, result, cache) { - // node.left/right {} - return this.gen(boolean$1() ? node.left : node.right, result, cache); - }, - /* - { - type: 'match', - offset: 0, - text: '', - body: [] - } - */ - match: function (node, result, cache) { - result = ''; - // node.body [] - for (let i = 0; i < node.body.length; i++) { - result += this.gen(node.body[i], result, cache); - } - return result; - }, - // () - 'capture-group': function (node, result, cache) { - // node.body {} - result = this.gen(node.body, result, cache); - cache[cache.guid++] = result; - return result; - }, - // (?:...) - 'non-capture-group': function (node, result, cache) { - // node.body {} - return this.gen(node.body, result, cache); - }, - // (?=p) - 'positive-lookahead': function (node, result, cache) { - // node.body - return this.gen(node.body, result, cache); - }, - // (?!p) - 'negative-lookahead': function (node, result, cache) { - // node.body - return ''; - }, - /* - { - type: 'quantified', - offset: 3, - text: 'c*', - body: { - type: 'literal', - offset: 3, - text: 'c', - body: 'c', - escaped: false - }, - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - } - */ - quantified: function (node, result, cache) { - result = ''; - // node.quantifier {} - const count = this.quantifier(node.quantifier); - // node.body {} - for (let i = 0; i < count; i++) { - result += this.gen(node.body, result, cache); - } - return result; - }, - /* - quantifier: { - type: 'quantifier', - offset: 4, - text: '*', - min: 0, - max: Infinity, - greedy: true - } - */ - quantifier: function (node, result, cache) { - const min = Math.max(node.min, 0); - const max = isFinite(node.max) ? node.max : min + integer(3, 7); - return integer(min, max); - }, - /* - - */ - charset: function (node, result, cache) { - // node.invert - if (node.invert) return this['invert-charset'](node, result, cache); - - // node.body [] - const literal = pick(node.body); - return this.gen(literal, result, cache); - }, - 'invert-charset': function (node, result, cache) { - let pool = PRINTABLE; - for (let i = 0, item; i < node.body.length; i++) { - item = node.body[i]; - switch (item.type) { - case 'literal': { - pool = pool.replace(item.body, ''); - break; - } - case 'range': - const min = this.gen(item.start, result, cache).charCodeAt(); - const max = this.gen(item.end, result, cache).charCodeAt(); - for (let ii = min; ii <= max; ii++) { - pool = pool.replace(String.fromCharCode(ii), ''); - } - /* falls through */ - default: - const characters = CHARACTER_CLASSES[item.text]; - if (characters) { - for (let iii = 0; iii <= characters.length; iii++) { - pool = pool.replace(characters[iii], ''); - } - } - } - } - return pick(pool.split('')); - }, - range: function (node, result, cache) { - // node.start, node.end - const min = this.gen(node.start, result, cache).charCodeAt(); - const max = this.gen(node.end, result, cache).charCodeAt(); - return String.fromCharCode(integer(min, max)); - }, - literal: function (node, result, cache) { - return node.escaped ? node.body : node.text; - }, - // Unicode \u - unicode: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 十六进制 \xFF - hex: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 16)); - }, - // 八进制 \0 - octal: function (node, result, cache) { - return String.fromCharCode(parseInt(node.code, 8)); - }, - // 反向引用 - 'back-reference': function (node, result, cache) { - return cache[node.code] || ''; - }, - /* - http://en.wikipedia.org/wiki/C0_and_C1_control_codes - */ - CONTROL_CHARACTER_MAP: (function () { - const CONTROL_CHARACTER = '@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \\ ] ^ _'.split(' '); - const CONTROL_CHARACTER_UNICODE = - '\u0000 \u0001 \u0002 \u0003 \u0004 \u0005 \u0006 \u0007 \u0008 \u0009 \u000A \u000B \u000C \u000D \u000E \u000F \u0010 \u0011 \u0012 \u0013 \u0014 \u0015 \u0016 \u0017 \u0018 \u0019 \u001A \u001B \u001C \u001D \u001E \u001F'.split( - ' ', - ); - const map = {}; - for (let i = 0; i < CONTROL_CHARACTER.length; i++) { - map[CONTROL_CHARACTER[i]] = CONTROL_CHARACTER_UNICODE[i]; - } - return map; - })(), - 'control-character': function (node, result, cache) { - return this.CONTROL_CHARACTER_MAP[node.code]; - }, -}); - -var RE = /*#__PURE__*/Object.freeze({ - __proto__: null, - Parser: parser, - Handler: Handler$1 -}); - -function regexp({ rule: { count }, template: { source } }) { - // 'name': /regexp/, - // 'name|1-5': /regexp/, - const Source = count === undefined ? source : Array(count).fill(source).join(''); - return Handler$1.gen(parser.parse(Source)); -} - -function getValueByKeyPath(key, options) { - const originalKey = key; - const keyPathParts = splitPathToArray(key); - let absolutePathParts = []; - - // 绝对路径 - if (key.charAt(0) === '/') { - absolutePathParts = [options.context.path[0]].concat(normalizePath(keyPathParts)); - } else { - // 相对路径 - if (keyPathParts.length > 1) { - absolutePathParts = options.context.path.slice(0); - absolutePathParts.pop(); - absolutePathParts = normalizePath(absolutePathParts.concat(keyPathParts)); - } - } - - try { - key = keyPathParts[keyPathParts.length - 1]; - let currentContext = options.context.root; - let templateCurrentContext = options.context.templateRoot; - for (let i = 1; i < absolutePathParts.length - 1; i++) { - currentContext = currentContext[absolutePathParts[i]]; - templateCurrentContext = templateCurrentContext[absolutePathParts[i]]; - } - // 引用的值已经计算好 - if (currentContext && key in currentContext) return currentContext[key]; - - // 尚未计算,递归引用数据模板中的属性 - if ( - templateCurrentContext && - typeof templateCurrentContext === 'object' && - key in templateCurrentContext && - originalKey !== templateCurrentContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateCurrentContext[key] = gen(templateCurrentContext[key], key, { - currentContext: currentContext, - templateCurrentContext: templateCurrentContext, - }); - return templateCurrentContext[key]; - } - } catch (err) { - console.log(err); - } - - return '@' + keyPathParts.join('/'); -} -// https://github.com/kissyteam/kissy/blob/master/src/path/src/path.js -function normalizePath(pathParts) { - const newPathParts = []; - for (let i = 0; i < pathParts.length; i++) { - switch (pathParts[i]) { - case '..': - newPathParts.pop(); - break; - case '.': - break; - default: - newPathParts.push(pathParts[i]); - } - } - return newPathParts; -} -function splitPathToArray(path) { - let parts = path.split(/\/+/); - if (!parts[parts.length - 1]) parts = parts.slice(0, -1); - if (!parts[0]) parts = parts.slice(1); - return parts; -} - -// 占位符即是字符串函数的意思 -function placeholder(Placeholder, obj, templateContext, options) { - // console.log(options.context.path) - // 1 key, 2 params - Constant.RE_PLACEHOLDER.exec(''); - let [, key, params] = Constant.RE_PLACEHOLDER.exec(Placeholder); - - const lkey = key && key.toLowerCase(); - const pathParts = splitPathToArray(key); - - // 占位符优先引用数据模板中的属性 - if (obj && key in obj) return obj[key]; - - // 绝对路径 or 相对路径 - if (key.charAt(0) === '/' || pathParts.length > 1) return getValueByKeyPath(key, options); - - // 递归引用数据模板中的属性 - if ( - templateContext && - typeof templateContext === 'object' && - key in templateContext && - Placeholder !== templateContext[key] // fix #15 避免自己依赖自己 - ) { - // 先计算被引用的属性值 - templateContext[key] = gen(templateContext[key], key, { - currentContext: obj, - templateCurrentContext: templateContext, - }); - return templateContext[key]; - } - - // 如果未找到,则原样返回 - if (!(key in Random) && !(lkey in Random)) return Placeholder; - - // 解析占位符的参数 - // !不进行低版本浏览器的匹配 - if (params) { - params = params.split(/\s*,\s*/).map((param) => { - // 递归解析参数中的占位符 - Constant.RE_PLACEHOLDER.exec(''); - if (Constant.RE_PLACEHOLDER.test(param)) { - return placeholder(param, obj, templateContext, options); - } - return param; - }); - } else { - params = []; - } - - const handle = Random[key] || Random[lkey]; - switch (type(handle)) { - case 'array': { - // 自动从数组中取一个,例如 @areas - return pick(handle); - } - case 'function': { - // 执行占位符方法(大多数情况) - handle.options = options; - const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。 - delete handle.options; - return re; - } - } -} - -function string(options) { - const { - rule: { range, count }, - context: { currentContext, templateCurrentContext }, - template = '', - } = options; - let result = ''; - - if (template.length) { - // 'foo': '★', count 为 undefined 时 - // 'star|1-5': '★', - result += count === undefined ? template : Array(count).fill(template).join(''); - - // 'email|1-10': '@EMAIL, ', - const placeholders = result.match(Constant.RE_PLACEHOLDER) || []; // A-Z_0-9 > \w_ - placeholders.some((ph, index) => { - // 遇到转义斜杠,不需要解析占位符 - if (/^\\/.test(ph)) { - placeholders.splice(index--, 1); - return; - } - - const phed = placeholder(ph, currentContext, templateCurrentContext, options); - - // 只有一个占位符,并且没有其他字符 - if (placeholders.length === 1 && ph === result && typeof phed !== typeof result) { - if (isNumeric(phed)) { - result = parseFloat(phed, 10); - return true; - } - if (/^(true|false)$/.test(phed)) { - result = phed === 'true' ? true : phed === 'false' ? false : phed; // 已经是布尔值 - return true; - } // - result = phed; - return true; - } - result = result.replace(ph, phed); - }); - } else { - // 'ASCII|1-10': '', - // 'ASCII': '', - result = range ? string$1(count) : template; - } - return result; -} - -var typeset = /*#__PURE__*/Object.freeze({ - __proto__: null, - array: array, - boolean: boolean, - 'function': _function, - number: number, - object: object, - regexp: regexp, - string: string -}); - -let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 -function gen(template, name = '', context = {}) { - const newContext = { - // 当前访问路径,只有属性名,不包括生成规则 - path: context.path || [GID], - templatePath: context.templatePath || [GID++], - // 最终属性值的上下文 - currentContext: context.currentContext, - // 属性值模板的上下文 - templateCurrentContext: context.templateCurrentContext || template, - // 最终值的根 - root: context.root || context.currentContext, - // 模板的根 - templateRoot: context.templateRoot || context.templateCurrentContext || template, - }; - // console.log('path:', context.path.join('.'), template) - - const type$1 = type(template); - const func = typeset[type$1]; - let data; - - if (func) { - data = func({ - // 属性值类型 - type: type$1, - // 属性值模板 - template, - // 属性名 + 生成规则 - name, - // 属性名 - parsedName: name ? ('' + name).replace(Constant.RE_KEY, '$1') : name, - // 解析后的生成规则 - rule: parser$1(name), - // 相关上下文 - context: newContext, - }); - // 循环引用 - if (!newContext.root) newContext.root = data; - return data; - } - return template; -} - -/* - ## Handler - - 处理数据模板。 - - * Handler.gen( template, name?, context? ) - - 入口方法。 - - * Data Template Definition, DTD - - 处理数据模板定义。 - - * Handler.array( options ) - * Handler.object( options ) - * Handler.number( options ) - * Handler.boolean( options ) - * Handler.string( options ) - * Handler.function( options ) - * Handler.regexp( options ) - - 处理路径(相对和绝对)。 - - * Handler.getValueByKeyPath( key, options ) - - * Data Placeholder Definition, DPD - - 处理数据占位符定义 - - * Handler.placeholder( placeholder, context, templateContext, options ) - -*/ -/* - template 属性值(即数据模板) - name 属性名 - context 数据上下文,生成后的数据 - templateContext 模板上下文, - - Handle.gen(template, name, options) - context - currentContext, templateCurrentContext, - path, templatePath - root, templateRoot -*/ -const Handler = { - gen, - extend, -}; -Handler.extend({ - array, - object, - number, - boolean, - string: string, - function: _function, - regexp, -}); -Handler.extend({ - _all: function () { - return Object.keys(Random).reduce((col, key) => { - col[key.toLowerCase()] = key; - return col; - }, {}); - }, - // 处理占位符,转换为最终值 - placeholder, - getValueByKeyPath, - normalizePath, - splitPathToArray, -}); - -/* - ## toJSONSchema - - 把 Mock.js 风格的数据模板转换成 JSON Schema。 - - > [JSON Schema](http://json-schema.org/) - */ - -function toJSONSchema(template, name, path = [] /* Internal Use Only */) { - // type rule properties items - const result = { - name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, - template, - type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser$1.parse(name), - path: path.slice(0), - }; - result.path.push(name === undefined ? 'ROOT' : result.name); - - switch (result.type) { - case 'array': - result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); - break; - case 'object': - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); - break; - } - - return result; -} - -/*eslint-disable*/ - -function valid(template, data) { - const schema = toJSONSchema(template); - const result = Diff.diff(schema, data); - for (let i = 0; i < result.length; i++) { - // console.log(template, data) - // console.warn(Assert.message(result[i])) - } - return result; -} - -/* - ## name - 有生成规则:比较解析后的 name - 无生成规则:直接比较 - ## type - 无类型转换:直接比较 - 有类型转换:先试着解析 template,然后再检查? - ## value vs. template - 基本类型 - 无生成规则:直接比较 - 有生成规则: - number - min-max.dmin-dmax - min-max.dcount - count.dmin-dmax - count.dcount - +step - 整数部分 - 小数部分 - boolean - string - min-max - count - ## properties - 对象 - 有生成规则:检测期望的属性个数,继续递归 - 无生成规则:检测全部的属性个数,继续递归 - ## items - 数组 - 有生成规则: - `'name|1': [{}, {} ...]` 其中之一,继续递归 - `'name|+1': [{}, {} ...]` 顺序检测,继续递归 - `'name|min-max': [{}, {} ...]` 检测个数,继续递归 - `'name|count': [{}, {} ...]` 检测个数,继续递归 - 无生成规则:检测全部的元素个数,继续递归 -*/ -const Diff = { - diff: function diff(schema, data, name /* Internal Use Only */) { - const result = []; - - // 先检测名称 name 和类型 type,如果匹配,才有必要继续检测 - if (this.name(schema, data, name, result) && this.type(schema, data, name, result)) { - this.value(schema, data, name, result); - this.properties(schema, data, name, result); - this.items(schema, data, name, result); - } - - return result; - }, - /* jshint unused:false */ - name: function (schema, data, name, result) { - const length = result.length; - - Assert.equal('name', schema.path, name + '', schema.name + '', result); - - return result.length === length; - }, - type: function (schema, data, name, result) { - const length = result.length; - - switch (schema.type) { - case 'string': - // 跳过含有『占位符』的属性值,因为『占位符』返回值的类型可能和模板不一致,例如 '@int' 会返回一个整形值 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return true; - break; - case 'array': - if (schema.rule.parameters) { - // name|count: array - if (schema.rule.min !== undefined && schema.rule.max === undefined) { - // 跳过 name|1: array,因为最终值的类型(很可能)不是数组,也不一定与 `array` 中的类型一致 - if (schema.rule.count === 1) return true; - } - // 跳过 name|+inc: array - if (schema.rule.parameters[2]) return true; - } - break; - case 'function': - // 跳过 `'name': function`,因为函数可以返回任何类型的值。 - return true; - } - - Assert.equal('type', schema.path, type(data), schema.type, result); - - return result.length === length; - }, - value: function (schema, data, name, result) { - const length = result.length; - - const rule = schema.rule; - const templateType = schema.type; - if (templateType === 'object' || templateType === 'array' || templateType === 'function') return true; - - // 无生成规则 - if (!rule.parameters) { - switch (templateType) { - case 'regexp': - Assert.match('value', schema.path, data, schema.template, result); - return result.length === length; - case 'string': - // 同样跳过含有『占位符』的属性值,因为『占位符』的返回值会通常会与模板不一致 - if (schema.template.match(Constant.RE_PLACEHOLDER)) return result.length === length; - break; - } - Assert.equal('value', schema.path, data, schema.template, result); - return result.length === length; - } - - // 有生成规则 - let actualRepeatCount; - switch (templateType) { - case 'number': - const parts = (data + '').split('.'); - parts[0] = +parts[0]; - - // 整数部分 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[0], Math.min(rule.min, rule.max), result); - // , 'numeric instance is lower than the required minimum (minimum: {expected}, found: {actual})') - Assert.lessThanOrEqualTo('value', schema.path, parts[0], Math.max(rule.min, rule.max), result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('value', schema.path, parts[0], rule.min, result, '[value] ' + name); - } - - // 小数部分 - if (rule.decimal) { - // |dmin-dmax - if (rule.dmin !== undefined && rule.dmax !== undefined) { - Assert.greaterThanOrEqualTo('value', schema.path, parts[1].length, rule.dmin, result); - Assert.lessThanOrEqualTo('value', schema.path, parts[1].length, rule.dmax, result); - } - // |dcount - if (rule.dmin !== undefined && rule.dmax === undefined) { - Assert.equal('value', schema.path, parts[1].length, rule.dmin, result); - } - } - - break; - - case 'boolean': - break; - - case 'string': - // 'aaa'.match(/a/g) - actualRepeatCount = data.match(new RegExp(schema.template, 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - - break; - - case 'regexp': - actualRepeatCount = data.match(new RegExp(schema.template.source.replace(/^\^|\$$/g, ''), 'g')); - actualRepeatCount = actualRepeatCount ? actualRepeatCount.length : 0; - - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.min, result); - Assert.lessThanOrEqualTo('repeat count', schema.path, actualRepeatCount, rule.max, result); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - Assert.equal('repeat count', schema.path, actualRepeatCount, rule.min, result); - } - break; - } - - return result.length === length; - }, - properties: function (schema, data, name, result) { - const length = result.length; - - const rule = schema.rule; - const keys$1 = keys(data); - if (!schema.properties) return; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('properties length', schema.path, keys$1.length, schema.properties.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - 'properties length', - schema.path, - keys$1.length, - Math.min(rule.min, rule.max), - result, - ); - Assert.lessThanOrEqualTo( - 'properties length', - schema.path, - keys$1.length, - Math.max(rule.min, rule.max), - result, - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count !== 1) Assert.equal('properties length', schema.path, keys$1.length, rule.min, result); - } - } - - if (result.length !== length) return false; - - for (let i = 0; i < keys$1.length; i++) { - result.push.apply( - result, - this.diff( - (function () { - let property; - each(schema.properties, function (item /* , index*/) { - if (item.name === keys$1[i]) property = item; - }); - return property || schema.properties[i]; - })(), - data[keys$1[i]], - keys$1[i], - ), - ); - } - - return result.length === length; - }, - items: function (schema, data, name, result) { - const length = result.length; - - if (!schema.items) return; - - const rule = schema.rule; - - // 无生成规则 - if (!schema.rule.parameters) { - Assert.equal('items length', schema.path, data.length, schema.items.length, result); - } else { - // 有生成规则 - // |min-max - if (rule.min !== undefined && rule.max !== undefined) { - Assert.greaterThanOrEqualTo( - 'items', - schema.path, - data.length, - Math.min(rule.min, rule.max) * schema.items.length, - result, - '[{utype}] array is too short: {path} must have at least {expected} elements but instance has {actual} elements', - ); - Assert.lessThanOrEqualTo( - 'items', - schema.path, - data.length, - Math.max(rule.min, rule.max) * schema.items.length, - result, - '[{utype}] array is too long: {path} must have at most {expected} elements but instance has {actual} elements', - ); - } - // |count - if (rule.min !== undefined && rule.max === undefined) { - // |1, |>1 - if (rule.count === 1) return result.length === length; - else Assert.equal('items length', schema.path, data.length, rule.min * schema.items.length, result); - } - // |+inc - if (rule.parameters[2]) return result.length === length; - } - - if (result.length !== length) return false; - - for (let i = 0; i < data.length; i++) { - result.push.apply( - result, - this.diff(schema.items[i % schema.items.length], data[i], i % schema.items.length), - ); - } - - return result.length === length; - }, -}; - -/* - 完善、友好的提示信息 - - Equal, not equal to, greater than, less than, greater than or equal to, less than or equal to - 路径 验证类型 描述 - - Expect path.name is less than or equal to expected, but path.name is actual. - - Expect path.name is less than or equal to expected, but path.name is actual. - Expect path.name is greater than or equal to expected, but path.name is actual. - -*/ -const Assert = { - message: function (item) { - return (item.message || "[{utype}] Expect {path}'{ltype} {action} {expected}, but is {actual}") - .replace('{utype}', item.type.toUpperCase()) - .replace('{ltype}', item.type.toLowerCase()) - .replace('{path}', (isArray(item.path) && item.path.join('.')) || item.path) - .replace('{action}', item.action) - .replace('{expected}', item.expected) - .replace('{actual}', item.actual); - }, - equal: function (type, path, actual, expected, result, message) { - if (actual === expected) return true; - switch (type) { - case 'type': - // 正则模板 === 字符串最终值 - if (expected === 'regexp' && actual === 'string') return true; - break; - } - - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - // actual matches expected - match: function (type, path, actual, expected, result, message) { - if (expected.test(actual)) return true; - - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'matches', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - notEqual: function (type, path, actual, expected, result, message) { - if (actual !== expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is not equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThan: function (type, path, actual, expected, result, message) { - if (actual > expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThan: function (type, path, actual, expected, result, message) { - if (actual < expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - greaterThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual >= expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is greater than or equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, - lessThanOrEqualTo: function (type, path, actual, expected, result, message) { - if (actual <= expected) return true; - const item = { - path: path, - type: type, - actual: actual, - expected: expected, - action: 'is less than or equal to', - message: message, - }; - item.message = Assert.message(item); - result.push(item); - return false; - }, -}; - -valid.Diff = Diff; -valid.Assert = Assert; - -// 集中管理 mocked 的 url - -const _mocked = { - $set(value) { - this[value.rurl + value.rtype.toLowerCase()] = value; - }, - $delete(key) { - delete this[key]; - }, -}; - -// 查找与请求参数匹配的数据模板:URL,Type -function find({ url, type }) { - type = type.toLowerCase(); - for (const sUrlType in _mocked) { - const item = _mocked[sUrlType]; - const { rurl, rtype } = item; - if (match(rurl, url) && match(rtype, type)) { - // console.log('[mock]', url, '>', item.rurl) - return item; - } - } - return false; -} - -function match(expected, actual) { - switch (type(expected)) { - case 'string': - return expected === actual; - case 'regexp': - return expected.test(actual); - default: - return false; - } -} - -// 数据模板 => 响应数据 -function convert({ template }, options) { - return isFunction(template) ? template(options) : gen(template); -} - -/** - * Check if `obj` is a URLSearchParams object - * ref: https://github.com/node-fetch/node-fetch/issues/296#issuecomment-307598143 - * - * @param {*} obj - * @return {boolean} - */ -const isURLSearchParameters = (object) => { - return ( - typeof object === 'object' && - typeof object.append === 'function' && - typeof object.delete === 'function' && - typeof object.get === 'function' && - typeof object.getAll === 'function' && - typeof object.has === 'function' && - typeof object.set === 'function' && - typeof object.sort === 'function' && - object[Symbol.toStringTag] === 'URLSearchParams' // 获取类名的方式哦 - ); -}; - -const BODY = Symbol('Body internals'); -const RESPONSE = Symbol('Response internals'); - -/** - * Consume and convert an entire Body to a Buffer. - * - * Ref: https://fetch.spec.whatwg.org/#concept-body-consume-body - * - * @return Promise - */ -async function consumeBody(data) { - // 标记为已经使用 - if (data.disturbed) { - throw new TypeError(`body used already for: ${data.url}`); - } - data.disturbed = true; - - // 报错 - if (data.error) { - throw data.error; - } - - if (data.body instanceof FormData) { - return new Blob([Object.fromEntries(data.body.entries())]); - } - return data.body; -} - /** - * Body.js - * - * Body interface provides common methods for Request and Response - */ -/** - * Body mixin - * - * Ref: https://fetch.spec.whatwg.org/#body - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class Body { - constructor(body, { size = 0 } = {}) { - if (body === null) { - // Body is undefined or null - body = new Blob([]); - } else if (isURLSearchParameters(body)) { - // Body is a URLSearchParams - body = new Blob([body]); - } else if (ArrayBuffer.isView(body)) { - // Body is ArrayBufferView - body = new Blob([body]); - } else { - body = new Blob([JSON.stringify(body)]); - } - - this[BODY] = { - body, - boundary: null, - disturbed: false, - error: null, - }; - this.size = size; - } - - get body() { - return this[BODY].body; - } - - get bodyUsed() { - return this[BODY].disturbed; - } - - /** - * Decode response as ArrayBuffer - * - * @return Promise - */ - async arrayBuffer() { - const blob = await consumeBody(this[BODY]); - return blob.arrayBuffer(); - } - - /** - * Return raw response as Blob - * - * @return Promise - */ - async blob() { - return consumeBody(this[BODY]); - } - - /** - * Decode response as json - * - * @return Promise - */ - async json() { - const text = await this.text(); - return JSON.parse(text || '{}'); - } - - /** - * Decode response as text - * - * @return Promise - */ - async text() { - const blob = await consumeBody(this[BODY]); - return blob.text(); - } - - /** - * Decode response as buffer (non-spec api) - * - * @return Promise - */ -} - -// In browsers, all properties are enumerable. -Object.defineProperties(Body.prototype, { - body: { enumerable: true }, - bodyUsed: { enumerable: true }, - arrayBuffer: { enumerable: true }, - blob: { enumerable: true }, - json: { enumerable: true }, - text: { enumerable: true }, -}); - -/** - * Performs the operation "extract a `Content-Type` value from |object|" as - * specified in the specification: - * https://fetch.spec.whatwg.org/#concept-bodyinit-extract - * - * This function assumes that instance.body is present. - * - * @param {any} body Any options.body input - * @return {string | null} - */ -const extractContentType = (body, request) => { - // Body is null or undefined - if (body === null) { - return null; - } - - // Body is string - if (typeof body === 'string') { - return 'text/plain;charset=UTF-8'; - } - - // Body is a URLSearchParams - if (isURLSearchParameters(body)) { - return 'application/x-www-form-urlencoded;charset=UTF-8'; - } - - // Body is blob - if (body instanceof Blob) { - return body.type || null; - } - - if (body instanceof FormData) { - return `multipart/form-data; boundary=${request[BODY].boundary}`; - } - - // Body constructor defaults other things to string - return 'text/plain;charset=UTF-8'; -}; - -const redirectStatus = new Set([301, 302, 303, 307, 308]); - -/** - * Redirect code matching - * - * @param {number} code - Status code - * @return {boolean} - */ -const isRedirect = (code) => { - return redirectStatus.has(code); -}; - -/** - * Response.js - * - * Response class provides content decoding - */ -const Response = (globalThis.window && globalThis.window.Response) || class Null {}; -/** - * Response class - * - * @param Stream body Readable stream - * @param Object opts Response options - * @return Void - */ -class fakeResponse extends Body { - constructor(body = null, options = {}) { - super(body, options); - const status = options.status != null ? options.status : 200; - const headers = new Headers(options.headers); - if (body !== null && !headers.has('Content-Type')) { - const contentType = extractContentType(body); - if (contentType) { - headers.append('Content-Type', contentType); - } - } - this[RESPONSE] = { - type: 'default', - url: options.url, - status, - statusText: options.statusText || '', - headers, - counter: options.counter, - }; - } - - get type() { - return this[RESPONSE].type; - } - - get url() { - return this[RESPONSE].url || ''; - } - - get status() { - return this[RESPONSE].status; - } - - /** - * Convenience property representing if the request ended normally - */ - get ok() { - return this[RESPONSE].status >= 200 && this[RESPONSE].status < 300; - } - - get redirected() { - return this[RESPONSE].counter > 0; - } - - get statusText() { - return this[RESPONSE].statusText; - } - - get headers() { - return this[RESPONSE].headers; - } - - /** - * Clone this response - * - * @return Response - */ - clone() { - // Don't allow cloning a used body - if (this.bodyUsed) { - throw new Error('cannot clone body after it is used'); - } - return new Response(this.body, { - type: this.type, - url: this.url, - status: this.status, - statusText: this.statusText, - headers: this.headers, - ok: this.ok, - redirected: this.redirected, - size: this.size, - }); - } - - /** - * @param {string} url The URL that the new response is to originate from. - * @param {number} status An optional status code for the response (e.g., 302.) - * @return {Response} A Response object. - */ - static redirect(url, status = 302) { - if (!isRedirect(status)) { - throw new RangeError('Failed to execute "redirect" on "response": Invalid status code'); - } - - return new Response(null, { - headers: { - location: new URL(url).toString(), - }, - status, - }); - } - - static error() { - const response = new Response(null, { status: 0, statusText: '' }); - response[RESPONSE].type = 'error'; - return response; - } - - get [Symbol.toStringTag]() { - return 'Response'; - } -} - -Object.defineProperties(Response.prototype, { - type: { enumerable: true }, - url: { enumerable: true }, - status: { enumerable: true }, - ok: { enumerable: true }, - redirected: { enumerable: true }, - statusText: { enumerable: true }, - headers: { enumerable: true }, - clone: { enumerable: true }, -}); - -const window = globalThis.window || {}; -const realFetch = window && window.fetch; -function mockFetch() { - // 代理 fetch 的初始化函数 - if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { - window.fetch = fakeFetch; - window.fetch.$mock = true; - console.warn('fetch 已经被代理'); - } -} - -async function fakeFetch(url, options = {}) { - if (window.fetch.$mock === true) { - // 只有在 $mock 标记为 true 时才进行代理 - const result = find({ - url, - type: (options.method || 'get').toLowerCase(), - }); - if (result) { - const data = convert(result, {}); - console.warn('mock代理中'); - return new fakeResponse(data, options); - } - } - - console.warn('未使用 mockjs'); - return realFetch(url, options); -} - -var HTTP_STATUS_CODES = { - 100: 'Continue', - 101: 'Switching Protocols', - 200: 'OK', - 201: 'Created', - 202: 'Accepted', - 203: 'Non-Authoritative Information', - 204: 'No Content', - 205: 'Reset Content', - 206: 'Partial Content', - 300: 'Multiple Choice', - 301: 'Moved Permanently', - 302: 'Found', - 303: 'See Other', - 304: 'Not Modified', - 305: 'Use Proxy', - 307: 'Temporary Redirect', - 400: 'Bad Request', - 401: 'Unauthorized', - 402: 'Payment Required', - 403: 'Forbidden', - 404: 'Not Found', - 405: 'Method Not Allowed', - 406: 'Not Acceptable', - 407: 'Proxy Authentication Required', - 408: 'Request Timeout', - 409: 'Conflict', - 410: 'Gone', - 411: 'Length Required', - 412: 'Precondition Failed', - 413: 'Request Entity Too Large', - 414: 'Request-URI Too Long', - 415: 'Unsupported Media Type', - 416: 'Requested Range Not Satisfiable', - 417: 'Expectation Failed', - 422: 'Unprocessable Entity', - 500: 'Internal Server Error', - 501: 'Not Implemented', - 502: 'Bad Gateway', - 503: 'Service Unavailable', - 504: 'Gateway Timeout', - 505: 'HTTP Version Not Supported', -}; - -// 使用不完全覆盖的方式,使用继承方式继承所有的属性 - -let XMLHttpRequest; -let SEND; -let OPEN; -if (globalThis.window !== undefined) { - SEND = XMLHttpRequest.prototype.send; - OPEN = XMLHttpRequest.prototype.open; -} else { - XMLHttpRequest = class NULL {}; -} - -// ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 - -// 不可以在原生的 XMLHttpRequest 上直接定义 getter 和 setter, -// 也不可以在 XHR 实例上定义 -// 这样的话会导致无法接收到数据 -// 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 -const defineGetAndSet = function (what) { - const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; - Object.defineProperties( - what, - array.reduce((col, cur) => { - col[cur] = { - get() { - return this.$Mock[cur]; - }, - set: function (state) { - this.$Mock[cur] = state; - }, - }; - return col; - }, {}), - ); -}; -class MockXMLHttpRequest extends XMLHttpRequest { - constructor(...args) { - super(...args); - } - _send = SEND; - _open = OPEN; - open(method, url, async, username, password) { - // 不进行同步操作 - this._open(method, url, true, username, password); - this.$url = url; - this.$type = method.toLowerCase(); - } - send(body) { - if (this.$mock) { - this.$template = find({ url: this.$url, type: this.$type }); - if (this.$template) { - defineGetAndSet(this); - this.dispatchEvent(new Event('loadstart')); - - setTimeout(this.$done.bind(this), this.timeout || 100); - return null; - } - } - this._send(body); - } - get mock() { - return this.$mock; - } - set mock(value) { - if (typeof value === 'boolean') this.$mock = value; - } - $Mock = { - // 原生属性的 getter 和 setter - readyState: 0, - status: 200, - response: '', - responseText: '', - statusText: '', - }; - $type = 'get'; - $url = ''; - $mock = true; - $template = null; - - $done() { - this.readyState = this.HEADERS_RECEIVED; - this.dispatchEvent(new Event('readystatechange')); - this.readyState = this.LOADING; - this.dispatchEvent(new Event('readystatechange')); - - this.status = 200; - this.statusText = HTTP_STATUS_CODES[200]; - const data = convert(this.$template, {}); - this.response = data; - this.responseText = this.response; - this.readyState = this.DONE; - this.dispatchEvent(new Event('readystatechange')); - this.dispatchEvent(new Event('load')); - this.dispatchEvent(new Event('loadend')); - } -} - -// 在 fetch 的代理中只需要进行 fetch 的数据代理即可 -typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 - -function mock(...args) { - let rurl; - let rtype = 'get'; - let template; - - switch (args.length) { - case 1: - // Mock.mock(template) - [template] = args; - return Handler.gen(template); - // 2 和 3 switch 穿透 - case 2: - // Mock.mock(rurl, template) - [rurl, template] = args; - break; - case 3: - // Mock.mock(rurl,rtype, template) - [rurl, rtype, template] = args; - break; - } - - // 拦截 XHR - if (!MockXMLHttpRequest) globalThis.XMLHttpRequest = MockXMLHttpRequest; - - _mocked.$set({ - rurl, - rtype, - template, - }); - return null; -} - -// global require, module, window - -/* ! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 - KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao/ -*/ - -const Mock = { - Handler, - Random, - Util, - XHR: MockXMLHttpRequest, - RE, - toJSONSchema, - valid, - heredoc: heredoc, - setup: function (settings) { - return MockXMLHttpRequest.setup(settings); - }, - _mocked, - mock, -}; - -Mock.version = '1.1.1-es6'; - -module.exports = Mock; + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=M(e),void 0===n?(n=e,e=0):n=M(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=M(e),void 0===n?(n=e,e=0):n=M(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const Hn=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=qn(r,a));break;case 3:[t,r,a]=e,n=qn(r,a)}return Mn(n,(()=>Hn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function jt(){return st(wt)}function Mt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const qt=Object.keys(Pt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return qt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Ht(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Nt,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(Mn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return Mn(hn(e,n),(()=>Hn("lower"))).join("")}function Yt(e=12,n=18){return Mn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=qn(n,t));break;case 3:[a,n,t]=e,r=qn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:Pn,isNumber:Dn,random:hn,natural:qn,int:Pn,float:zn,boolean:Ln,bool:Ln,character:Hn,char:Hn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:jt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${jt()}`},cfirst:Mt,clast:Et,cname:function(){return Mt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return qn(1,4)},d6:function(){return qn(1,6)},d8:function(){return qn(1,8)},d12:function(){return qn(1,12)},d20:function(){return qn(1,20)},d100:function(){return qn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Ht("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return Mn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return Mn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return Mn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Hn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>qn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Nt,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Ht(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ht(e)},date:Ht,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=qn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Mr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,qt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>qt||(qt>Ht&&(Ht=qt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nqt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Z(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(qt))?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Q(){var e,t,r,a;if(e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt)),null!==a)for(;null!==a;)r.push(a),jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=qt,n.substr(qt,2)===Ot?(t=Ot,qt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=qt,n.substr(qt,2)===_t?(t=_t,qt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function te(){var e,t;return e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=Pt()),null===t?(qt=e,e=t):e=t,e}function re(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>qt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',je=",",Me='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",$e='"+"',Pe=function(){return new jr(1,1/0)},qe="*",ze='"*"',Le=function(){return new jr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Mr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},jn="Literal",Mn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",Pn='"\\\\d"',qn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new yr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',jt=/^[0-7]/,Mt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},Pt=function(){return new yr("null-character")},qt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&qt===n.length)return ae;throw u(It),zt=Math.max(qt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}qr.gen=function(e,n,t){return t=t||{guid:1},qr[e.type]?qr[e.type](e,n,t):qr.token(e,n,t)},qr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Hn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Nr.split(""));case"non-digit":return st((zr+Lr+Hr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Nr).split(""));case"non-word":return st(Hr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya&&ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";let Aa,Ca,ja;void 0!==globalThis.window?(Ca=Aa.prototype.send,ja=Aa.prototype.open):Aa=class{};class Ma extends Aa{constructor(...e){super(...e)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Ea={Handler:ta,Random:sr,Util:_n,XHR:Ma,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ma.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma||(globalThis.XMLHttpRequest=Ma),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ea; diff --git a/dist/mock.esm.js b/dist/mock.esm.js index a4f94f57..9ab7324e 100644 --- a/dist/mock.esm.js +++ b/dist/mock.esm.js @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function qt(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var $t={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys($t),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries($t).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date($n(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:$n,isNumber:Dn,random:hn,natural:Pn,int:$n,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return qt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:qt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?$n(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||$n(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=$r[this.offset]||($r[this.offset]=qr++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=qt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=$t()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",qe='"+"',$e=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},qn="\\d",$n='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',qt=function(e){return new Sr(e.join(""))},$t=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya&&ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";let Aa,Ca;void 0!==globalThis.window&&(Aa=XMLHttpRequest.prototype.send,Ca=XMLHttpRequest.prototype.open);class Ma extends XMLHttpRequest{constructor(...e){super(...e)}_send=Aa;_open=Ca;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const ja={Handler:ta,Random:sr,Util:_n,XHR:Ma,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ma.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma||(globalThis.XMLHttpRequest=Ma),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default ja; +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=M(e),void 0===n?(n=e,e=0):n=M(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=M(e),void 0===n?(n=e,e=0):n=M(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const Hn=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=qn(r,a));break;case 3:[t,r,a]=e,n=qn(r,a)}return Mn(n,(()=>Hn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function jt(){return st(wt)}function Mt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const qt=Object.keys(Pt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return qt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Ht(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Nt,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(Mn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return Mn(hn(e,n),(()=>Hn("lower"))).join("")}function Yt(e=12,n=18){return Mn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=qn(n,t));break;case 3:[a,n,t]=e,r=qn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:Pn,isNumber:Dn,random:hn,natural:qn,int:Pn,float:zn,boolean:Ln,bool:Ln,character:Hn,char:Hn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:jt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${jt()}`},cfirst:Mt,clast:Et,cname:function(){return Mt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return qn(1,4)},d6:function(){return qn(1,6)},d8:function(){return qn(1,8)},d12:function(){return qn(1,12)},d20:function(){return qn(1,20)},d100:function(){return qn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Ht("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return Mn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return Mn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return Mn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Hn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>qn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Nt,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Ht(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ht(e)},date:Ht,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=qn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Mr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,qt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>qt||(qt>Ht&&(Ht=qt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nqt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Z(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(qt))?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Q(){var e,t,r,a;if(e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt)),null!==a)for(;null!==a;)r.push(a),jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=qt,n.substr(qt,2)===Ot?(t=Ot,qt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=qt,n.substr(qt,2)===_t?(t=_t,qt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function te(){var e,t;return e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=Pt()),null===t?(qt=e,e=t):e=t,e}function re(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>qt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',je=",",Me='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",$e='"+"',Pe=function(){return new jr(1,1/0)},qe="*",ze='"*"',Le=function(){return new jr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Mr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},jn="Literal",Mn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",Pn='"\\\\d"',qn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new yr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',jt=/^[0-7]/,Mt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},Pt=function(){return new yr("null-character")},qt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&qt===n.length)return ae;throw u(It),zt=Math.max(qt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}qr.gen=function(e,n,t){return t=t||{guid:1},qr[e.type]?qr[e.type](e,n,t):qr.token(e,n,t)},qr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Hn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Nr.split(""));case"non-digit":return st((zr+Lr+Hr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Nr).split(""));case"non-word":return st(Hr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya&&ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";let Aa,Ca,ja;void 0!==globalThis.window?(Ca=Aa.prototype.send,ja=Aa.prototype.open):Aa=class{};class Ma extends Aa{constructor(...e){super(...e)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Ea={Handler:ta,Random:sr,Util:_n,XHR:Ma,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ma.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma||(globalThis.XMLHttpRequest=Ma),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ea; diff --git a/test/common.test.js b/test/common.test.js index 37f5c269..72159e83 100644 --- a/test/common.test.js +++ b/test/common.test.js @@ -1,4 +1,4 @@ -const Mock = require('../dist/mock.cjs.js'); +const Mock = require('mockjs-esm'); const a = Mock.mock({ 'a|20': ['@cname'], From cdc6fcacbe6d61b08241246bb40e1b7de101cd5f Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 20:28:59 +0800 Subject: [PATCH 38/65] 0.9.12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 833f3e91..389924fe 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.11", + "version": "0.9.12", "homepage": "http://mockjs.com/", "keywords": [ "mock", From 6b447980401c032c65aa640d62d43f6c158b41cb Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Wed, 30 Jun 2021 20:29:09 +0800 Subject: [PATCH 39/65] 1.0.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 389924fe..55249f70 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "0.9.12", + "version": "1.0.0", "homepage": "http://mockjs.com/", "keywords": [ "mock", From 49caa240387d3e5d2785cfdede0ae1601ce3b22a Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Thu, 1 Jul 2021 10:04:23 +0800 Subject: [PATCH 40/65] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20XHR=20?= =?UTF-8?q?=E7=9A=84=E9=80=82=E9=85=8D=E6=80=A7=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BUG.md | 2 - dist/Mock.min.js | 2 +- dist/mock.cjs.js | 2 +- dist/mock.esm.js | 2 +- graph.svg | 1279 ++++++++++++++++++++++++++++ src/mock.js | 2 +- src/mock/XHR.js | 1 - src/mock/mock.js | 7 +- src/mock/xhr/XMLHttpRequest/xhr.js | 21 +- src/mock/xhr/fetch/fetch.js | 2 +- src/mock/xhr/index.js | 2 +- test/fakeServer.js | 30 +- 12 files changed, 1316 insertions(+), 36 deletions(-) create mode 100644 graph.svg delete mode 100644 src/mock/XHR.js diff --git a/BUG.md b/BUG.md index 04694527..e69de29b 100644 --- a/BUG.md +++ b/BUG.md @@ -1,2 +0,0 @@ -@csentanse 有误 -@image \ No newline at end of file diff --git a/dist/Mock.min.js b/dist/Mock.min.js index 1a681cc2..fa9abb7a 100644 --- a/dist/Mock.min.js +++ b/dist/Mock.min.js @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ie(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function tn(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Te(e))}var rn=Ce&&Ce.isRegExp,an=rn?ve(rn):function(e){return s(e)&&"[object RegExp]"==h(e)},on=Math.floor,un=Math.random;function ln(e,n){return e+on(un()*(n-e+1))}var cn=parseFloat,hn=Math.min,sn=Math.random;function fn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=sn();return hn(e+a*(n-e+cn("1e-"+((a+"").length-1))),n)}return ln(e,n)}var mn=Math.ceil,dn=Math.max;var pn,bn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=dn(mn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=En,a=On(e,En);e-=En;for(var o=ie(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=fn(t,r,!1);return parseFloat(fn(e,n,!0).toFixed(a))},In=function(e,n,t=!1){return t?fn(0,e+n)>e?!t:t:fn(10,-10)>0},Bn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Bn.alpha=Bn.lower+Bn.upper,Bn.default=Bn.lower+Bn.upper+Bn.number+Bn.symbol;const Un=function(e="default"){return Bn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Bn[e.toLowerCase()]),yn(e)},Gn=function(...e){let n,t,r,a;switch(e.length){case 0:n=Nn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Nn(r,a));break;case 3:[t,r,a]=e,n=Nn(r,a)}return Sn(n,(()=>Un(t))).join("")};function Wn(e,n){return e(n={exports:{}},n.exports),n.exports}var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Wn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Yn=Wn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Jn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Kn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Kn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Kn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Yn.to,Yn.get;var Vn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Xn=Wn((function(e){var n={};for(var t in Vn)Vn.hasOwnProperty(t)&&(n[Vn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Vn)if(Vn.hasOwnProperty(l)){var c=Vn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Zn(e){var n=function(){for(var e={},n=Object.keys(Xn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var tt=nt,rt=[].slice,at=["keyword","gray","hex"],ot={};Object.keys(tt).forEach((function(e){ot[rt.call(tt[e].labels).sort().join("")]=e}));var ut={};function lt(e,n){if(!(this instanceof lt))return new lt(e,n);if(n&&n in at&&(n=null),n&&!(n in tt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof lt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Yn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=tt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=tt[this.model].channels;var o=rt.call(e,0,r);this.color=st(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ot))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ot[l];var c=tt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return lt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return lt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(tt).forEach((function(e){if(-1===at.indexOf(e)){var n=tt[e].channels;lt.prototype[e]=function(){if(this.model===e)return new lt(this);if(arguments.length)return new lt(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new lt(ht(tt[this.model][e].raw(this.color)).concat(t),e)},lt[e]=function(t){return"number"==typeof t&&(t=st(rt.call(arguments),n)),new lt(t,e)}}}));var ft=lt,mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const dt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,An(e,a);case 2:return[t,r]=n,An(e,fn(t,r))}},pt=function(e,n,t){const r=jn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},bt={},xt=function(...e){1===e.length&&(e=e[0]);const n=xt.options.context.templatePath.join("."),t=bt[n]=bt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var gt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function vt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ft.hsv(360*yt,100*e,100*n)}function wt(){return vt().hex()}var kt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:At,lastName:Ct,cfirstName:Mt,clastName:jt}=kt;function Et(){const e=At.male.concat();return dt(e)}function Ot(){return dt(Ct)}function St(){return dt(Mt)}function Rt(){return dt(jt)}var Tt,Ft=new Uint8Array(16);function _t(){if(!Tt&&!(Tt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tt(Ft)}var Dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&Dt.test(e)}for(var Pt=[],qt=0;qt<256;++qt)Pt.push((qt+256).toString(16).substr(1));function zt(e,n,t){var r=(e=e||{}).random||(e.rng||_t)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Pt[e[n+0]]+Pt[e[n+1]]+Pt[e[n+2]]+Pt[e[n+3]]+"-"+Pt[e[n+4]]+Pt[e[n+5]]+"-"+Pt[e[n+6]]+Pt[e[n+7]]+"-"+Pt[e[n+8]]+Pt[e[n+9]]+"-"+Pt[e[n+10]]+Pt[e[n+11]]+Pt[e[n+12]]+Pt[e[n+13]]+Pt[e[n+14]]+Pt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Lt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Nt=Object.keys(Lt),Ht=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Lt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Nt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var It={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Bt=new RegExp(`(${Object.keys(It).join("|")})`,"g");function Ut(e="yyyy-MM-dd"){return Gt(Wt(),e)}function Gt(e,n){return n.replace(Bt,(function n(t,r){const a=It[r];return"function"==typeof a?a(e):a in It?n(t,a):e[a]()}))}function Wt(e=new Date(0),n=new Date){return new Date(Ln(e.getTime(),n.getTime()))}let Jt=0;const Kt=function(e){return Jt+=+e||1},Yt=Kt;function Vt(e=12,n=18){return en(Sn(fn(e,n),(()=>Xt())).join(" "))+"."}function Xt(e=3,n=10){return Sn(fn(e,n),(()=>Un("lower"))).join("")}function Zt(e=12,n=18){return Sn(fn(e,n),(()=>Qt())).join("")+"。"}function Qt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Nn(n,t));break;case 3:[a,n,t]=e,r=Nn(n,t)}return An(a,r).join("")}const er="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),nr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function tr(){return dt(er)}function rr(e){return`${Xt()}.${e||ar()}`}function ar(){return dt(nr)}var or={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ur={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:lr,_screenSize:cr,_videoSize:ir}=or,hr=Object.keys(ur);function sr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=dt(lr)),r=(r||wt()).replace(/^#/,""),t=(t||wt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const fr=["东北","华北","华东","华中","华南","西南","西北"];function mr(e){let n;switch(Rn(e)){case"array":n=e;break;default:n=[e]}return n}var dr=Object.freeze({__proto__:null,integer:Ln,isNumber:qn,random:fn,natural:Nn,int:Ln,float:Hn,boolean:In,bool:In,character:Un,char:Un,string:Gn,str:Gn,range:bn,color:function(e){return e||mt[e]?mt[e].nicer:dt(gt).hex},hex:wt,rgb:function(){return vt().hsv().string()},rgba:function(){return vt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return vt().hsl().string()},_goldenRatioColor:vt,first:Et,last:Ot,name:function(e){return e=e?` ${Et()} `:" ",`${Et()}${e}${Ot()}`},cfirst:St,clast:Rt,cname:function(){return St()+Rt()},capitalize:en,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:dt,shuffle:pt,order:xt,d4:function(){return Nn(1,4)},d6:function(){return Nn(1,6)},d8:function(){return Nn(1,8)},d12:function(){return Nn(1,12)},d20:function(){return Nn(1,20)},d100:function(){return Nn(1,100)},guid:function(){return zt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:zt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=dt(Ht).id+Ut("yyyyMMdd")+Gn("number",3);for(let r=0;rVt())).join("\n")},word:Xt,sentence:Vt,title:function(e=3,n=7){return Sn(fn(e,n),(()=>en(Xt()))).join("")},ctitle:function(e=3,n=7){return Sn(fn(e,n),(()=>Qt())).join("")},csentence:Zt,cparagraph:function(e=3,n=7){return Sn(fn(e,n),(()=>Zt())).join("\n")},cword:Qt,protocol:tr,domain:rr,tld:ar,email:function(e){return`${Un("lower")}.${Xt()}@${e||Xt()+"."+ar()}`},ip:function(){return[...Array(4)].map((()=>Nn(0,255))).join(".")},url:function(e,n){return`${e||tr()}://${n||rr()}/${Xt()}`},_patternLetters:It,_rformat:Bt,_formatDate:Gt,_randomDate:Wt,time:function(e="HH:mm:ss"){return Ut(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ut(e)},date:Ut,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Gt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Wt(e,n).getTime():Wt().getTime()},_adSize:lr,_screenSize:cr,_videoSize:ir,image:sr,img:sr,_brandColors:ur,_brandNames:hr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=dt(lr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=ur[dt(hr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return dt(fr)},province:function(){return dt(Ht).name},city:function(e){const n=dt(Ht),t=dt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=dt(Ht),t=dt(n.children),r=dt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Nn(0,9);return n},genFile:function(e){return new File(mr(e),Xt())},genBlob:function(e){return new Blob(mr(e))}}),pr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function br(e=""){"string"!=typeof e&&(e+="");const n=e.match(pr.RE_KEY),t=n&&n[3]&&n[3].match(pr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Ln(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(pr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Ln(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function xr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=dt(aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(aa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(aa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function gr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?In(n,e,r):r}function yr(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function vr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Hn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function wr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=pt(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(pr.RE_KEY);c&&c[2]&&"number"===Rn(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function kr(e){this.type=e,this.offset=kr.offset(),this.text=kr.text()}function Ar(e,n){kr.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){kr.call(this,"match"),this.body=e.filter(Boolean)}function Mr(e,n){kr.call(this,e),this.body=n}function jr(e){Mr.call(this,"capture-group"),this.index=Lr[this.offset]||(Lr[this.offset]=zr++),this.body=e}function Er(e,n){kr.call(this,"quantified"),this.body=e,this.quantifier=n}function Or(e,n){kr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Sr(e,n){kr.call(this,"charset"),this.invert=e,this.body=n}function Rr(e,n){kr.call(this,"range"),this.start=e,this.end=n}function Tr(e){kr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Fr(e){kr.call(this,"unicode"),this.code=e.toUpperCase()}function _r(e){kr.call(this,"hex"),this.code=e.toUpperCase()}function Dr(e){kr.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){kr.call(this,"back-reference"),this.code=e.toUpperCase()}function Pr(e){kr.call(this,"control-character"),this.code=e.toUpperCase()}var qr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,qt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>qt||(qt>Ht&&(Ht=qt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nqt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Z(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(qt))?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Q(){var e,t,r,a;if(e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=qt,n.substr(qt,2)===Ot?(t=Ot,qt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=qt,n.substr(qt,2)===_t?(t=_t,qt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function te(){var e,t;return e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=Pt()),null===t?(qt=e,e=t):e=t,e}function re(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>qt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new Ar(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new kr("start")},xe="$",ge='"$"',ye=function(){return new kr("end")},ve=function(e,n){return new Er(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Or(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Or(e,1/0)},_e=function(e){return new Or(e,e)},De="+",$e='"+"',Pe=function(){return new Or(1,1/0)},qe="*",ze='"*"',Le=function(){return new Or(0,1/0)},Ne="?",He='"?"',Ie=function(){return new Or(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new jr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Mr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Mr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Mr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Sr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Rr(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Tr(e)},kn=".",An='"."',Cn=function(){return new kr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new kr("backspace")},Tn=function(){return new kr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new kr("non-word-boundary")},$n="\\d",Pn='"\\\\d"',qn=function(){return new kr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new kr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new kr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new kr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new kr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new kr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new kr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new kr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new kr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new kr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new kr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new Pr(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Dr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new _r(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Fr(e.join(""))},Pt=function(){return new kr("null-character")},qt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(kr.offset=r,kr.text=t,null!==(ae=le())&&qt===n.length)return ae;throw u(It),zt=Math.max(qt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}Nr.gen=function(e,n,t){return t=t||{guid:1},Nr[e.type]?Nr[e.type](e,n,t):Nr.token(e,n,t)},Nr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Un();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return dt(Br.split(""));case"non-digit":return dt((Hr+Ir+Ur).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return dt(Wr.split(""));case"non-white-space":return dt((Hr+Ir+Br).split(""));case"tab":case"vertical-tab":break;case"word":return dt((Hr+Ir+Br).split(""));case"non-word":return dt(Ur.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(In()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Zr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Xr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=aa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in dr)&&!(u in dr))return e;o=o?o.split(/\s*,\s*/).map((e=>(pr.RE_PLACEHOLDER.exec(""),pr.RE_PLACEHOLDER.test(e)?ea(e,n,t,r):e))):[];const c=dr[a]||dr[u];switch(Rn(c)){case"array":return dt(c);case"function":{c.options=r;const e=c.apply(dr,o)||"";return delete c.options,e}}}function na(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(pr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=ea(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Tn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Gn(t):o;return u}var ta=Object.freeze({__proto__:null,array:xr,boolean:gr,function:yr,number:vr,object:wr,regexp:Vr,string:na});let ra=1;function aa(e,n="",t={}){const r={path:t.path||[ra],templatePath:t.templatePath||[ra++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Rn(e),o=ta[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(pr.RE_KEY,"$1"):n,rule:br(n),context:r}),r.root||(r.root=u),u):e}const oa={gen:aa,extend:Fn};function ua(e,n,t=[]){const r={name:"string"==typeof n?n.replace(pr.RE_KEY,"$1"):n,template:e,type:Rn(e),rule:br.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ua(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ua(e,n,r.path)))}return r}function la(e,n){const t=ua(e),r=ca.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:ea,getValueByKeyPath:Xr,normalizePath:Zr,splitPathToArray:Qr});const ca={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ia.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(pr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ia.equal("type",e.path,Rn(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ia.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(pr.RE_PLACEHOLDER))return r.length===a}return ia.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ia.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ia.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ia.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ia.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ia.equal("properties length",e.path,u.length,o.min,r)):ia.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ia.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1}};la.Diff=ca,la.Assert=ia;const ha={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function sa({url:e,type:n}){n=n.toLowerCase();for(const t in ha){const r=ha[t],{rurl:a,rtype:o}=r;if(fa(a,e)&&fa(o,n))return r}return!1}function fa(e,n){switch(Rn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ma({template:e},n){return R(e)?e(n):aa(e)}const da=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],pa=Symbol("Body internals"),ba=Symbol("Response internals");async function xa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class ga{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):da(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[pa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[pa].body}get bodyUsed(){return this[pa].disturbed}async arrayBuffer(){return(await xa(this[pa])).arrayBuffer()}async blob(){return xa(this[pa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await xa(this[pa])).text()}}Object.defineProperties(ga.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]),va=globalThis.window&&globalThis.window.Response||class{};class wa extends ga{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":da(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[pa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ba]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ba].type}get url(){return this[ba].url||""}get status(){return this[ba].status}get ok(){return this[ba].status>=200&&this[ba].status<300}get redirected(){return this[ba].counter>0}get statusText(){return this[ba].statusText}get headers(){return this[ba].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new va(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new va(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new va(null,{status:0,statusText:""});return e[ba].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(va.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ka=globalThis.window||{},Aa=ka&&ka.fetch;async function Ca(e,n={}){if(!0===ka.fetch.$mock){const t=sa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ma(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),Aa(e,n)}var Ma="OK";let ja,Ea,Oa;void 0!==globalThis.window?(Ea=ja.prototype.send,Oa=ja.prototype.open):ja=class{};class Sa extends ja{constructor(...e){super(...e)}_send=Ea;_open=Oa;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=sa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=ma(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ka.fetch&&!ka.fetch.hasOwnProperty("$mock")&&(ka.fetch=Ca,ka.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Ra={Handler:oa,Random:dr,Util:Pn,XHR:Sa,RE:Yr,toJSONSchema:ua,valid:la,heredoc:Dn,setup:function(e){return Sa.setup(e)},_mocked:ha,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,oa.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Sa||(globalThis.XMLHttpRequest=Sa),ha.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return Ra}(); +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ie(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function tn(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Te(e))}var rn=Ce&&Ce.isRegExp,an=rn?ve(rn):function(e){return s(e)&&"[object RegExp]"==h(e)},on=Math.floor,un=Math.random;function ln(e,n){return e+on(un()*(n-e+1))}var cn=parseFloat,hn=Math.min,sn=Math.random;function fn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=sn();return hn(e+a*(n-e+cn("1e-"+((a+"").length-1))),n)}return ln(e,n)}var mn=Math.ceil,dn=Math.max;var pn,bn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=dn(mn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=En,a=On(e,En);e-=En;for(var o=ie(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=fn(t,r,!1);return parseFloat(fn(e,n,!0).toFixed(a))},In=function(e,n,t=!1){return t?fn(0,e+n)>e?!t:t:fn(10,-10)>0},Bn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Bn.alpha=Bn.lower+Bn.upper,Bn.default=Bn.lower+Bn.upper+Bn.number+Bn.symbol;const Un=function(e="default"){return Bn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Bn[e.toLowerCase()]),yn(e)},Gn=function(...e){let n,t,r,a;switch(e.length){case 0:n=Hn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Hn(r,a));break;case 3:[t,r,a]=e,n=Hn(r,a)}return Sn(n,(()=>Un(t))).join("")};function Wn(e,n){return e(n={exports:{}},n.exports),n.exports}var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Wn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Yn=Wn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Jn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Kn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Kn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Kn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Yn.to,Yn.get;var Vn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Xn=Wn((function(e){var n={};for(var t in Vn)Vn.hasOwnProperty(t)&&(n[Vn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Vn)if(Vn.hasOwnProperty(l)){var c=Vn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Zn(e){var n=function(){for(var e={},n=Object.keys(Xn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var tt=nt,rt=[].slice,at=["keyword","gray","hex"],ot={};Object.keys(tt).forEach((function(e){ot[rt.call(tt[e].labels).sort().join("")]=e}));var ut={};function lt(e,n){if(!(this instanceof lt))return new lt(e,n);if(n&&n in at&&(n=null),n&&!(n in tt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof lt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Yn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=tt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=tt[this.model].channels;var o=rt.call(e,0,r);this.color=st(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ot))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ot[l];var c=tt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return lt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return lt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(tt).forEach((function(e){if(-1===at.indexOf(e)){var n=tt[e].channels;lt.prototype[e]=function(){if(this.model===e)return new lt(this);if(arguments.length)return new lt(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new lt(ht(tt[this.model][e].raw(this.color)).concat(t),e)},lt[e]=function(t){return"number"==typeof t&&(t=st(rt.call(arguments),n)),new lt(t,e)}}}));var ft=lt,mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const dt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,An(e,a);case 2:return[t,r]=n,An(e,fn(t,r))}},pt=function(e,n,t){const r=jn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},bt={},xt=function(...e){1===e.length&&(e=e[0]);const n=xt.options.context.templatePath.join("."),t=bt[n]=bt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var gt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function vt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ft.hsv(360*yt,100*e,100*n)}function wt(){return vt().hex()}var kt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:At,lastName:Ct,cfirstName:Mt,clastName:jt}=kt;function Et(){const e=At.male.concat();return dt(e)}function Ot(){return dt(Ct)}function St(){return dt(Mt)}function Rt(){return dt(jt)}var Tt,Ft=new Uint8Array(16);function _t(){if(!Tt&&!(Tt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tt(Ft)}var Dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&Dt.test(e)}for(var qt=[],Pt=0;Pt<256;++Pt)qt.push((Pt+256).toString(16).substr(1));function zt(e,n,t){var r=(e=e||{}).random||(e.rng||_t)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(qt[e[n+0]]+qt[e[n+1]]+qt[e[n+2]]+qt[e[n+3]]+"-"+qt[e[n+4]]+qt[e[n+5]]+"-"+qt[e[n+6]]+qt[e[n+7]]+"-"+qt[e[n+8]]+qt[e[n+9]]+"-"+qt[e[n+10]]+qt[e[n+11]]+qt[e[n+12]]+qt[e[n+13]]+qt[e[n+14]]+qt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Lt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ht=Object.keys(Lt),Nt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Lt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ht.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var It={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Bt=new RegExp(`(${Object.keys(It).join("|")})`,"g");function Ut(e="yyyy-MM-dd"){return Gt(Wt(),e)}function Gt(e,n){return n.replace(Bt,(function n(t,r){const a=It[r];return"function"==typeof a?a(e):a in It?n(t,a):e[a]()}))}function Wt(e=new Date(0),n=new Date){return new Date(Ln(e.getTime(),n.getTime()))}let Jt=0;const Kt=function(e){return Jt+=+e||1},Yt=Kt;function Vt(e=12,n=18){return en(Sn(fn(e,n),(()=>Xt())).join(" "))+"."}function Xt(e=3,n=10){return Sn(fn(e,n),(()=>Un("lower"))).join("")}function Zt(e=12,n=18){return Sn(fn(e,n),(()=>Qt())).join("")+"。"}function Qt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Hn(n,t));break;case 3:[a,n,t]=e,r=Hn(n,t)}return An(a,r).join("")}const er="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),nr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function tr(){return dt(er)}function rr(e){return`${Xt()}.${e||ar()}`}function ar(){return dt(nr)}var or={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ur={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:lr,_screenSize:cr,_videoSize:ir}=or,hr=Object.keys(ur);function sr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=dt(lr)),r=(r||wt()).replace(/^#/,""),t=(t||wt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const fr=["东北","华北","华东","华中","华南","西南","西北"];function mr(e){let n;switch(Rn(e)){case"array":n=e;break;default:n=[e]}return n}var dr=Object.freeze({__proto__:null,integer:Ln,isNumber:Pn,random:fn,natural:Hn,int:Ln,float:Nn,boolean:In,bool:In,character:Un,char:Un,string:Gn,str:Gn,range:bn,color:function(e){return e||mt[e]?mt[e].nicer:dt(gt).hex},hex:wt,rgb:function(){return vt().hsv().string()},rgba:function(){return vt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return vt().hsl().string()},_goldenRatioColor:vt,first:Et,last:Ot,name:function(e){return e=e?` ${Et()} `:" ",`${Et()}${e}${Ot()}`},cfirst:St,clast:Rt,cname:function(){return St()+Rt()},capitalize:en,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:dt,shuffle:pt,order:xt,d4:function(){return Hn(1,4)},d6:function(){return Hn(1,6)},d8:function(){return Hn(1,8)},d12:function(){return Hn(1,12)},d20:function(){return Hn(1,20)},d100:function(){return Hn(1,100)},guid:function(){return zt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:zt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=dt(Nt).id+Ut("yyyyMMdd")+Gn("number",3);for(let r=0;rVt())).join("\n")},word:Xt,sentence:Vt,title:function(e=3,n=7){return Sn(fn(e,n),(()=>en(Xt()))).join("")},ctitle:function(e=3,n=7){return Sn(fn(e,n),(()=>Qt())).join("")},csentence:Zt,cparagraph:function(e=3,n=7){return Sn(fn(e,n),(()=>Zt())).join("\n")},cword:Qt,protocol:tr,domain:rr,tld:ar,email:function(e){return`${Un("lower")}.${Xt()}@${e||Xt()+"."+ar()}`},ip:function(){return[...Array(4)].map((()=>Hn(0,255))).join(".")},url:function(e,n){return`${e||tr()}://${n||rr()}/${Xt()}`},_patternLetters:It,_rformat:Bt,_formatDate:Gt,_randomDate:Wt,time:function(e="HH:mm:ss"){return Ut(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ut(e)},date:Ut,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Gt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Wt(e,n).getTime():Wt().getTime()},_adSize:lr,_screenSize:cr,_videoSize:ir,image:sr,img:sr,_brandColors:ur,_brandNames:hr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=dt(lr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=ur[dt(hr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return dt(fr)},province:function(){return dt(Nt).name},city:function(e){const n=dt(Nt),t=dt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=dt(Nt),t=dt(n.children),r=dt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Hn(0,9);return n},genFile:function(e){return new File(mr(e),Xt())},genBlob:function(e){return new Blob(mr(e))}}),pr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function br(e=""){"string"!=typeof e&&(e+="");const n=e.match(pr.RE_KEY),t=n&&n[3]&&n[3].match(pr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Ln(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(pr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Ln(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function xr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=dt(aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(aa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(aa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function gr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?In(n,e,r):r}function yr(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function vr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Nn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function wr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=pt(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(pr.RE_KEY);c&&c[2]&&"number"===Rn(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function kr(e){this.type=e,this.offset=kr.offset(),this.text=kr.text()}function Ar(e,n){kr.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){kr.call(this,"match"),this.body=e.filter(Boolean)}function Mr(e,n){kr.call(this,e),this.body=n}function jr(e){Mr.call(this,"capture-group"),this.index=Lr[this.offset]||(Lr[this.offset]=zr++),this.body=e}function Er(e,n){kr.call(this,"quantified"),this.body=e,this.quantifier=n}function Or(e,n){kr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Sr(e,n){kr.call(this,"charset"),this.invert=e,this.body=n}function Rr(e,n){kr.call(this,"range"),this.start=e,this.end=n}function Tr(e){kr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Fr(e){kr.call(this,"unicode"),this.code=e.toUpperCase()}function _r(e){kr.call(this,"hex"),this.code=e.toUpperCase()}function Dr(e){kr.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){kr.call(this,"back-reference"),this.code=e.toUpperCase()}function qr(e){kr.call(this,"control-character"),this.code=e.toUpperCase()}var Pr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new Ar(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new kr("start")},xe="$",ge='"$"',ye=function(){return new kr("end")},ve=function(e,n){return new Er(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Or(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Or(e,1/0)},_e=function(e){return new Or(e,e)},De="+",$e='"+"',qe=function(){return new Or(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Or(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Or(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new jr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Mr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Mr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Mr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Sr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Rr(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Tr(e)},kn=".",An='"."',Cn=function(){return new kr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new kr("backspace")},Tn=function(){return new kr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new kr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new kr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new kr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new kr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new kr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new kr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new kr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new kr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new kr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new kr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new kr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new kr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new qr(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Dr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new _r(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Fr(e.join(""))},qt=function(){return new kr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(kr.offset=r,kr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Hr.gen=function(e,n,t){return t=t||{guid:1},Hr[e.type]?Hr[e.type](e,n,t):Hr.token(e,n,t)},Hr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Un();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return dt(Br.split(""));case"non-digit":return dt((Nr+Ir+Ur).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return dt(Wr.split(""));case"non-white-space":return dt((Nr+Ir+Br).split(""));case"tab":case"vertical-tab":break;case"word":return dt((Nr+Ir+Br).split(""));case"non-word":return dt(Ur.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(In()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Zr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Xr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=aa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in dr)&&!(u in dr))return e;o=o?o.split(/\s*,\s*/).map((e=>(pr.RE_PLACEHOLDER.exec(""),pr.RE_PLACEHOLDER.test(e)?ea(e,n,t,r):e))):[];const c=dr[a]||dr[u];switch(Rn(c)){case"array":return dt(c);case"function":{c.options=r;const e=c.apply(dr,o)||"";return delete c.options,e}}}function na(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(pr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=ea(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Tn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Gn(t):o;return u}var ta=Object.freeze({__proto__:null,array:xr,boolean:gr,function:yr,number:vr,object:wr,regexp:Vr,string:na});let ra=1;function aa(e,n="",t={}){const r={path:t.path||[ra],templatePath:t.templatePath||[ra++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Rn(e),o=ta[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(pr.RE_KEY,"$1"):n,rule:br(n),context:r}),r.root||(r.root=u),u):e}const oa={gen:aa,extend:Fn};function ua(e,n,t=[]){const r={name:"string"==typeof n?n.replace(pr.RE_KEY,"$1"):n,template:e,type:Rn(e),rule:br.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ua(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ua(e,n,r.path)))}return r}function la(e,n){const t=ua(e),r=ca.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:ea,getValueByKeyPath:Xr,normalizePath:Zr,splitPathToArray:Qr});const ca={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ia.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(pr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ia.equal("type",e.path,Rn(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ia.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(pr.RE_PLACEHOLDER))return r.length===a}return ia.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ia.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ia.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ia.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ia.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ia.equal("properties length",e.path,u.length,o.min,r)):ia.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ia.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1}};la.Diff=ca,la.Assert=ia;const ha={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function sa({url:e,type:n}){n=n.toLowerCase();for(const t in ha){const r=ha[t],{rurl:a,rtype:o}=r;if(fa(a,e)&&fa(o,n))return r}return!1}function fa(e,n){switch(Rn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ma({template:e},n){return R(e)?e(n):aa(e)}const da=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],pa=Symbol("Body internals"),ba=Symbol("Response internals");async function xa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class ga{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):da(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[pa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[pa].body}get bodyUsed(){return this[pa].disturbed}async arrayBuffer(){return(await xa(this[pa])).arrayBuffer()}async blob(){return xa(this[pa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await xa(this[pa])).text()}}Object.defineProperties(ga.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]),va=globalThis.window&&globalThis.window.Response||class{};class wa extends ga{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":da(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[pa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ba]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ba].type}get url(){return this[ba].url||""}get status(){return this[ba].status}get ok(){return this[ba].status>=200&&this[ba].status<300}get redirected(){return this[ba].counter>0}get statusText(){return this[ba].statusText}get headers(){return this[ba].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new va(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new va(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new va(null,{status:0,statusText:""});return e[ba].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(va.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ka=globalThis.window||{},Aa=ka.fetch;async function Ca(e,n={}){if(!0===ka.fetch.$mock){const t=sa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ma(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),Aa(e,n)}var Ma="OK";const ja=function(){},Ea=globalThis.window||{},Oa=void 0!==Ea?Ea.XMLHttpRequest:class{},Sa=Oa.prototype.send||ja,Ra=Oa.prototype.open||ja;class Ta extends Oa{constructor(...e){super(...e)}_send=Sa;_open=Ra;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=sa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=ma(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ka.fetch&&!ka.fetch.hasOwnProperty("$mock")&&(ka.fetch=Ca,ka.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Fa=globalThis.window||{};const _a={Handler:oa,Random:dr,Util:qn,XHR:Ta,RE:Yr,toJSONSchema:ua,valid:la,heredoc:Dn,setup:function(e){return Ta.setup(e)},_mocked:ha,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,oa.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Fa.XMLHttpRequest!==Ta&&(Fa.XMLHttpRequest=Ta),ha.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return _a}(); diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js index a9367e39..fce5618e 100644 --- a/dist/mock.cjs.js +++ b/dist/mock.cjs.js @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=M(e),void 0===n?(n=e,e=0):n=M(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=M(e),void 0===n?(n=e,e=0):n=M(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const Hn=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=qn(r,a));break;case 3:[t,r,a]=e,n=qn(r,a)}return Mn(n,(()=>Hn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function jt(){return st(wt)}function Mt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const qt=Object.keys(Pt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return qt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Ht(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Nt,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(Mn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return Mn(hn(e,n),(()=>Hn("lower"))).join("")}function Yt(e=12,n=18){return Mn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=qn(n,t));break;case 3:[a,n,t]=e,r=qn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:Pn,isNumber:Dn,random:hn,natural:qn,int:Pn,float:zn,boolean:Ln,bool:Ln,character:Hn,char:Hn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:jt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${jt()}`},cfirst:Mt,clast:Et,cname:function(){return Mt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return qn(1,4)},d6:function(){return qn(1,6)},d8:function(){return qn(1,8)},d12:function(){return qn(1,12)},d20:function(){return qn(1,20)},d100:function(){return qn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Ht("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return Mn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return Mn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return Mn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Hn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>qn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Nt,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Ht(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ht(e)},date:Ht,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=qn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Mr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,qt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>qt||(qt>Ht&&(Ht=qt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nqt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Z(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(qt))?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Q(){var e,t,r,a;if(e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt)),null!==a)for(;null!==a;)r.push(a),jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=qt,n.substr(qt,2)===Ot?(t=Ot,qt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=qt,n.substr(qt,2)===_t?(t=_t,qt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function te(){var e,t;return e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=Pt()),null===t?(qt=e,e=t):e=t,e}function re(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>qt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',je=",",Me='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",$e='"+"',Pe=function(){return new jr(1,1/0)},qe="*",ze='"*"',Le=function(){return new jr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Mr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},jn="Literal",Mn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",Pn='"\\\\d"',qn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new yr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',jt=/^[0-7]/,Mt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},Pt=function(){return new yr("null-character")},qt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&qt===n.length)return ae;throw u(It),zt=Math.max(qt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}qr.gen=function(e,n,t){return t=t||{guid:1},qr[e.type]?qr[e.type](e,n,t):qr.token(e,n,t)},qr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Hn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Nr.split(""));case"non-digit":return st((zr+Lr+Hr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Nr).split(""));case"non-word":return st(Hr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya&&ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";let Aa,Ca,ja;void 0!==globalThis.window?(Ca=Aa.prototype.send,ja=Aa.prototype.open):Aa=class{};class Ma extends Aa{constructor(...e){super(...e)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Ea={Handler:ta,Random:sr,Util:_n,XHR:Ma,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ma.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma||(globalThis.XMLHttpRequest=Ma),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ea; +"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var qt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys(qt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(qt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(qn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:qn,isNumber:Dn,random:hn,natural:Pn,int:qn,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?qn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||qn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=qr[this.offset]||(qr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",$e='"+"',qe=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},qt=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";const Aa=function(){},Ca=globalThis.window||{},Ma=void 0!==Ca?Ca.XMLHttpRequest:class{},ja=Ma.prototype.send||Aa,Ea=Ma.prototype.open||Aa;class Oa extends Ma{constructor(...e){super(...e)}_send=ja;_open=Ea;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Sa=globalThis.window||{};const Ra={Handler:ta,Random:sr,Util:_n,XHR:Oa,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Oa.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Sa.XMLHttpRequest!==Oa&&(Sa.XMLHttpRequest=Oa),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ra; diff --git a/dist/mock.esm.js b/dist/mock.esm.js index 9ab7324e..dc1f4d53 100644 --- a/dist/mock.esm.js +++ b/dist/mock.esm.js @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=M(e),void 0===n?(n=e,e=0):n=M(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=M(e),void 0===n?(n=e,e=0):n=M(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=jn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Nn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Nn.alpha=Nn.lower+Nn.upper,Nn.default=Nn.lower+Nn.upper+Nn.number+Nn.symbol;const Hn=function(e="default"){return Nn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Nn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=qn(r,a));break;case 3:[t,r,a]=e,n=qn(r,a)}return Mn(n,(()=>Hn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function jt(){return st(wt)}function Mt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Pt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const qt=Object.keys(Pt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Pt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return qt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Nt=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Ht(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Nt,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(Pn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(Mn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return Mn(hn(e,n),(()=>Hn("lower"))).join("")}function Yt(e=12,n=18){return Mn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=qn(n,t));break;case 3:[a,n,t]=e,r=qn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:Pn,isNumber:Dn,random:hn,natural:qn,int:Pn,float:zn,boolean:Ln,bool:Ln,character:Hn,char:Hn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:jt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${jt()}`},cfirst:Mt,clast:Et,cname:function(){return Mt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return qn(1,4)},d6:function(){return qn(1,6)},d8:function(){return qn(1,8)},d12:function(){return qn(1,12)},d20:function(){return qn(1,20)},d100:function(){return qn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Ht("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return Mn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return Mn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return Mn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Hn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>qn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Nt,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Ht(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ht(e)},date:Ht,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=qn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Pn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Pn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=Pr[this.offset]||(Pr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function jr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Mr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,qt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Nt={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Nt,Lt,e),Lt=e),Nt}function o(e){Ht>qt||(qt>Ht&&(Ht=qt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nqt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Z(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(qt))?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}function Q(){var e,t,r,a;if(e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt)),null!==a)for(;null!==a;)r.push(a),jt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Mt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=qt,n.substr(qt,2)===Ot?(t=Ot,qt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=qt,n.substr(qt,2)===_t?(t=_t,qt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(qt))?(a=n.charAt(qt),qt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(qt=e,e=t):e=t):(qt=e,e=ce)}else qt=e,e=ce;return e}function te(){var e,t;return e=qt,n.substr(qt,2)===At?(t=At,qt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=Pt()),null===t?(qt=e,e=t):e=t,e}function re(){var e,t,r;return e=qt,92===n.charCodeAt(qt)?(t=gt,qt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>qt?(r=n.charAt(qt),qt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(qt=e,e=t):e=t):(qt=e,e=ce)):(qt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',je=",",Me='","',Ee="}",Oe='"}"',Se=function(e,n){return new jr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new jr(e,1/0)},_e=function(e){return new jr(e,e)},De="+",$e='"+"',Pe=function(){return new jr(1,1/0)},qe="*",ze='"*"',Le=function(){return new jr(0,1/0)},Ne="?",He='"?"',Ie=function(){return new jr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Mr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},jn="Literal",Mn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",Pn='"\\\\d"',qn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Nn=function(){return new yr("non-digit")},Hn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',jt=/^[0-7]/,Mt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},Pt=function(){return new yr("null-character")},qt=0,zt=0,Lt=0,Nt={line:1,column:1,seenCR:!1},Ht=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&qt===n.length)return ae;throw u(It),zt=Math.max(qt,Ht),new e(It,ztString.fromCharCode(n+e))).join("")}qr.gen=function(e,n,t){return t=t||{guid:1},qr[e.type]?qr[e.type](e,n,t):qr.token(e,n,t)},qr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Hn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Nr.split(""));case"non-digit":return st((zr+Lr+Hr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Nr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Nr).split(""));case"non-word":return st(Hr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya&&ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";let Aa,Ca,ja;void 0!==globalThis.window?(Ca=Aa.prototype.send,ja=Aa.prototype.open):Aa=class{};class Ma extends Aa{constructor(...e){super(...e)}_send=Ca;_open=ja;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Ea={Handler:ta,Random:sr,Util:_n,XHR:Ma,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Ma.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Ma||(globalThis.XMLHttpRequest=Ma),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ea; +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var qt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys(qt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(qt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(qn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:qn,isNumber:Dn,random:hn,natural:Pn,int:qn,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?qn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||qn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=qr[this.offset]||(qr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",$e='"+"',qe=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},qt=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";const Aa=function(){},Ca=globalThis.window||{},Ma=void 0!==Ca?Ca.XMLHttpRequest:class{},ja=Ma.prototype.send||Aa,Ea=Ma.prototype.open||Aa;class Oa extends Ma{constructor(...e){super(...e)}_send=ja;_open=Ea;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Sa=globalThis.window||{};const Ra={Handler:ta,Random:sr,Util:_n,XHR:Oa,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Oa.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Sa.XMLHttpRequest!==Oa&&(Sa.XMLHttpRequest=Oa),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ra; diff --git a/graph.svg b/graph.svg new file mode 100644 index 00000000..57a6180b --- /dev/null +++ b/graph.svg @@ -0,0 +1,1279 @@ + + + + + + +G + + + +mock.js + +mock.js + + + +mock/XHR.js + +mock/XHR.js + + + +mock.js->mock/XHR.js + + + + + +mock/_mocked.js + +mock/_mocked.js + + + +mock.js->mock/_mocked.js + + + + + +mock/handler.js + +mock/handler.js + + + +mock.js->mock/handler.js + + + + + +mock/mock.js + +mock/mock.js + + + +mock.js->mock/mock.js + + + + + +mock/random/index.js + +mock/random/index.js + + + +mock.js->mock/random/index.js + + + + + +mock/regexp/index.js + +mock/regexp/index.js + + + +mock.js->mock/regexp/index.js + + + + + +mock/schema/index.js + +mock/schema/index.js + + + +mock.js->mock/schema/index.js + + + + + +mock/util.js + +mock/util.js + + + +mock.js->mock/util.js + + + + + +mock/valid/index.js + +mock/valid/index.js + + + +mock.js->mock/valid/index.js + + + + + +mock/xhr/index.js + +mock/xhr/index.js + + + +mock/XHR.js->mock/xhr/index.js + + + + + +mock/handler.js->mock/random/index.js + + + + + +mock/handler.js->mock/util.js + + + + + +mock/handle/gen.js + +mock/handle/gen.js + + + +mock/handler.js->mock/handle/gen.js + + + + + +mock/handle/index.js + +mock/handle/index.js + + + +mock/handler.js->mock/handle/index.js + + + + + +mock/handle/path.js + +mock/handle/path.js + + + +mock/handler.js->mock/handle/path.js + + + + + +mock/handle/placeholder.js + +mock/handle/placeholder.js + + + +mock/handler.js->mock/handle/placeholder.js + + + + + +mock/mock.js->mock/XHR.js + + + + + +mock/mock.js->mock/_mocked.js + + + + + +mock/mock.js->mock/handler.js + + + + + +mock/random/address.js + +mock/random/address.js + + + +mock/random/index.js->mock/random/address.js + + + + + +mock/random/helper.js + +mock/random/helper.js + + + +mock/random/index.js->mock/random/helper.js + + + + + +mock/random/basic.js + +mock/random/basic.js + + + +mock/random/index.js->mock/random/basic.js + + + + + +mock/random/color.js + +mock/random/color.js + + + +mock/random/index.js->mock/random/color.js + + + + + +mock/random/date.js + +mock/random/date.js + + + +mock/random/index.js->mock/random/date.js + + + + + +mock/random/file.js + +mock/random/file.js + + + +mock/random/index.js->mock/random/file.js + + + + + +mock/random/image.js + +mock/random/image.js + + + +mock/random/index.js->mock/random/image.js + + + + + +mock/random/misc.js + +mock/random/misc.js + + + +mock/random/index.js->mock/random/misc.js + + + + + +mock/random/name.js + +mock/random/name.js + + + +mock/random/index.js->mock/random/name.js + + + + + +mock/random/text.js + +mock/random/text.js + + + +mock/random/index.js->mock/random/text.js + + + + + +mock/random/web.js + +mock/random/web.js + + + +mock/random/index.js->mock/random/web.js + + + + + +mock/regexp/handler.js + +mock/regexp/handler.js + + + +mock/regexp/index.js->mock/regexp/handler.js + + + + + +mock/regexp/parser.js + +mock/regexp/parser.js + + + +mock/regexp/index.js->mock/regexp/parser.js + + + + + +mock/schema/schema.js + +mock/schema/schema.js + + + +mock/schema/index.js->mock/schema/schema.js + + + + + +mock/utils/each.js + +mock/utils/each.js + + + +mock/util.js->mock/utils/each.js + + + + + +mock/utils/extend.js + +mock/utils/extend.js + + + +mock/util.js->mock/utils/extend.js + + + + + +mock/utils/heredoc.js + +mock/utils/heredoc.js + + + +mock/util.js->mock/utils/heredoc.js + + + + + +mock/utils/type.js + +mock/utils/type.js + + + +mock/util.js->mock/utils/type.js + + + + + +mock/valid/valid.js + +mock/valid/valid.js + + + +mock/valid/index.js->mock/valid/valid.js + + + + + +mock/xhr/XMLHttpRequest/xhr.js + +mock/xhr/XMLHttpRequest/xhr.js + + + +mock/xhr/index.js->mock/xhr/XMLHttpRequest/xhr.js + + + + + +mock/xhr/fetch/fetch.js + +mock/xhr/fetch/fetch.js + + + +mock/xhr/index.js->mock/xhr/fetch/fetch.js + + + + + +mock/constant.js + +mock/constant.js + + + +mock/handle/array.js + +mock/handle/array.js + + + +mock/handle/array.js->mock/random/index.js + + + + + +mock/handle/array.js->mock/handle/gen.js + + + + + +mock/handle/gen.js->mock/util.js + + + + + +mock/handle/gen.js->mock/constant.js + + + + + +mock/handle/gen.js->mock/handle/index.js + + + + + +mock/parser.js + +mock/parser.js + + + +mock/handle/gen.js->mock/parser.js + + + + + +mock/handle/boolean.js + +mock/handle/boolean.js + + + +mock/handle/boolean.js->mock/random/index.js + + + + + +mock/handle/function.js + +mock/handle/function.js + + + +mock/handle/index.js->mock/handle/array.js + + + + + +mock/handle/index.js->mock/handle/boolean.js + + + + + +mock/handle/index.js->mock/handle/function.js + + + + + +mock/handle/number.js + +mock/handle/number.js + + + +mock/handle/index.js->mock/handle/number.js + + + + + +mock/handle/object.js + +mock/handle/object.js + + + +mock/handle/index.js->mock/handle/object.js + + + + + +mock/handle/regexp.js + +mock/handle/regexp.js + + + +mock/handle/index.js->mock/handle/regexp.js + + + + + +mock/handle/string.js + +mock/handle/string.js + + + +mock/handle/index.js->mock/handle/string.js + + + + + +mock/parser.js->mock/random/index.js + + + + + +mock/parser.js->mock/constant.js + + + + + +mock/random/basic/number.js + +mock/random/basic/number.js + + + +mock/handle/number.js->mock/random/basic/number.js + + + + + +mock/handle/object.js->mock/random/index.js + + + + + +mock/handle/object.js->mock/util.js + + + + + +mock/handle/object.js->mock/constant.js + + + + + +mock/handle/object.js->mock/handle/gen.js + + + + + +mock/handle/regexp.js->mock/regexp/index.js + + + + + +mock/handle/string.js->mock/random/index.js + + + + + +mock/handle/string.js->mock/util.js + + + + + +mock/handle/string.js->mock/constant.js + + + + + +mock/handle/string.js->mock/handle/placeholder.js + + + + + +mock/handle/path.js->mock/handle/gen.js + + + + + +mock/handle/placeholder.js->mock/random/index.js + + + + + +mock/handle/placeholder.js->mock/util.js + + + + + +mock/handle/placeholder.js->mock/constant.js + + + + + +mock/handle/placeholder.js->mock/handle/gen.js + + + + + +mock/handle/placeholder.js->mock/handle/path.js + + + + + +mock/random/address.js->mock/random/basic/number.js + + + + + +mock/random/address_dict.js + +mock/random/address_dict.js + + + +mock/random/address.js->mock/random/address_dict.js + + + + + +mock/random/address.js->mock/random/helper.js + + + + + +mock/random/address_ch.json + +mock/random/address_ch.json + + + +mock/random/address_dict.js->mock/random/address_ch.json + + + + + +mock/random/basic.js->mock/random/basic/number.js + + + + + +mock/random/basic/boolean.js + +mock/random/basic/boolean.js + + + +mock/random/basic.js->mock/random/basic/boolean.js + + + + + +mock/random/basic/character.js + +mock/random/basic/character.js + + + +mock/random/basic.js->mock/random/basic/character.js + + + + + +mock/random/basic/range.js + +mock/random/basic/range.js + + + +mock/random/basic.js->mock/random/basic/range.js + + + + + +mock/random/basic/string.js + +mock/random/basic/string.js + + + +mock/random/basic.js->mock/random/basic/string.js + + + + + +mock/random/basic/string.js->mock/random/basic/number.js + + + + + +mock/random/basic/string.js->mock/random/basic/character.js + + + + + +mock/random/brandColors.json + +mock/random/brandColors.json + + + +mock/random/color.js->mock/random/helper.js + + + + + +mock/random/color/color_dict.js + +mock/random/color/color_dict.js + + + +mock/random/color.js->mock/random/color/color_dict.js + + + + + +mock/random/color/color_dict_cn.json + +mock/random/color/color_dict_cn.json + + + +mock/random/color.js->mock/random/color/color_dict_cn.json + + + + + +mock/random/date.js->mock/random/basic/number.js + + + + + +mock/random/date/_patternLetters.js + +mock/random/date/_patternLetters.js + + + +mock/random/date.js->mock/random/date/_patternLetters.js + + + + + +mock/random/file.js->mock/util.js + + + + + +mock/random/text/text_en.js + +mock/random/text/text_en.js + + + +mock/random/file.js->mock/random/text/text_en.js + + + + + +mock/random/text/text_en.js->mock/random/helper.js + + + + + +mock/random/text/text_en.js->mock/random/basic.js + + + + + +mock/random/image.js->mock/random/helper.js + + + + + +mock/random/image.js->mock/random/brandColors.json + + + + + +mock/random/image.js->mock/random/color.js + + + + + +mock/random/image.json + +mock/random/image.json + + + +mock/random/image.js->mock/random/image.json + + + + + +mock/random/misc.js->mock/random/basic/number.js + + + + + +mock/random/misc/guid.js + +mock/random/misc/guid.js + + + +mock/random/misc.js->mock/random/misc/guid.js + + + + + +mock/random/misc/id.js + +mock/random/misc/id.js + + + +mock/random/misc.js->mock/random/misc/id.js + + + + + +mock/random/name.js->mock/random/helper.js + + + + + +mock/random/name.json + +mock/random/name.json + + + +mock/random/name.js->mock/random/name.json + + + + + +mock/random/text.js->mock/random/text/text_en.js + + + + + +mock/random/text/text-ch.js + +mock/random/text/text-ch.js + + + +mock/random/text.js->mock/random/text/text-ch.js + + + + + +mock/random/web/web_func.js + +mock/random/web/web_func.js + + + +mock/random/web.js->mock/random/web/web_func.js + + + + + +mock/random/misc/id.js->mock/random/address_dict.js + + + + + +mock/random/misc/id.js->mock/random/helper.js + + + + + +mock/random/misc/id.js->mock/random/basic.js + + + + + +mock/random/misc/id.js->mock/random/date.js + + + + + +mock/random/text/text-ch.js->mock/random/basic.js + + + + + +mock/random/web/web_func.js->mock/random/helper.js + + + + + +mock/random/web/web_func.js->mock/random/basic.js + + + + + +mock/random/web/web_func.js->mock/random/text.js + + + + + +mock/random/web/web_dict.js + +mock/random/web/web_dict.js + + + +mock/random/web/web_func.js->mock/random/web/web_dict.js + + + + + +mock/regexp/handler.js->mock/random/index.js + + + + + +mock/regexp/handler.js->mock/util.js + + + + + +mock/schema/schema.js->mock/util.js + + + + + +mock/schema/schema.js->mock/constant.js + + + + + +mock/schema/schema.js->mock/parser.js + + + + + +mock/utils/each.js->mock/utils/type.js + + + + + +mock/valid/valid.js->mock/util.js + + + + + +mock/valid/valid.js->mock/constant.js + + + + + +mock/valid/valid.js->mock/schema/schema.js + + + + + +mock/xhr/XMLHttpRequest/constant.js + +mock/xhr/XMLHttpRequest/constant.js + + + +mock/xhr/XMLHttpRequest/xhr.js->mock/xhr/XMLHttpRequest/constant.js + + + + + +mock/xhr/ajax-tools.js + +mock/xhr/ajax-tools.js + + + +mock/xhr/XMLHttpRequest/xhr.js->mock/xhr/ajax-tools.js + + + + + +mock/xhr/ajax-tools.js->mock/_mocked.js + + + + + +mock/xhr/ajax-tools.js->mock/util.js + + + + + +mock/xhr/ajax-tools.js->mock/handle/gen.js + + + + + +mock/xhr/fetch/fetch.js->mock/xhr/ajax-tools.js + + + + + +mock/xhr/fetch/src/response.js + +mock/xhr/fetch/src/response.js + + + +mock/xhr/fetch/fetch.js->mock/xhr/fetch/src/response.js + + + + + +mock/xhr/fetch/src/INTERNALS.js + +mock/xhr/fetch/src/INTERNALS.js + + + +mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/INTERNALS.js + + + + + +mock/xhr/fetch/src/body.js + +mock/xhr/fetch/src/body.js + + + +mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/body.js + + + + + +mock/xhr/fetch/src/body/exactContentType.js + +mock/xhr/fetch/src/body/exactContentType.js + + + +mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/body/exactContentType.js + + + + + +mock/xhr/fetch/src/utils/is-redirect.js + +mock/xhr/fetch/src/utils/is-redirect.js + + + +mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/utils/is-redirect.js + + + + + +mock/xhr/fetch/src/body.js->mock/xhr/fetch/src/INTERNALS.js + + + + + +mock/xhr/fetch/src/body/consumeBody.js + +mock/xhr/fetch/src/body/consumeBody.js + + + +mock/xhr/fetch/src/body.js->mock/xhr/fetch/src/body/consumeBody.js + + + + + +mock/xhr/fetch/src/utils/is.js + +mock/xhr/fetch/src/utils/is.js + + + +mock/xhr/fetch/src/body.js->mock/xhr/fetch/src/utils/is.js + + + + + +mock/xhr/fetch/src/body/exactContentType.js->mock/xhr/fetch/src/INTERNALS.js + + + + + +mock/xhr/fetch/src/body/exactContentType.js->mock/xhr/fetch/src/utils/is.js + + + + + diff --git a/src/mock.js b/src/mock.js index 248b3086..afd8c1e3 100644 --- a/src/mock.js +++ b/src/mock.js @@ -6,7 +6,7 @@ import * as RE from './mock/regexp/index.js'; import { toJSONSchema } from './mock/schema/index.js'; import { valid } from './mock/valid/index.js'; import { _mocked } from './mock/_mocked.js'; -import { XHR } from './mock/XHR.js'; +import { XHR } from './mock/xhr/index.js'; import { mock } from './mock/mock'; /* ! diff --git a/src/mock/XHR.js b/src/mock/XHR.js deleted file mode 100644 index febb0c5b..00000000 --- a/src/mock/XHR.js +++ /dev/null @@ -1 +0,0 @@ -export { MockXMLHttpRequest as XHR } from './xhr/index.js'; diff --git a/src/mock/mock.js b/src/mock/mock.js index 65992e91..617c5600 100644 --- a/src/mock/mock.js +++ b/src/mock/mock.js @@ -1,6 +1,9 @@ import Handler from './handler.js'; import { _mocked } from './_mocked.js'; -import { XHR } from './XHR.js'; +import { XHR } from './xhr/index.js'; + +const window = globalThis.window || {}; + export function mock(...args) { let rurl; let rtype = 'get'; @@ -23,7 +26,7 @@ export function mock(...args) { } // 拦截 XHR - if (!XHR) globalThis.XMLHttpRequest = XHR; + if (window.XMLHttpRequest !== XHR) window.XMLHttpRequest = XHR; _mocked.$set({ rurl, diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 4566855e..70548f0a 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -3,15 +3,11 @@ import { find, convert } from '../ajax-tools.js'; import HTTP_STATUS_CODES from './constant.js'; -let XMLHttpRequest; -let SEND; -let OPEN; -if (globalThis.window !== undefined) { - SEND = XMLHttpRequest.prototype.send; - OPEN = XMLHttpRequest.prototype.open; -} else { - XMLHttpRequest = class NULL {}; -} +const voidFunc = function () {}; +const window = globalThis.window || {}; +const XMLHttpRequest = window !== undefined ? window.XMLHttpRequest : class NULL {}; +const SEND = XMLHttpRequest.prototype.send || voidFunc; +const OPEN = XMLHttpRequest.prototype.open || voidFunc; // ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 @@ -19,10 +15,11 @@ if (globalThis.window !== undefined) { // 也不可以在 XHR 实例上定义 // 这样的话会导致无法接收到数据 // 但是确认为是 mockjs 内的数据返回就可以直接修改 XHR 实例了 -const defineGetAndSet = function (what) { +const defineGetAndSet = function (XHR) { + // 将这些 键值对 映射到 $Mock 属性对象的对应值上去 const array = ['readyState', 'status', 'response', 'responseText', 'statusText']; Object.defineProperties( - what, + XHR, array.reduce((col, cur) => { col[cur] = { get() { @@ -54,7 +51,6 @@ class MockXMLHttpRequest extends XMLHttpRequest { if (this.$template) { defineGetAndSet(this); this.dispatchEvent(new Event('loadstart')); - setTimeout(this.$done.bind(this), this.timeout || 100); return null; } @@ -81,6 +77,7 @@ class MockXMLHttpRequest extends XMLHttpRequest { $template = null; $done() { + // 伪造 XHR 返回事件 this.readyState = this.HEADERS_RECEIVED; this.dispatchEvent(new Event('readystatechange')); this.readyState = this.LOADING; diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index d2284bf3..aa966bf8 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -1,5 +1,5 @@ const window = globalThis.window || {}; -const realFetch = window && window.fetch; +const realFetch = window.fetch; function mockFetch() { // 代理 fetch 的初始化函数 if (window.fetch && !window.fetch.hasOwnProperty('$mock')) { diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index be9b5140..22c3f1cc 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -3,4 +3,4 @@ import { mockFetch } from './fetch/fetch.js'; typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 -export { MockXMLHttpRequest } from './XMLHttpRequest/xhr.js'; +export { MockXMLHttpRequest as XHR } from './XMLHttpRequest/xhr.js'; diff --git a/test/fakeServer.js b/test/fakeServer.js index 940c1f14..93515f3f 100644 --- a/test/fakeServer.js +++ b/test/fakeServer.js @@ -1,19 +1,23 @@ -Mock.mock("fake/file", { - "data|100": [ +Mock.mock('fake/file', { + 'data|100': [ { - ID: "@increment()", - name: "@cname()", - description: "@csentence()", + ID: '@increment()', + name: '@cname()', + description: '@csentence()', avatar: '@dataImage("64x64")', - address: "@region()", - province: "@province()", + address: '@region()', + province: '@province()', }, ], }); -axios.get("fake/file").then((res) => console.warn(res)); -axios.get("https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json").then((res) => console.warn({ res })); +axios.get('fake/file').then((res) => console.warn('xhr inner', res)); +axios + .get('https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json') + .then((res) => console.warn('xhr outer', { res })); -// fetch("fake/file") -// .then((res) => res.json()) -// .then(console.log); -// fetch("https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json").then((res) => console.log("fetch", res)); +fetch('fake/file') + .then((res) => res.json()) + .then((res) => console.warn('fetch inner', res)); +fetch('https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json') + .then((res) => res.json()) + .then((res) => console.warn('fetch outer', res)); From db515c7e6d909b264c60254b3c57fea77032c1c3 Mon Sep 17 00:00:00 2001 From: KonghaYao <20192831006@m.scnu.edu.cn> Date: Thu, 1 Jul 2021 10:04:36 +0800 Subject: [PATCH 41/65] 1.0.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 55249f70..e0b5c9a1 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-esm", "title": "Mock.js", "description": "Mockjs 的 esm 版本,基础 api 一致", - "version": "1.0.0", + "version": "1.0.1", "homepage": "http://mockjs.com/", "keywords": [ "mock", From dfaae7f4d95bdc4d5cd65e309174d306409aa12b Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Tue, 30 Jan 2024 08:41:54 +0000 Subject: [PATCH 42/65] =?UTF-8?q?teat(schema):=20=E9=80=9A=E8=BF=87=20sche?= =?UTF-8?q?ma=20=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/bower.json | 11 + test/materiels/noop.html | 2 + test/materiels/noop.js | 1 + test/package.json | 6 + test/test.coveralls.js | 35 ++ test/test.mock.html | 58 ++++ test/test.mock.mock.js | 62 ++++ test/test.mock.random.js | 464 +++++++++++++++++++++++++ test/test.mock.request.js | 445 ++++++++++++++++++++++++ test/test.mock.schema.js | 205 +++++++++++ test/test.mock.spec.dpd.js | 245 ++++++++++++++ test/test.mock.spec.dtd.js | 677 +++++++++++++++++++++++++++++++++++++ test/test.mock.valid.js | 308 +++++++++++++++++ test/valid.js | 264 +++++++++++++++ 14 files changed, 2783 insertions(+) create mode 100644 test/bower.json create mode 100644 test/materiels/noop.html create mode 100644 test/materiels/noop.js create mode 100644 test/package.json create mode 100644 test/test.coveralls.js create mode 100644 test/test.mock.html create mode 100644 test/test.mock.mock.js create mode 100644 test/test.mock.random.js create mode 100644 test/test.mock.request.js create mode 100644 test/test.mock.schema.js create mode 100644 test/test.mock.spec.dpd.js create mode 100644 test/test.mock.spec.dtd.js create mode 100644 test/test.mock.valid.js create mode 100644 test/valid.js diff --git a/test/bower.json b/test/bower.json new file mode 100644 index 00000000..3485bbe8 --- /dev/null +++ b/test/bower.json @@ -0,0 +1,11 @@ +{ + "name": "test", + "dependencies": {}, + "devDependencies": { + "requirejs": "*", + "mocha": "*", + "chai": "*", + "underscore": "*", + "jquery": "~2.1.1" + } +} diff --git a/test/materiels/noop.html b/test/materiels/noop.html new file mode 100644 index 00000000..bdef09c7 --- /dev/null +++ b/test/materiels/noop.html @@ -0,0 +1,2 @@ + +
noop.html
\ No newline at end of file diff --git a/test/materiels/noop.js b/test/materiels/noop.js new file mode 100644 index 00000000..247b5720 --- /dev/null +++ b/test/materiels/noop.js @@ -0,0 +1 @@ +(function noop() {})(); \ No newline at end of file diff --git a/test/package.json b/test/package.json new file mode 100644 index 00000000..b26a3b84 --- /dev/null +++ b/test/package.json @@ -0,0 +1,6 @@ +{ + "name": "test", + "dependencies": { + "chai": "^1.10.0" + } +} diff --git a/test/test.coveralls.js b/test/test.coveralls.js new file mode 100644 index 00000000..6166cb79 --- /dev/null +++ b/test/test.coveralls.js @@ -0,0 +1,35 @@ +/* global require */ +/* global describe, it */ +var assert = require("assert") +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) +describe('Array', function() { + describe('#indexOf()', function() { + it('should return -1 when the value is not present', function() { + assert.equal(-1, [1, 2, 3].indexOf(5)) + assert.equal(-1, [1, 2, 3].indexOf(0)) + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.html b/test/test.mock.html new file mode 100644 index 00000000..8c9c6552 --- /dev/null +++ b/test/test.mock.html @@ -0,0 +1,58 @@ + + + + Test: Mock + + + + + + +
+ + + + + + + + +
+
+

+    

+
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+    
+
+
\ No newline at end of file
diff --git a/test/test.mock.mock.js b/test/test.mock.mock.js
new file mode 100644
index 00000000..1461e5a8
--- /dev/null
+++ b/test/test.mock.mock.js
@@ -0,0 +1,62 @@
+/* global require, chai, describe, before, it */
+// 数据占位符定义(Data Placeholder Definition,DPD)
+var expect = chai.expect
+var Mock, $, _
+
+describe('Mock.mock', function() {
+    before(function(done) {
+        require(['mock', 'underscore', 'jquery'], function() {
+            Mock = arguments[0]
+            _ = arguments[1]
+            $ = arguments[2]
+            expect(Mock).to.not.equal(undefined)
+            expect(_).to.not.equal(undefined)
+            expect($).to.not.equal(undefined)
+            done()
+        })
+    })
+
+    describe('Mock.mock( String )', function() {
+        it('@EMAIL', function() {
+            var data = Mock.mock(this.test.title)
+            expect(data).to.not.equal(this.test.title)
+            this.test.title += ' => ' + data
+        })
+    })
+    describe('Mock.mock( {} )', function() {
+        it('', function() {
+            var tpl = {
+                'list|1-10': [{
+                    'id|+1': 1,
+                    'email': '@EMAIL'
+                }]
+            }
+            var data = Mock.mock(tpl)
+            this.test.title = JSON.stringify(tpl /*, null, 4*/ ) + ' => ' + JSON.stringify(data /*, null, 4*/ )
+            expect(data).to.have.property('list')
+                .that.be.an('array').with.length.within(1, 10)
+            _.each(data.list, function(item, index, list) {
+                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
+            })
+        })
+    })
+    describe('Mock.mock( function() )', function() {
+        it('', function() {
+            var fn = function() {
+                return Mock.mock({
+                    'list|1-10': [{
+                        'id|+1': 1,
+                        'email': '@EMAIL'
+                    }]
+                })
+            }
+            var data = Mock.mock(fn)
+            this.test.title = fn.toString() + ' => ' + JSON.stringify(data /*, null, 4*/ )
+            expect(data).to.have.property('list')
+                .that.be.an('array').with.length.within(1, 10)
+            _.each(data.list, function(item, index, list) {
+                if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1)
+            })
+        })
+    })
+})
\ No newline at end of file
diff --git a/test/test.mock.random.js b/test/test.mock.random.js
new file mode 100644
index 00000000..bb5f9df7
--- /dev/null
+++ b/test/test.mock.random.js
@@ -0,0 +1,464 @@
+/* global require, chai, describe, before, it */
+/* global window */
+// 数据占位符定义(Data Placeholder Definition,DPD)
+var expect = chai.expect
+var Mock, Random, $, _, Random
+
+/* jshint -W061 */
+describe('Random', function() {
+    before(function(done) {
+        require(['mock', 'underscore', 'jquery'], function() {
+            Mock = arguments[0]
+            window.Random = Random = Mock.Random
+            _ = arguments[1]
+            $ = arguments[2]
+            expect(Mock).to.not.equal(undefined)
+            expect(_).to.not.equal(undefined)
+            expect($).to.not.equal(undefined)
+            done()
+        })
+    })
+
+    function stringify(json) {
+        return JSON.stringify(json /*, null, 4*/ )
+    }
+
+    function doit(expression, validator) {
+        it('', function() {
+            // for (var i = 0; i < 1; i++) {}
+            var data = eval(expression)
+            validator(data)
+            this.test.title = stringify(expression) + ' => ' + stringify(data)
+        })
+    }
+
+    describe('Basic', function() {
+        doit('Random.boolean()', function(data) {
+            expect(data).to.be.a('boolean')
+        })
+
+        doit('Random.natural()', function(data) {
+            expect(data).to.be.a('number').within(0, 9007199254740992)
+        })
+        doit('Random.natural(1, 3)', function(data) {
+            expect(data).to.be.a('number').within(1, 3)
+        })
+        doit('Random.natural(1)', function(data) {
+            expect(data).to.be.a('number').least(1)
+        })
+
+        doit('Random.integer()', function(data) {
+            expect(data).to.be.a('number').within(-9007199254740992, 9007199254740992)
+        })
+        doit('Random.integer(-10, 10)', function(data) {
+            expect(data).to.be.a('number').within(-10, 10)
+        })
+
+        // 1 整数部分 2 小数部分
+        var RE_FLOAT = /(\-?\d+)\.?(\d+)?/
+
+        function validFloat(float, min, max, dmin, dmax) {
+            RE_FLOAT.lastIndex = 0
+            var parts = RE_FLOAT.exec(float + '')
+
+            expect(+parts[1]).to.be.a('number').within(min, max)
+
+            /* jshint -W041 */
+            if (parts[2] != undefined) {
+                expect(parts[2]).to.have.length.within(dmin, dmax)
+            }
+        }
+
+        doit('Random.float()', function(data) {
+            validFloat(data, -9007199254740992, 9007199254740992, 0, 17)
+        })
+        doit('Random.float(0)', function(data) {
+            validFloat(data, 0, 9007199254740992, 0, 17)
+        })
+        doit('Random.float(60, 100)', function(data) {
+            validFloat(data, 60, 100, 0, 17)
+        })
+        doit('Random.float(60, 100, 3)', function(data) {
+            validFloat(data, 60, 100, 3, 17)
+        })
+        doit('Random.float(60, 100, 3, 5)', function(data) {
+            validFloat(data, 60, 100, 3, 5)
+        })
+
+        var CHARACTER_LOWER = 'abcdefghijklmnopqrstuvwxyz'
+        var CHARACTER_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+        var CHARACTER_NUMBER = '0123456789'
+        var CHARACTER_SYMBOL = '!@#$%^&*()[]'
+        doit('Random.character()', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(
+                CHARACTER_LOWER +
+                CHARACTER_UPPER +
+                CHARACTER_NUMBER +
+                CHARACTER_SYMBOL
+            ).to.include(data)
+        })
+        doit('Random.character("lower")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_LOWER).to.include(data)
+        })
+        doit('Random.character("upper")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_UPPER).to.include(data)
+        })
+        doit('Random.character("number")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_NUMBER).to.include(data)
+        })
+        doit('Random.character("symbol")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect(CHARACTER_SYMBOL).to.include(data)
+        })
+        doit('Random.character("aeiou")', function(data) {
+            expect(data).to.be.a('string').with.length(1)
+            expect('aeiou').to.include(data)
+        })
+
+        doit('Random.string()', function(data) {
+            expect(data).to.be.a('string').with.length.within(3, 7)
+        })
+        doit('Random.string(5)', function(data) {
+            expect(data).to.be.a('string').with.length(5)
+        })
+        doit('Random.string("lower", 5)', function(data) {
+            expect(data).to.be.a('string').with.length(5)
+            for (var i = 0; i < data.length; i++) {
+                expect(CHARACTER_LOWER).to.include(data[i])
+            }
+        })
+        doit('Random.string(7, 10)', function(data) {
+            expect(data).to.be.a('string').with.length.within(7, 10)
+        })
+        doit('Random.string("aeiou", 1, 3)', function(data) {
+            expect(data).to.be.a('string').with.length.within(1, 3)
+            for (var i = 0; i < data.length; i++) {
+                expect('aeiou').to.include(data[i])
+            }
+        })
+
+        doit('Random.range(10)', function(data) {
+            expect(data).to.be.an('array').with.length(10)
+        })
+        doit('Random.range(3, 7)', function(data) {
+            expect(data).to.be.an('array').deep.equal([3, 4, 5, 6])
+        })
+        doit('Random.range(1, 10, 2)', function(data) {
+            expect(data).to.be.an('array').deep.equal([1, 3, 5, 7, 9])
+        })
+        doit('Random.range(1, 10, 3)', function(data) {
+            expect(data).to.be.an('array').deep.equal([1, 4, 7])
+        })
+
+        var RE_DATE = /\d{4}-\d{2}-\d{2}/
+        var RE_TIME = /\d{2}:\d{2}:\d{2}/
+        var RE_DATETIME = new RegExp(RE_DATE.source + ' ' + RE_TIME.source)
+
+        doit('Random.date()', function(data) {
+            expect(RE_DATE.test(data)).to.be.true
+        })
+
+        doit('Random.time()', function(data) {
+            expect(RE_TIME.test(data)).to.be.true
+        })
+
+        doit('Random.datetime()', function(data) {
+            expect(RE_DATETIME.test(data)).to.be.true
+        })
+        doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("yy-MM-dd HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("y-MM-dd HH:mm:ss")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("y-M-d H:m:s")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function(data) {
+            expect(data).to.be.ok
+        })
+
+        doit('Random.now()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("year")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("month")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("day")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("hour")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("minute")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("second")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("week")', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function(data) {
+            expect(data).to.be.ok
+        })
+    })
+
+    describe('Image', function() {
+        doit('Random.image()', function(data) {
+            expect(data).to.be.ok
+        })
+        it('Random.dataImage()', function() {
+            var data = eval(this.test.title)
+            expect(data).to.be.ok
+            this.test.title = stringify(this.test.title) + ' => '
+        })
+        it('Random.dataImage("200x100")', function() {
+            var data = eval(this.test.title)
+            expect(data).to.be.ok
+            this.test.title = stringify(this.test.title) + ' => '
+        })
+        it('Random.dataImage("200x100", "Hello Mock.js!")', function() {
+            var data = eval(this.test.title)
+            expect(data).to.be.ok
+            this.test.title = stringify(this.test.title) + ' => '
+        })
+    })
+
+    var RE_COLOR = /^#[0-9a-fA-F]{6}$/
+    var RE_COLOR_RGB = /^rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
+    var RE_COLOR_RGBA = /^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0\.\d{1,2}\)$/
+    var RE_COLOR_HSL = /^hsl\(\d{1,3}, \d{1,3}, \d{1,3}\)$/
+    describe('Color', function() {
+        doit('Random.color()', function(data) {
+            expect(RE_COLOR.test(data)).to.true
+        })
+        doit('Random.hex()', function(data) {
+            expect(RE_COLOR.test(data)).to.true
+        })
+        doit('Random.rgb()', function(data) {
+            expect(RE_COLOR_RGB.test(data)).to.true
+        })
+        doit('Random.rgba()', function(data) {
+            expect(RE_COLOR_RGBA.test(data)).to.true
+        })
+        doit('Random.hsl()', function(data) {
+            expect(RE_COLOR_HSL.test(data)).to.true
+        })
+    })
+
+    describe('Text', function() {
+        doit('Random.paragraph()', function(data) {
+            expect(data.split('.').length - 1).to.within(3, 7)
+        })
+        doit('Random.paragraph(2)', function(data) {
+            expect(data.split('.').length - 1).to.equal(2)
+        })
+        doit('Random.paragraph(1, 3)', function(data) {
+            expect(data.split('.').length - 1).to.within(1, 3)
+        })
+
+        doit('Random.sentence()', function(data) {
+            expect(data[0]).to.equal(data.toUpperCase()[0])
+            expect(data.split(' ').length).to.within(12, 18)
+        })
+        doit('Random.sentence(4)', function(data) {
+            expect(data[0]).to.equal(data.toUpperCase()[0])
+            expect(data.split(' ').length).to.equal(4)
+        })
+        doit('Random.sentence(3, 5)', function(data) {
+            expect(data[0]).to.equal(data.toUpperCase()[0])
+            expect(data.split(' ').length).to.within(3, 5)
+        })
+
+        doit('Random.word()', function(data) {
+            expect(data).to.have.length.within(3, 10)
+        })
+        doit('Random.word(4)', function(data) {
+            expect(data).to.have.length(4)
+        })
+        doit('Random.word(3, 5)', function(data) {
+            expect(data).to.have.length.within(3, 5)
+        })
+
+        doit('Random.title()', function(data) {
+            var words = data.split(' ')
+            _.each(words, function(word) {
+                expect(word[0]).to.equal(word[0].toUpperCase())
+            })
+            expect(words).to.have.length.within(3, 7)
+        })
+        doit('Random.title(4)', function(data) {
+            var words = data.split(' ')
+            _.each(words, function(word) {
+                expect(word[0]).to.equal(word[0].toUpperCase())
+            })
+            expect(words).to.have.length(4)
+        })
+        doit('Random.title(3, 5)', function(data) {
+            var words = data.split(' ')
+            _.each(words, function(word) {
+                expect(word[0]).to.equal(word[0].toUpperCase())
+            })
+            expect(words).to.have.length.within(3, 5)
+        })
+    })
+
+    describe('Name', function() {
+        doit('Random.first()', function(data) {
+            expect(data[0]).to.equal(data[0].toUpperCase())
+        })
+        doit('Random.last()', function(data) {
+            expect(data[0]).to.equal(data[0].toUpperCase())
+        })
+        doit('Random.name()', function(data) {
+            var words = data.split(' ')
+            expect(words).to.have.length(2)
+            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
+            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
+        })
+        doit('Random.name(true)', function(data) {
+            var words = data.split(' ')
+            expect(words).to.have.length(3)
+            expect(words[0][0]).to.equal(words[0][0].toUpperCase())
+            expect(words[1][0]).to.equal(words[1][0].toUpperCase())
+            expect(words[2][0]).to.equal(words[2][0].toUpperCase())
+        })
+
+        doit('Random.cfirst()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.clast()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.cname()', function(data) {
+            expect(data).to.be.ok
+        })
+    })
+
+    var RE_URL = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/
+    var RE_IP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/
+    describe('Web', function() {
+        doit('Random.url()', function(data) {
+            expect(RE_URL.test(data)).to.be.true
+        })
+        doit('Random.domain()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.domain("com")', function(data) {
+            expect(data).to.include('.com')
+        })
+        doit('Random.tld()', function(data) {
+            expect(data).to.be.ok
+        })
+
+        doit('Random.email()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.email("nuysoft.com")', function(data) {
+            expect(data).to.include('@nuysoft.com')
+        })
+        doit('Random.ip()', function(data) {
+            expect(RE_IP.test(data)).to.be.true
+        })
+    })
+    describe('Address', function() {
+        doit('Random.region()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.province()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.city()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.city(true)', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.county()', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.county(true)', function(data) {
+            expect(data).to.be.ok
+        })
+        doit('Random.zip()', function(data) {
+            expect(data).to.be.ok
+        })
+    })
+    describe('Helpers', function() {
+        doit('Random.capitalize()', function(data) {
+            expect(data).to.equal('Undefined')
+        })
+        doit('Random.capitalize("hello")', function(data) {
+            expect(data).to.equal('Hello')
+        })
+
+        doit('Random.upper()', function(data) {
+            expect(data).to.equal('UNDEFINED')
+        })
+        doit('Random.upper("hello")', function(data) {
+            expect(data).to.equal('HELLO')
+        })
+
+        doit('Random.lower()', function(data) {
+            expect(data).to.equal('undefined')
+        })
+        doit('Random.lower("HELLO")', function(data) {
+            expect(data).to.equal('hello')
+        })
+
+        doit('Random.pick()', function(data) {
+            expect(data).to.be.undefined
+        })
+        doit('Random.pick("a", "e", "i", "o", "u")', function(data) {
+            expect(["a", "e", "i", "o", "u"]).to.include(data)
+        })
+        doit('Random.pick(["a", "e", "i", "o", "u"])', function(data) {
+            expect(["a", "e", "i", "o", "u"]).to.include(data)
+        })
+        doit('Random.pick(["a", "e", "i", "o", "u"], 3)', function(data) {
+            expect(data).to.be.an('array').with.length(3)
+        })
+        doit('Random.pick(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
+            expect(data).to.be.an('array').with.length.within(1, 5)
+        })
+
+        doit('Random.shuffle()', function(data) {
+            expect(data).to.deep.equal([])
+        })
+        doit('Random.shuffle(["a", "e", "i", "o", "u"])', function(data) {
+            expect(data.join('')).to.not.equal('aeiou')
+            expect(data.sort().join('')).to.equal('aeiou')
+        })
+        doit('Random.shuffle(["a", "e", "i", "o", "u"], 3)', function(data) {
+            expect(data).to.be.an('array').with.length(3)
+        })
+        doit('Random.shuffle(["a", "e", "i", "o", "u"], 1, 5)', function(data) {
+            expect(data).to.be.an('array').with.length.within(1, 5)
+        })
+    })
+
+    var RE_GUID = /[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}/
+    describe('Miscellaneous', function() {
+        doit('Random.guid()', function(data) {
+            expect(data).to.be.a('string').with.length(36)
+            expect(RE_GUID.test(data)).to.be.true
+        })
+        doit('Random.id()', function(data) {
+            expect(data).to.be.a('string').with.length(18)
+        })
+    })
+})
\ No newline at end of file
diff --git a/test/test.mock.request.js b/test/test.mock.request.js
new file mode 100644
index 00000000..42000d74
--- /dev/null
+++ b/test/test.mock.request.js
@@ -0,0 +1,445 @@
+/* global console, require, chai, describe, before, it */
+// 数据占位符定义(Data Placeholder Definition,DPD)
+var expect = chai.expect
+var Mock, $, _
+
+describe('Request', function() {
+    before(function(done) {
+        require(['mock', 'underscore', 'jquery'], function() {
+            Mock = arguments[0]
+            _ = arguments[1]
+            $ = arguments[2]
+            expect(Mock).to.not.equal(undefined)
+            expect(_).to.not.equal(undefined)
+            expect($).to.not.equal(undefined)
+            done()
+        })
+    })
+
+    function stringify(json) {
+        return JSON.stringify(json /*, null, 4*/ )
+    }
+
+    describe('jQuery.ajax()', function() {
+        it('', function(done) {
+            var that = this
+            var url = Math.random()
+            $.ajax({
+                url: url,
+                dataType: 'json'
+            }).done(function( /*data, textStatus, jqXHR*/ ) {
+                // 不会进入
+            }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) {
+                // 浏览器 || PhantomJS
+                expect([404, 0]).to.include(jqXHR.status)
+                that.test.title += url + ' => ' + jqXHR.status
+            }).always(function() {
+                done()
+            })
+        })
+    })
+    describe('jQuery.getScript()', function() {
+        it('', function(done) {
+            var that = this
+            var url = './materiels/noop.js'
+            $.getScript(url, function(script, textStatus, jqXHR) {
+                expect(script).to.be.ok
+                that.test.title += url + ' => ' + jqXHR.status + ' ' + textStatus
+                done()
+            })
+        })
+    })
+    describe('jQuery.load()', function() {
+        it('', function(done) {
+            var that = this
+            var url = './materiels/noop.html'
+            $('
').load(url, function(responseText /*, textStatus, jqXHR*/ ) { + expect(responseText).to.be.ok + that.test.title += url + ' => ' + responseText + done() + }) + }) + }) + describe('jQuery.ajax() XHR Fields', function() { + it('', function(done) { + var that = this + var url = Math.random() + var xhr + $.ajax({ + xhr: function() { + xhr = $.ajaxSettings.xhr() + return xhr + }, + url: url, + dataType: 'json', + xhrFields: { + timeout: 123, + withCredentials: true + } + }).done(function( /*data, textStatus, jqXHR*/ ) { + // 不会进入 + }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) { + // 浏览器 || PhantomJS + expect([404, 0]).to.include(jqXHR.status) + that.test.title += url + ' => ' + jqXHR.status + expect(xhr.timeout).to.be.equal(123) + expect(xhr.withCredentials).to.be.equal(true) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, template )', function() { + it('', function(done) { + var that = this + var url = 'rurl_template.json' + + Mock.mock(/rurl_template.json/, { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + + Mock.setup({ + // timeout: 100, + timeout: '10-50', + }) + $.ajax({ + url: url, + dataType: 'json' + }).done(function(data /*, textStatus, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, function(options) )', function() { + it('', function(done) { + var that = this + var url = 'rurl_function.json' + + Mock.mock(/rurl_function\.json/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + }) + + $.ajax({ + url: url, + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, function(options) ) + GET + data', function() { + it('', function(done) { + var that = this + var url = 'rurl_function.json' + + Mock.mock(/rurl_function\.json/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url + '?foo=1') + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + }) + + $.ajax({ + url: url, + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, function(options) ) + POST + data', function() { + it('', function(done) { + var that = this + var url = 'rurl_function.json' + + Mock.mock(/rurl_function\.json/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(options.type).to.be.equal('POST') + expect(options.body).to.be.equal('foo=1') + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + }) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += url + ' => ' + stringify(data) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + }) + }).fail(function(jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown) + }).always(function() { + done() + }) + }) + }) + + describe('Mock.mock( rurl, rtype, template )', function() { + it('', function(done) { + var that = this + var url = 'rurl_rtype_template.json' + var count = 0 + + Mock.mock(/rurl_rtype_template\.json/, 'get', { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL', + type: 'get' + }] + }) + Mock.mock(/rurl_rtype_template\.json/, 'post', { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL', + type: 'post' + }] + }) + + $.ajax({ + url: url, + type: 'get', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'GET ' + url + ' => ' + stringify(data) + ' ' + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + expect(item).to.have.property('type').equal('get') + }) + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'POST ' + url + ' => ' + stringify(data) + ' ' + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + _.each(data.list, function(item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) + expect(item).to.have.property('type').equal('post') + }) + }).done(success).always(complete) + + function success( /*data*/ ) { + count++ + } + + function complete() { + if (count === 2) done() + } + + }) + }) + + describe('Mock.mock( rurl, rtype, function(options) )', function() { + it('', function(done) { + var that = this + var url = 'rurl_rtype_function.json' + var count = 0 + + Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return { + type: 'get' + } + }) + Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(['POST', 'PUT']).to.include(options.type) + expect(options.body).to.be.equal(null) + return { + type: options.type.toLowerCase() + } + }) + + $.ajax({ + url: url, + type: 'get', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'GET ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'get') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'POST ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'post') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'put', + dataType: 'json' + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'PUT ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'put') + }).done(success).always(complete) + + + function success( /*data*/ ) { + count++ + } + + function complete() { + if (count === 3) done() + } + + }) + }) + describe('Mock.mock( rurl, rtype, function(options) ) + data', function() { + it('', function(done) { + var that = this + var url = 'rurl_rtype_function.json' + var count = 0 + + Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url + '?foo=1') + expect(options.type).to.be.equal('GET') + expect(options.body).to.be.equal(null) + return { + type: 'get' + } + }) + Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { + expect(options).to.not.equal(undefined) + expect(options.url).to.be.equal(url) + expect(['POST', 'PUT']).to.include(options.type) + expect(options.body).to.be.equal('foo=1') + return { + type: options.type.toLowerCase() + } + }) + + $.ajax({ + url: url, + type: 'get', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'GET ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'get') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'POST ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'post') + }).done(success).always(complete) + + $.ajax({ + url: url, + type: 'put', + dataType: 'json', + data: { + foo: 1 + } + }).done(function(data /*, status, jqXHR*/ ) { + that.test.title += 'PUT ' + url + ' => ' + stringify(data) + expect(data).to.have.property('type', 'put') + }).done(success).always(complete) + + + function success( /*data*/ ) { + count++ + } + + function complete() { + if (count === 3) done() + } + + }) + }) + describe('#105 addEventListener', function() { + it('addEventListene => addEventListener', function(done) { + var xhr = new Mock.XHR() + expect(xhr.addEventListener).to.not.equal(undefined) + expect(xhr.addEventListene).to.equal(undefined) + done() + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.schema.js b/test/test.mock.schema.js new file mode 100644 index 00000000..ccffdeeb --- /dev/null +++ b/test/test.mock.schema.js @@ -0,0 +1,205 @@ +/* global require, chai, describe, before, it */ +/* global window */ +// 数据占位符定义(Data Placeholder Definition,DPD) +var expect = chai.expect +var Mock, $, _ + +describe('Schema', function() { + before(function(done) { + require(['mock', 'underscore', 'jquery'], function() { + Mock = arguments[0] + window.XMLHttpRequest = Mock.XHR + _ = arguments[1] + $ = arguments[2] + expect(Mock).to.not.equal(undefined) + expect(_).to.not.equal(undefined) + expect($).to.not.equal(undefined) + done() + }) + }) + + function stringify(json) { + return JSON.stringify(json /*, null, 4*/ ) + } + + function doit(template, validator) { + it('', function() { + var schema = Mock.toJSONSchema(template) + this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) + validator(schema) + }) + } + + describe('Type', function() { + doit(1, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'number') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit(true, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'boolean') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit('', function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'string') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit(function() {}, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'function') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit(/\d/, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'regexp') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + }) + doit([], function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'array') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + expect(schema).to.have.property('items').with.length(0) + }) + doit({}, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + for (var n in schema.rule) { + expect(schema.rule[n]).to.be.null() + } + expect(schema).to.have.property('properties').with.length(0) + }) + + }) + + describe('Object', function() { + doit({ + a: { + b: { + c: { + d: {} + } + } + } + }, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + + var properties; + + // root.properties + properties = schema.properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'a') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.properties + properties = properties[0].properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'b') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.b.properties + properties = properties[0].properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'c') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.b.c.properties + properties = properties[0].properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('name', 'd') + expect(properties[0]).to.have.property('type', 'object') + + // root.a.b.c.d.properties + properties = properties[0].properties + expect(properties).to.with.length(0) + }) + + }) + + describe('Array', function() { + doit([ + [ + ['foo', 'bar'] + ] + ], function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'array') + + var items; + + // root.items + items = schema.items + expect(items).to.with.length(1) + expect(items[0]).to.have.property('type', 'array') + + // root[0].items + items = items[0].items + expect(items).to.with.length(1) + expect(items[0]).to.have.property('type', 'array') + + // root[0][0].items + items = items[0].items + expect(items).to.with.length(2) + expect(items[0]).to.have.property('type', 'string') + expect(items[1]).to.have.property('type', 'string') + }) + }) + + describe('String Rule', function() { + doit({ + 'string|1-10': '★' + }, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + + var properties; + // root.properties + properties = schema.properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('type', 'string') + expect(properties[0].rule).to.have.property('min', 1) + expect(properties[0].rule).to.have.property('max', 10) + }) + doit({ + 'string|3': 'value', + }, function(schema) { + expect(schema.name).to.be.an('undefined') + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object') + + var properties; + // root.properties + properties = schema.properties + expect(properties).to.with.length(1) + expect(properties[0]).to.have.property('type', 'string') + expect(properties[0].rule).to.have.property('min', 3) + expect(properties[0].rule.max).to.be.an('undefined') + }) + }) + +}) \ No newline at end of file diff --git a/test/test.mock.spec.dpd.js b/test/test.mock.spec.dpd.js new file mode 100644 index 00000000..24648a77 --- /dev/null +++ b/test/test.mock.spec.dpd.js @@ -0,0 +1,245 @@ +/* global require, chai, describe, before, it */ +// 数据占位符定义(Data Placeholder Definition,DPD) +var expect = chai.expect +var Mock, $, _ + +describe('DPD', function() { + before(function(done) { + require(['mock', 'underscore', 'jquery'], function() { + Mock = arguments[0] + _ = arguments[1] + $ = arguments[2] + expect(Mock).to.not.equal(undefined) + expect(_).to.not.equal(undefined) + expect($).to.not.equal(undefined) + done() + }) + }) + describe('Reference', function() { + it('@EMAIL', function() { + var data = Mock.mock(this.test.title) + expect(data).to.not.equal(this.test.title) + }) + }) + describe('Priority', function() { + it('@EMAIL', function() { + var data = Mock.mock({ + email: 'nuysoft@gmail.com', + name: '@EMAIL' + }) + this.test.title += ' => ' + data.name + expect(data.name).to.not.equal(data.email) + }) + it('@email', function() { + var data = Mock.mock({ + email: 'nuysoft@gmail.com', + name: '@email' + }) + this.test.title += ' => ' + data.name + expect(data.name).to.equal(data.email) + }) + }) + describe('Escape', function() { + it('\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + it('\\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + it('\\\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + it('\\\\@EMAIL', function() { + var data = Mock.mock(this.test.title) + this.test.title += ' => ' + data + expect(data).to.not.equal(this.test.title) + }) + }) + describe('Path', function() { + it('Absolute Path', function() { + var data = Mock.mock({ + id: '@UUID', + children: [{ + parentId: '@/id' + }], + child: { + parentId: '@/id' + } + }) + expect(data.children[0]).to.have.property('parentId', data.id) + expect(data.child).to.have.property('parentId', data.id) + }) + it('Relative Path', function() { + var data = Mock.mock({ + id: '@UUID', + children: [{ + parentId: '@../../id' + }], + child: { + parentId: '@../id' + } + }) + expect(data.children[0]).to.have.property('parentId', data.id) + expect(data.child).to.have.property('parentId', data.id) + }) + + it('Relative Path Fallback in Corner Case', function() { + const STRING = 'https://test.org/@a/build/test.html' + var data = Mock.mock({ + a: STRING + }) + expect(data.a).to.equal(STRING) + }) + }) + describe('Complex', function() { + var tpl = { + basics: { + boolean1: '@BOOLEAN', + boolean2: '@BOOLEAN(1, 9, true)', + + natural1: '@NATURAL', + natural2: '@NATURAL(10000)', + natural3: '@NATURAL(60, 100)', + + integer1: '@INTEGER', + integer2: '@INTEGER(10000)', + integer3: '@INTEGER(60, 100)', + + float1: '@FLOAT', + float2: '@FLOAT(0)', + float3: '@FLOAT(60, 100)', + float4: '@FLOAT(60, 100, 3)', + float5: '@FLOAT(60, 100, 3, 5)', + + character1: '@CHARACTER', + character2: '@CHARACTER("lower")', + character3: '@CHARACTER("upper")', + character4: '@CHARACTER("number")', + character5: '@CHARACTER("symbol")', + character6: '@CHARACTER("aeiou")', + + string1: '@STRING', + string2: '@STRING(5)', + string3: '@STRING("lower",5)', + string4: '@STRING(7, 10)', + string5: '@STRING("aeiou", 1, 3)', + + range1: '@RANGE(10)', + range2: '@RANGE(3, 7)', + range3: '@RANGE(1, 10, 2)', + range4: '@RANGE(1, 10, 3)', + + date: '@DATE', + time: '@TIME', + + datetime1: '@DATETIME', + datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")', + datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")', + datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")', + datetime5: '@DATETIME("y-MM-dd HH:mm:ss")', + datetime6: '@DATETIME("y-M-d H:m:s")', + + now: '@NOW', + nowYear: '@NOW("year")', + nowMonth: '@NOW("month")', + nowDay: '@NOW("day")', + nowHour: '@NOW("hour")', + nowMinute: '@NOW("minute")', + nowSecond: '@NOW("second")', + nowWeek: '@NOW("week")', + nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")' + }, + image: { + image1: '@IMAGE', + image2: '@IMAGE("100x200", "#000")', + image3: '@IMAGE("100x200", "#000", "hello")', + image4: '@IMAGE("100x200", "#000", "#FFF", "hello")', + image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")', + + dataImage1: '@DATAIMAGE', + dataImage2: '@DATAIMAGE("200x100")', + dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")' + }, + color: { + color: '@COLOR', + render: function() { + $('.header').css('background', this.color) + } + }, + text: { + title1: '@TITLE', + title2: '@TITLE(5)', + title3: '@TITLE(3, 5)', + + word1: '@WORD', + word2: '@WORD(5)', + word3: '@WORD(3, 5)', + + sentence1: '@SENTENCE', + sentence2: '@SENTENCE(5)', + sentence3: '@SENTENCE(3, 5)', + + paragraph1: '@PARAGRAPH', + paragraph2: '@PARAGRAPH(2)', + paragraph3: '@PARAGRAPH(1, 3)' + }, + name: { + first: '@FIRST', + last: '@LAST', + name1: '@NAME', + name2: '@NAME(true)' + }, + web: { + url: '@URL', + domain: '@DOMAIN', + email: '@EMAIL', + ip: '@IP', + tld: '@TLD', + }, + address: { + region: '@REGION', + province: '@PROVINCE', + city: '@CITY', + county: '@COUNTY' + }, + miscellaneous: { + guid: '@GUID', + id: '@ID', + 'increment1|3': [ + '@INCREMENT' + ], + 'increment2|3': [ + '@INCREMENT(10)' + ] + }, + helpers: { + capitalize1: '@CAPITALIZE()', + capitalize2: '@CAPITALIZE("hello")', + + upper1: '@UPPER', + upper2: '@UPPER("hello")', + + lower1: '@LOWER', + lower2: '@LOWER("HELLO")', + + pick1: '@PICK', + pick2: '@PICK("abc")', + pick3: '@PICK(["a", "b", "c"])', + + shuffle1: '@SHUFFLE', + shuffle2: '@SHUFFLE(["a", "b", "c"])' + } + } + it('', function() { + var data = Mock.mock(tpl) + // this.test.title += JSON.stringify(data, null, 4) + expect(data).to.be.a('object') + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.spec.dtd.js b/test/test.mock.spec.dtd.js new file mode 100644 index 00000000..44fe72d5 --- /dev/null +++ b/test/test.mock.spec.dtd.js @@ -0,0 +1,677 @@ +/* global require, chai, describe, before, it */ +// 数据模板定义(Data Temaplte Definition,DTD) +/* + ## BDD + 1. 结构 + describe suite + [ describe ] + before after beforeEach afterEach + it test + done + 搜索 this.async = fn && fn.length + 2. 常用 expect + expect().to + .equal .deep.equal .not.equal + .match + .have.length .with.length + .have.property .have.deep.property + .to.be.a .to.be.an + .that + .least .most .within + 3. 速度 + 搜索 test.speed + slow > 75 + 75 / 2 < medium < 75 + fast < 75 / 2 + */ +var expect = chai.expect +var Mock, $, _ + +describe('DTD', function() { + before(function(done) { + require(['mock', 'underscore', 'jquery'], function() { + Mock = arguments[0] + _ = arguments[1] + $ = arguments[2] + expect(Mock).to.not.equal(undefined) + expect(_).to.not.equal(undefined) + expect($).to.not.equal(undefined) + done() + }) + }) + describe('Literal', function() { + it('', function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it('foo', function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it(1, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it(true, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it(false, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(this.test.title) + }) + it({}, function() { + var data = Mock.mock(this.test.title) + expect(data).to.deep.equal(this.test.title) + }) + it([], function() { + var data = Mock.mock(this.test.title) + expect(data).to.deep.equal(this.test.title) + }) + it(function() {}, function() { + var data = Mock.mock(this.test.title) + expect(data).to.equal(undefined) + }) + }) + describe('String', function() { + // `'name|min-max': 'value'` + it('name|min-max', function() { + var data = Mock.mock({ + 'name|1-10': '★号' + }) + expect(data.name).to.have.length.within(2, 20) + }) + + // `'name|count': 'value'` + it('name|count', function() { + var data = Mock.mock({ + 'name|10': '★号' + }) + expect(data.name).to.be.a('string') + .that.have.length(20) + }) + }) + describe('Number', function() { + // `'name|+step': value` + it('name|+step', function() { + var data = Mock.mock({ + 'list|10': [{ + 'name|+1': 100 + }] + }) + expect(data.list).to.be.an('array').with.length(10) + _.each(data.list, function(item, index) { + expect(item).to.have.property('name') + .that.be.a('number') + if (index === 0) expect(item.name).to.equal(100) + else expect(item.name).to.equal( + data.list[index - 1].name + 1 + ) + }) + }) + + // `'name|min-max': value` + it('name|min-max', function() { + var data = Mock.mock({ + 'name|1-100': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(1, 100) + }) + it('name|max-min', function() { + var data = Mock.mock({ + 'name|100-1': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(1, 100) + }) + it('name|-min--max', function() { + var data = Mock.mock({ + 'name|-100--1': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(-100, -1) + }) + it('name|-max--min', function() { + var data = Mock.mock({ + 'name|-1--100': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').within(-100, -1) + }) + it('name|min-min', function() { + var data = Mock.mock({ + 'name|10-10': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').equal(10) + }) + it('name|count', function() { + var data = Mock.mock({ + 'name|10': 100 + }) + expect(data).to.have.property('name') + .that.be.a('number').equal(10) + }) + + // `'name|min-max.dmin-dmax': value` + + // 1 整数部分 2 小数部分 + var RE_FLOAT = /([\+\-]?\d+)\.?(\d+)?/ + + function validNumber(number, min, max, dmin, dmax) { + expect(number).to.be.a('number') + RE_FLOAT.lastIndex = 0 + var parts = RE_FLOAT.exec('' + number) + expect(+parts[1]).to.be.a('number').within(min, max) + expect(parts[2]).to.have.length.within(dmin, dmax) + } + + it('name|min-max.dmin-dmax', function() { + var data = Mock.mock({ + 'name|1-10.1-10': 123.456 + }) + validNumber(data.name, 1, 10, 1, 10) + }) + it('name|min-max.dcount', function() { + var data = Mock.mock({ + 'name|1-10.10': 123.456 + }) + validNumber(data.name, 1, 10, 10, 10) + }) + it('name|count.dmin-dmax', function() { + var data = Mock.mock({ + 'name|10.1-10': 123.456 + }) + validNumber(data.name, 10, 10, 1, 10) + }) + it('name|count.dcount', function() { + var data = Mock.mock({ + 'name|10.10': 123.456 + }) + validNumber(data.name, 10, 10, 10, 10) + }) + it('name|.dmin-dmax', function() { + var data = Mock.mock({ + 'name|.1-10': 123.456 + }) + validNumber(data.name, 123, 123, 1, 10) + }) + it('name|.dcount', function() { + var data = Mock.mock({ + 'name|.10': 123.456 + }) + validNumber(data.name, 123, 123, 10, 10) + }) + }) + describe('Boolean', function() { + // `'name|1': value` + it('name|1', function() { + var data = Mock.mock({ + 'name|1': true + }) + expect(data).to.have.property('name') + .that.be.a('boolean') + }) + + // `'name|min-max': value` + it('name|min-max', function() { + var data = Mock.mock({ + 'name|8-2': true + }) + expect(data).to.have.property('name') + .that.be.a('boolean') + }) + }) + describe('Object', function() { + var methods = { + GET: '@URL', + POST: '@URL', + HEAD: '@URL', + PUT: '@URL', + DELETE: '@URL' + } + var methodCount, tpl, data + + // `'name|min-max': {}` + it('name|min-max', function() { + methodCount = _.keys(methods).length // 5 + for (var min = 0, max; min <= methodCount + 1; min++) { + tpl = {} + max = Mock.Random.integer(0, methodCount) + + // methods|0-? |1-? |2-? |3-? |4-? |5-? |6-? + tpl['methods|' + min + '-' + max] = methods + data = Mock.mock(tpl) + expect(_.keys(data.methods)).to.have.length + .that.within(Math.min(min, max), Math.max(min, max)) + } + }) + + // `'name|count': {}` + it('name|count', function() { + methodCount = _.keys(methods).length // 5 + for (var count = 0; count <= methodCount + 1; count++) { + tpl = {} + tpl['methods|' + count] = methods + data = Mock.mock(tpl) + expect(_.keys(data.methods)).to.have.length( + Math.min(count, methodCount) + ) + } + }) + }) + describe('Array', function() { + // `'name': [{}, {} ...]` + it('name', function() { + var value = [{ + foo: 'foo' + }, { + bar: 'bar' + }, { + foobar: 'foobar' + }] + var data = Mock.mock({ + name: value + }) + expect(data).to.have.property('name') + .that.be.an('array').with.length(3) + .that.not.equal(value) + expect(data).to.have.property('name') + + for (var i = 0; i < data.name.length; i++) { + expect(data.name[i]).to.not.equal(value[i]) + expect(data.name[i]).to.deep.equal(value[i]) + } + }) + + // `'name|1': [{}, {} ...]` + it('name|1: [1, 2, 4, 8]', function() { + // number array + var value = [1, 2, 4, 8] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('number') + expect(value).to.include(data.name) + }) + it('name|1: ["GET", "POST", "HEAD", "DELETE"]', function() { + // string array + var value = ['GET', 'POST', 'HEAD', 'DELETE'] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('string') + expect(value).to.include(data.name) + }) + it('name|1 [{}]', function() { + // object array + var value = [{}] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('object') + .that.deep.equal({}) + expect(data.name).to.not.equal(value[0]) + }) + it('name|1 [{}, {}, {}]', function() { + // object array + var data = Mock.mock({ + 'name|1': [{}, {}, {}] + }) + expect(data).to.have.property('name') + .that.be.a('object') + .that.deep.equal({}) + }) + it('name|1 [{}, {}, {}]', function() { + // object array + var value = [{ + method: 'GET' + }, { + method: 'POST' + }, { + method: 'HEAD' + }, { + method: 'DELETE' + }] + var data = Mock.mock({ + 'name|1': value + }) + expect(data).to.have.property('name') + .that.be.a('object') + .that.have.property('method') + .that.be.a('string') + expect(_.pluck(value, 'method')).include(data.name.method) + }) + + // `'name|+1': [{}, {} ...]` + it('name|+1: ["a", "b", "c"]', function() { + var data = Mock.mock({ + 'list|5': [{ + 'name|+1': ['a', 'b', 'c'] + }] + }) + expect(data).to.have.property('list') + .that.be.an('array').with.length(5) + expect(data.list[0].name).to.equal('a') + expect(data.list[1].name).to.equal('b') + expect(data.list[2].name).to.equal('c') + expect(data.list[3].name).to.equal('a') + expect(data.list[4].name).to.equal('b') + }) + it('name|+1: ["@integer", "@email", "@boolean"]', function() { + var data = Mock.mock({ + 'list|5-10': [{ + 'name|+1': ['@integer', '@email', '@boolean'] + }] + }) + expect(data).to.have.property('list') + .that.be.an('array').have.length.within(5, 10) + expect(data.list[0].name).to.be.a('number') + expect(data.list[1].name).to.be.a('string') + expect(data.list[2].name).to.be.a('boolean') + expect(data.list[3].name).to.be.a('number') + expect(data.list[4].name).to.be.a('string') + }) + + // `'name|min-max': [{}, {} ...]` + it('name|min-min', function() { + var data = Mock.mock({ + 'name|1-1': [{}] + }) + expect(data.name).to.be.an('array').with.length(1) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|min-max [{}]', function() { + var data = Mock.mock({ + 'name|1-10': [{}] + }) + expect(data.name).to.be.an('array').with.length.within(1, 10) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|max-min [{}]', function() { + var data = Mock.mock({ + 'name|10-1': [{}] + }) + expect(data.name).to.be.an('array').with.length.within(1, 10) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|min-max [{}, {}]', function() { + var data = Mock.mock({ + 'name|1-10': [{}, {}] + }) + expect(data.name).to.be.an('array').with.length.within(2, 20) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|max-min [{}, {}]', function() { + var data = Mock.mock({ + 'name|10-1': [{}, {}] + }) + expect(data.name).to.be.an('array').with.length.within(2, 20) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + + // `'name|count': [{}, {} ...]` + it('name|count [{}]', function() { + var data = Mock.mock({ + 'name|10': [{}] + }) + expect(data.name).to.be.an('array').with.length(10) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + it('name|count [{}, {}]', function() { + var data = Mock.mock({ + 'name|10': [{}, {}] + }) + expect(data.name).to.be.an('array').with.length(20) + _.each(data.name, function(item /*, index*/ ) { + expect(item).to.deep.equal({}) + }) + }) + }) + describe('Function', function() { + // `'name': function(){}` + it('name: function', function() { + var data = Mock.mock({ + prop: 'hello', + name: function( /*root, path*/ ) { + return this.prop + } + }) + expect(data).to.have.property('name') + .that.be.a('string').equal('hello') + }) + + // 无序的 function + it('name: function', function() { + var data = Mock.mock({ + name2: function() { + return this.prop * 2 + }, + prop: 1, + name4: function() { + return this.prop * 4 + } + }) + expect(data.name2).to.equal(2) + expect(data.name4).to.equal(4) + }) + + // #25 改变了非函数属性的顺序,查找起来不方便 + it('name: function', function() { + var data = Mock.mock({ + name: function() {}, + first: '', + second: '', + third: '' + }) + var keys = _.keys(data) + expect(keys[0]).equal('first') + expect(keys[1]).equal('second') + expect(keys[2]).equal('third') + expect(keys[3]).equal('name') + }) + }) + + /* + 按照 http://www.regexr.com/ 的 Reference 设计测试用例。 + https://github.com/nuysoft/Mock/blob/7c1e3a686bcc515855f1f583d70ae0ee89acc65e/test/regexp.js#L120 + */ + describe('RegExp', function() { + function validRegExp(regexp) { + if (arguments.length > 1) { + for (var i = 0; i < arguments.length; i++) { + validRegExp(arguments[i]) + } + } + + it(regexp, function() { + var data = Mock.mock(regexp) + this.test.title += ' => ' + data + expect(regexp.test(data)).to.be.true + }) + } + + describe('Character Classes', function() { + validRegExp(/./) + validRegExp( + /[a-z]/, + /[A-Z]/, + /[0-9]/ + ) + validRegExp( + /\w/, + /\W/, + /\s/, + /\S/, + /\d/, + /\D/ + ) + validRegExp( + /[.]/, + /[\w]/, + /[\W]/, + /[\s]/, + /[\S]/, + /[\d]/, + /[\D]/ + ) + validRegExp( + /[^.]/, + /[^\w]/, + /[^\W]/, + /[^\s]/, + /[^\S]/, + /[^\d]/, + /[^\D]/ + ) + }) + describe('Quantifiers', function() { + validRegExp( + /\d?/, + /\d+/, + /\d*/ + ) + + // {n}, {n,}, {n,m}, {0,1} ?, {1,0} +, {0,} * + validRegExp( + /\d{5}/, + /\d{5,}/, + /\d{5,10}/, + /\d{0,1}/, + /\d{0,}/ + ) + + validRegExp(/[\u4E00-\u9FA5]+/) // 汉字 + }) + describe('Anchors', function() { + validRegExp(/^/) + validRegExp(/$/) + validRegExp(/^foo/) + validRegExp(/foo$/) + validRegExp(/\bfoo/) + validRegExp(/\Bfoo/) + }) + + describe('Escaped Characters', function() { + validRegExp(/\000/) + validRegExp(/\xFF/) + validRegExp(/\uFFFF/) + validRegExp(/\cI/) + }) + + describe('Groups & Lookaround', function() { + validRegExp(/(ABC)/) + validRegExp(/(ABC)\1/) + validRegExp(/(?:ABC)/) + validRegExp(/(?=ABC)/) + validRegExp(/(?!ABC)/) + // validRegExp(/(?<=ABC)/) + // validRegExp(/(? Date: Tue, 30 Jan 2024 08:42:08 +0000 Subject: [PATCH 43/65] chore: null --- dist/Mock.min.js | 51 - dist/mock.cjs.js | 24 +- dist/mock.esm.js | 24 +- dist/mock.min.js | 51 + package.json | 6 +- pnpm-lock.yaml | 3794 +++++++++++++++++ rollup.config.cjs.dev.js | 35 - rollup.config.dev.js | 37 - src/mock/schema/schema.js | 4 +- src/mock/xhr/XMLHttpRequest/xhr.js | 6 +- test/common.test.js | 6 - test/fakeServer.js | 23 - test/index.css | 44 - test/index.html | 21 - test/test.js | 750 ---- ...ock.schema.js => test.mock.schema.test.js} | 97 +- vite.config.ts | 5 + yarn.lock | 2811 ------------ 18 files changed, 3926 insertions(+), 3863 deletions(-) delete mode 100644 dist/Mock.min.js create mode 100644 dist/mock.min.js create mode 100644 pnpm-lock.yaml delete mode 100644 rollup.config.cjs.dev.js delete mode 100644 rollup.config.dev.js delete mode 100644 test/common.test.js delete mode 100644 test/fakeServer.js delete mode 100644 test/index.css delete mode 100644 test/index.html delete mode 100644 test/test.js rename test/{test.mock.schema.js => test.mock.schema.test.js} (68%) create mode 100644 vite.config.ts delete mode 100644 yarn.lock diff --git a/dist/Mock.min.js b/dist/Mock.min.js deleted file mode 100644 index fa9abb7a..00000000 --- a/dist/Mock.min.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++W>=800)return arguments[0]}else W=0;return G.apply(void 0,arguments)}),V=/^(?:0|[1-9]\d*)$/;function X(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&V.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function oe(e){return null!=e&&ae(e.length)&&!R(e)}function ue(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?oe(t)&&X(n,t.length):"string"==r&&n in t)&&Q(t[n],e)}var le=Object.prototype;function ce(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||le)}function ie(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=De.length>3&&"function"==typeof a?(r--,a):void 0,o&&ue(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function tn(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Te(e))}var rn=Ce&&Ce.isRegExp,an=rn?ve(rn):function(e){return s(e)&&"[object RegExp]"==h(e)},on=Math.floor,un=Math.random;function ln(e,n){return e+on(un()*(n-e+1))}var cn=parseFloat,hn=Math.min,sn=Math.random;function fn(e,n,t){if(t&&"boolean"!=typeof t&&ue(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=E(e),void 0===n?(n=e,e=0):n=E(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=sn();return hn(e+a*(n-e+cn("1e-"+((a+"").length-1))),n)}return ln(e,n)}var mn=Math.ceil,dn=Math.max;var pn,bn=function(e,n,t){return t&&"number"!=typeof t&&ue(e,n,t)&&(n=t=void 0),e=E(e),void 0===n?(n=e,e=0):n=E(n),function(e,n,t,r){for(var a=-1,o=dn(mn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=En,a=On(e,En);e-=En;for(var o=ie(a,n="function"==typeof(t=n)?t:S);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=fn(t,r,!1);return parseFloat(fn(e,n,!0).toFixed(a))},In=function(e,n,t=!1){return t?fn(0,e+n)>e?!t:t:fn(10,-10)>0},Bn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Bn.alpha=Bn.lower+Bn.upper,Bn.default=Bn.lower+Bn.upper+Bn.number+Bn.symbol;const Un=function(e="default"){return Bn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Bn[e.toLowerCase()]),yn(e)},Gn=function(...e){let n,t,r,a;switch(e.length){case 0:n=Hn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Hn(r,a));break;case 3:[t,r,a]=e,n=Hn(r,a)}return Sn(n,(()=>Un(t))).join("")};function Wn(e,n){return e(n={exports:{}},n.exports),n.exports}var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Wn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Yn=Wn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Jn[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Kn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Kn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Kn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Kn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Yn.to,Yn.get;var Vn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Xn=Wn((function(e){var n={};for(var t in Vn)Vn.hasOwnProperty(t)&&(n[Vn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Vn)if(Vn.hasOwnProperty(l)){var c=Vn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Zn(e){var n=function(){for(var e={},n=Object.keys(Xn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var tt=nt,rt=[].slice,at=["keyword","gray","hex"],ot={};Object.keys(tt).forEach((function(e){ot[rt.call(tt[e].labels).sort().join("")]=e}));var ut={};function lt(e,n){if(!(this instanceof lt))return new lt(e,n);if(n&&n in at&&(n=null),n&&!(n in tt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof lt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Yn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=tt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=tt[this.model].channels;var o=rt.call(e,0,r);this.color=st(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in ot))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=ot[l];var c=tt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return lt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return lt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(tt).forEach((function(e){if(-1===at.indexOf(e)){var n=tt[e].channels;lt.prototype[e]=function(){if(this.model===e)return new lt(this);if(arguments.length)return new lt(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new lt(ht(tt[this.model][e].raw(this.color)).concat(t),e)},lt[e]=function(t){return"number"==typeof t&&(t=st(rt.call(arguments),n)),new lt(t,e)}}}));var ft=lt,mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const dt=function(e,...n){let t,r,a;switch(n.length){case 0:return yn(e);case 1:return[a]=n,An(e,a);case 2:return[t,r]=n,An(e,fn(t,r))}},pt=function(e,n,t){const r=jn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},bt={},xt=function(...e){1===e.length&&(e=e[0]);const n=xt.options.context.templatePath.join("."),t=bt[n]=bt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var gt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let yt;function vt(e,n){return yt=yt||Math.random(),yt+=.618033988749895,yt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),ft.hsv(360*yt,100*e,100*n)}function wt(){return vt().hex()}var kt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:At,lastName:Ct,cfirstName:Mt,clastName:jt}=kt;function Et(){const e=At.male.concat();return dt(e)}function Ot(){return dt(Ct)}function St(){return dt(Mt)}function Rt(){return dt(jt)}var Tt,Ft=new Uint8Array(16);function _t(){if(!Tt&&!(Tt="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Tt(Ft)}var Dt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function $t(e){return"string"==typeof e&&Dt.test(e)}for(var qt=[],Pt=0;Pt<256;++Pt)qt.push((Pt+256).toString(16).substr(1));function zt(e,n,t){var r=(e=e||{}).random||(e.rng||_t)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(qt[e[n+0]]+qt[e[n+1]]+qt[e[n+2]]+qt[e[n+3]]+"-"+qt[e[n+4]]+qt[e[n+5]]+"-"+qt[e[n+6]]+qt[e[n+7]]+"-"+qt[e[n+8]]+qt[e[n+9]]+"-"+qt[e[n+10]]+qt[e[n+11]]+qt[e[n+12]]+qt[e[n+13]]+qt[e[n+14]]+qt[e[n+15]]).toLowerCase();if(!$t(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var Lt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Ht=Object.keys(Lt),Nt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(Lt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Ht.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var It={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Bt=new RegExp(`(${Object.keys(It).join("|")})`,"g");function Ut(e="yyyy-MM-dd"){return Gt(Wt(),e)}function Gt(e,n){return n.replace(Bt,(function n(t,r){const a=It[r];return"function"==typeof a?a(e):a in It?n(t,a):e[a]()}))}function Wt(e=new Date(0),n=new Date){return new Date(Ln(e.getTime(),n.getTime()))}let Jt=0;const Kt=function(e){return Jt+=+e||1},Yt=Kt;function Vt(e=12,n=18){return en(Sn(fn(e,n),(()=>Xt())).join(" "))+"."}function Xt(e=3,n=10){return Sn(fn(e,n),(()=>Un("lower"))).join("")}function Zt(e=12,n=18){return Sn(fn(e,n),(()=>Qt())).join("")+"。"}function Qt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Hn(n,t));break;case 3:[a,n,t]=e,r=Hn(n,t)}return An(a,r).join("")}const er="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),nr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function tr(){return dt(er)}function rr(e){return`${Xt()}.${e||ar()}`}function ar(){return dt(nr)}var or={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},ur={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:lr,_screenSize:cr,_videoSize:ir}=or,hr=Object.keys(ur);function sr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=dt(lr)),r=(r||wt()).replace(/^#/,""),t=(t||wt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const fr=["东北","华北","华东","华中","华南","西南","西北"];function mr(e){let n;switch(Rn(e)){case"array":n=e;break;default:n=[e]}return n}var dr=Object.freeze({__proto__:null,integer:Ln,isNumber:Pn,random:fn,natural:Hn,int:Ln,float:Nn,boolean:In,bool:In,character:Un,char:Un,string:Gn,str:Gn,range:bn,color:function(e){return e||mt[e]?mt[e].nicer:dt(gt).hex},hex:wt,rgb:function(){return vt().hsv().string()},rgba:function(){return vt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return vt().hsl().string()},_goldenRatioColor:vt,first:Et,last:Ot,name:function(e){return e=e?` ${Et()} `:" ",`${Et()}${e}${Ot()}`},cfirst:St,clast:Rt,cname:function(){return St()+Rt()},capitalize:en,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:dt,shuffle:pt,order:xt,d4:function(){return Hn(1,4)},d6:function(){return Hn(1,6)},d8:function(){return Hn(1,8)},d12:function(){return Hn(1,12)},d20:function(){return Hn(1,20)},d100:function(){return Hn(1,100)},guid:function(){return zt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:zt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=dt(Nt).id+Ut("yyyyMMdd")+Gn("number",3);for(let r=0;rVt())).join("\n")},word:Xt,sentence:Vt,title:function(e=3,n=7){return Sn(fn(e,n),(()=>en(Xt()))).join("")},ctitle:function(e=3,n=7){return Sn(fn(e,n),(()=>Qt())).join("")},csentence:Zt,cparagraph:function(e=3,n=7){return Sn(fn(e,n),(()=>Zt())).join("\n")},cword:Qt,protocol:tr,domain:rr,tld:ar,email:function(e){return`${Un("lower")}.${Xt()}@${e||Xt()+"."+ar()}`},ip:function(){return[...Array(4)].map((()=>Hn(0,255))).join(".")},url:function(e,n){return`${e||tr()}://${n||rr()}/${Xt()}`},_patternLetters:It,_rformat:Bt,_formatDate:Gt,_randomDate:Wt,time:function(e="HH:mm:ss"){return Ut(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Ut(e)},date:Ut,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return Gt(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Wt(e,n).getTime():Wt().getTime()},_adSize:lr,_screenSize:cr,_videoSize:ir,image:sr,img:sr,_brandColors:ur,_brandNames:hr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=dt(lr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=ur[dt(hr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return dt(fr)},province:function(){return dt(Nt).name},city:function(e){const n=dt(Nt),t=dt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=dt(Nt),t=dt(n.children),r=dt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Hn(0,9);return n},genFile:function(e){return new File(mr(e),Xt())},genBlob:function(e){return new Blob(mr(e))}}),pr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function br(e=""){"string"!=typeof e&&(e+="");const n=e.match(pr.RE_KEY),t=n&&n[3]&&n[3].match(pr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Ln(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(pr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Ln(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function xr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=dt(aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=aa(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(aa(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(aa(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function gr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?In(n,e,r):r}function yr(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function vr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=Nn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function wr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=pt(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(pr.RE_KEY,"$1");l[t]=aa(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(pr.RE_KEY);c&&c[2]&&"number"===Rn(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function kr(e){this.type=e,this.offset=kr.offset(),this.text=kr.text()}function Ar(e,n){kr.call(this,"alternate"),this.left=e,this.right=n}function Cr(e){kr.call(this,"match"),this.body=e.filter(Boolean)}function Mr(e,n){kr.call(this,e),this.body=n}function jr(e){Mr.call(this,"capture-group"),this.index=Lr[this.offset]||(Lr[this.offset]=zr++),this.body=e}function Er(e,n){kr.call(this,"quantified"),this.body=e,this.quantifier=n}function Or(e,n){kr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Sr(e,n){kr.call(this,"charset"),this.invert=e,this.body=n}function Rr(e,n){kr.call(this,"range"),this.start=e,this.end=n}function Tr(e){kr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Fr(e){kr.call(this,"unicode"),this.code=e.toUpperCase()}function _r(e){kr.call(this,"hex"),this.code=e.toUpperCase()}function Dr(e){kr.call(this,"octal"),this.code=e.toUpperCase()}function $r(e){kr.call(this,"back-reference"),this.code=e.toUpperCase()}function qr(e){kr.call(this,"control-character"),this.code=e.toUpperCase()}var Pr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new Ar(e,n[1]):e},me=function(e,n,t){return new Cr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new kr("start")},xe="$",ge='"$"',ye=function(){return new kr("end")},ve=function(e,n){return new Er(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Or(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Or(e,1/0)},_e=function(e){return new Or(e,e)},De="+",$e='"+"',qe=function(){return new Or(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Or(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Or(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new jr(e)},Ze="?:",Qe='"?:"',en=function(e){return new Mr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new Mr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new Mr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new Sr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Rr(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Tr(e)},kn=".",An='"."',Cn=function(){return new kr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new kr("backspace")},Tn=function(){return new kr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new kr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new kr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new kr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new kr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new kr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new kr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new kr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new kr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new kr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new kr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new kr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new kr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new qr(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new $r(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Dr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new _r(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Fr(e.join(""))},qt=function(){return new kr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(kr.offset=r,kr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Hr.gen=function(e,n,t){return t=t||{guid:1},Hr[e.type]?Hr[e.type](e,n,t):Hr.token(e,n,t)},Hr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Un();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return dt(Br.split(""));case"non-digit":return dt((Nr+Ir+Ur).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return dt(Wr.split(""));case"non-white-space":return dt((Nr+Ir+Br).split(""));case"tab":case"vertical-tab":break;case"word":return dt((Nr+Ir+Br).split(""));case"non-word":return dt(Ur.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(In()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Zr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Xr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=aa(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in dr)&&!(u in dr))return e;o=o?o.split(/\s*,\s*/).map((e=>(pr.RE_PLACEHOLDER.exec(""),pr.RE_PLACEHOLDER.test(e)?ea(e,n,t,r):e))):[];const c=dr[a]||dr[u];switch(Rn(c)){case"array":return dt(c);case"function":{c.options=r;const e=c.apply(dr,o)||"";return delete c.options,e}}}function na(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(pr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=ea(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Tn(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?Gn(t):o;return u}var ta=Object.freeze({__proto__:null,array:xr,boolean:gr,function:yr,number:vr,object:wr,regexp:Vr,string:na});let ra=1;function aa(e,n="",t={}){const r={path:t.path||[ra],templatePath:t.templatePath||[ra++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=Rn(e),o=ta[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(pr.RE_KEY,"$1"):n,rule:br(n),context:r}),r.root||(r.root=u),u):e}const oa={gen:aa,extend:Fn};function ua(e,n,t=[]){const r={name:"string"==typeof n?n.replace(pr.RE_KEY,"$1"):n,template:e,type:Rn(e),rule:br.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ua(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ua(e,n,r.path)))}return r}function la(e,n){const t=ua(e),r=ca.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:ea,getValueByKeyPath:Xr,normalizePath:Zr,splitPathToArray:Qr});const ca={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ia.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(pr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ia.equal("type",e.path,Rn(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ia.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(pr.RE_PLACEHOLDER))return r.length===a}return ia.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ia.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ia.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ia.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ia.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ia.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ia.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=$n(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ia.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ia.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ia.equal("properties length",e.path,u.length,o.min,r)):ia.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ia.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ia.message(u),a.push(u),!1}};la.Diff=ca,la.Assert=ia;const ha={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function sa({url:e,type:n}){n=n.toLowerCase();for(const t in ha){const r=ha[t],{rurl:a,rtype:o}=r;if(fa(a,e)&&fa(o,n))return r}return!1}function fa(e,n){switch(Rn(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ma({template:e},n){return R(e)?e(n):aa(e)}const da=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],pa=Symbol("Body internals"),ba=Symbol("Response internals");async function xa(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class ga{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):da(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[pa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[pa].body}get bodyUsed(){return this[pa].disturbed}async arrayBuffer(){return(await xa(this[pa])).arrayBuffer()}async blob(){return xa(this[pa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await xa(this[pa])).text()}}Object.defineProperties(ga.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ya=new Set([301,302,303,307,308]),va=globalThis.window&&globalThis.window.Response||class{};class wa extends ga{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":da(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[pa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ba]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ba].type}get url(){return this[ba].url||""}get status(){return this[ba].status}get ok(){return this[ba].status>=200&&this[ba].status<300}get redirected(){return this[ba].counter>0}get statusText(){return this[ba].statusText}get headers(){return this[ba].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new va(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ya.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new va(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new va(null,{status:0,statusText:""});return e[ba].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(va.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ka=globalThis.window||{},Aa=ka.fetch;async function Ca(e,n={}){if(!0===ka.fetch.$mock){const t=sa({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ma(t,{});return console.warn("mock代理中"),new wa(e,n)}}return console.warn("未使用 mockjs"),Aa(e,n)}var Ma="OK";const ja=function(){},Ea=globalThis.window||{},Oa=void 0!==Ea?Ea.XMLHttpRequest:class{},Sa=Oa.prototype.send||ja,Ra=Oa.prototype.open||ja;class Ta extends Oa{constructor(...e){super(...e)}_send=Sa;_open=Ra;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=sa({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=Ma;const e=ma(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ka.fetch&&!ka.fetch.hasOwnProperty("$mock")&&(ka.fetch=Ca,ka.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Fa=globalThis.window||{};const _a={Handler:oa,Random:dr,Util:qn,XHR:Ta,RE:Yr,toJSONSchema:ua,valid:la,heredoc:Dn,setup:function(e){return Ta.setup(e)},_mocked:ha,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,oa.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Fa.XMLHttpRequest!==Ta&&(Fa.XMLHttpRequest=Ta),ha.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return _a}(); diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js index fce5618e..d47b596c 100644 --- a/dist/mock.cjs.js +++ b/dist/mock.cjs.js @@ -1,20 +1,20 @@ /** * // esm 版本编写人 - * + * * MIT License - * + * * Copyright (c) 2020 动中之动 - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,24 +22,24 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - * + * * // 原始代码编写人 - * + * * The MIT License (MIT) - * + * * Copyright (c) 2015 nuysoft * http://mockjs.com/ - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var qt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys(qt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(qt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(qn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:qn,isNumber:Dn,random:hn,natural:Pn,int:qn,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?qn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||qn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=qr[this.offset]||(qr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",$e='"+"',qe=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},qt=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";const Aa=function(){},Ca=globalThis.window||{},Ma=void 0!==Ca?Ca.XMLHttpRequest:class{},ja=Ma.prototype.send||Aa,Ea=Ma.prototype.open||Aa;class Oa extends Ma{constructor(...e){super(...e)}_send=ja;_open=Ea;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Sa=globalThis.window||{};const Ra={Handler:ta,Random:sr,Util:_n,XHR:Oa,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Oa.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Sa.XMLHttpRequest!==Oa&&(Sa.XMLHttpRequest=Oa),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ra; +"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i="[object Null]",h="[object Undefined]",s=r?r.toStringTag:void 0;function f(e){return null==e?void 0===e?h:i:s&&s in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function m(e){return null!=e&&"object"==typeof e}var d="[object Symbol]";function p(e){return"symbol"==typeof e||m(e)&&f(e)==d}function b(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++ne>=800)return arguments[0]}else ne=0;return ee.apply(void 0,arguments)}),ue=9007199254740991,le=/^(?:0|[1-9]\d*)$/;function ce(e,n){var t=typeof e;return!!(n=null==n?ue:n)&&("number"==t||"symbol"!=t&&le.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=pe}function xe(e){return null!=e&&be(e.length)&&!H(e)}function ge(e,n,t){if(!M(t))return!1;var r=typeof n;return!!("number"==r?xe(t)&&ce(n,t.length):"string"==r&&n in t)&&he(t[n],e)}var ve=Object.prototype;function ye(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ve)}function we(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=We.length>3&&"function"==typeof a?(r--,a):void 0,o&&ge(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function bn(e){return null==e?[]:function(e,n){return b(n,(function(n){return e[n]}))}(e,Ie(e))}var xn=qe&&qe.isRegExp,gn=xn?Fe(xn):function(e){return m(e)&&"[object RegExp]"==f(e)},vn=Math.floor,yn=Math.random;function wn(e,n){return e+vn(yn()*(n-e+1))}var kn=parseFloat,An=Math.min,Cn=Math.random;function Mn(e,n,t){if(t&&"boolean"!=typeof t&&ge(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=_(e),void 0===n?(n=e,e=0):n=_(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=Cn();return An(e+a*(n-e+kn("1e-"+((a+"").length-1))),n)}return wn(e,n)}var jn=Math.ceil,En=Math.max;var On,Sn=function(e,n,t){return t&&"number"!=typeof t&&ge(e,n,t)&&(n=t=void 0),e=_(e),void 0===n?(n=e,e=0):n=_(n),function(e,n,t,r){for(var a=-1,o=En(jn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?eLn)return[];var t,r=Hn,a=Nn(e,Hn);e-=Hn;for(var o=we(a,n="function"==typeof(t=n)?t:D);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=Mn(t,r,!1);return parseFloat(Mn(e,n,!0).toFixed(a))},nt=function(e,n,t=!1){return t?Mn(0,e+n)>e?!t:t:Mn(10,-10)>0},tt={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};tt.alpha=tt.lower+tt.upper,tt.default=tt.lower+tt.upper+tt.number+tt.symbol;const rt=function(e="default"){return tt.hasOwnProperty(e.toLocaleLowerCase())&&(e=tt[e.toLowerCase()]),Fn(e)},at=function(...e){let n,t,r,a;switch(e.length){case 0:n=Qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Qn(r,a));break;case 3:[t,r,a]=e,n=Qn(r,a)}return Bn(n,(()=>rt(t))).join("")};function ot(e,n){return e(n={exports:{}},n.exports),n.exports}var ut={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},lt=ot((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),ct=ot((function(e){var n=Object.hasOwnProperty,t=Object.create(null);for(var r in ut)n.call(ut,r)&&(t[ut[r]]=r);var a=e.exports={to:{},get:{}};function o(e,n,t){return Math.min(Math.max(n,e),t)}function u(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}a.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=a.get.hsl(e),t="hsl";break;case"hwb":n=a.get.hwb(e),t="hwb";break;default:n=a.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},a.get.rgb=function(e){if(!e)return null;var t,r,a,u=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(a=t[2],t=t[1],r=0;r<3;r++){var l=2*r;u[r]=parseInt(t.slice(l,l+2),16)}a&&(u[3]=parseInt(a,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(a=(t=t[1])[3],r=0;r<3;r++)u[r]=parseInt(t[r]+t[r],16);a&&(u[3]=parseInt(a+a,16)/255)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(r=0;r<3;r++)u[r]=parseInt(t[r+1],0);t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(t=e.match(/^(\w+)$/))?"transparent"===t[1]?[0,0,0,0]:n.call(ut,t[1])?((u=ut[t[1]])[3]=1,u):null:null;for(r=0;r<3;r++)u[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}for(r=0;r<3;r++)u[r]=o(u[r],0,255);return u[3]=o(u[3],0,1),u},a.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.to.hex=function(){var e=lt(arguments);return"#"+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(255*e[3])):"")},a.to.rgb=function(){var e=lt(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},a.to.rgb.percent=function(){var e=lt(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},a.to.hsl=function(){var e=lt(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},a.to.hwb=function(){var e=lt(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},a.to.keyword=function(e){return t[e.slice(0,3)]}}));ct.to,ct.get;var it={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ht=ot((function(e){var n={};for(var t in it)it.hasOwnProperty(t)&&(n[it[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in it)if(it.hasOwnProperty(l)){var c=it[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function st(e){var n=function(){for(var e={},n=Object.keys(ht),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var pt=dt,bt=[].slice,xt=["keyword","gray","hex"],gt={};Object.keys(pt).forEach((function(e){gt[bt.call(pt[e].labels).sort().join("")]=e}));var vt={};function yt(e,n){if(!(this instanceof yt))return new yt(e,n);if(n&&n in xt&&(n=null),n&&!(n in pt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof yt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=ct.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=pt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=pt[this.model].channels;var o=bt.call(e,0,r);this.color=At(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in gt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=gt[l];var c=pt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return yt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return yt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(pt).forEach((function(e){if(-1===xt.indexOf(e)){var n=pt[e].channels;yt.prototype[e]=function(){if(this.model===e)return new yt(this);if(arguments.length)return new yt(arguments,e);var t,r="number"==typeof arguments[n]?n:this.valpha;return new yt((t=pt[this.model][e].raw(this.color),Array.isArray(t)?t:[t]).concat(r),e)},yt[e]=function(t){return"number"==typeof t&&(t=At(bt.call(arguments),n)),new yt(t,e)}}}));var Ct=yt,Mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const jt=function(e,...n){let t,r,a;switch(n.length){case 0:return Fn(e);case 1:return[a]=n,qn(e,a);case 2:return[t,r]=n,qn(e,Mn(t,r))}},Et=function(e,n,t){const r=(x(a=e)?Pn:zn)(a);var a;switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},Ot={},St=function(...e){1===e.length&&(e=e[0]);const n=St.options.context.templatePath.join("."),t=Ot[n]=Ot[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let Tt;function Ft(e,n){return Tt=Tt||Math.random(),Tt+=.618033988749895,Tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Ct.hsv(360*Tt,100*e,100*n)}function _t(){return Ft().hex()}var $t={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:Dt,lastName:qt,cfirstName:Pt,clastName:zt}=$t;function Lt(){const e=Dt.male.concat();return jt(e)}function Ht(){return jt(qt)}function Nt(){return jt(Pt)}function Bt(){return jt(zt)}var It,Ut=new Uint8Array(16);function Gt(){if(!It&&!(It="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return It(Ut)}var Wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Jt=[],Kt=0;Kt<256;++Kt)Jt.push((Kt+256).toString(16).substr(1));function Yt(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Jt[e[n+0]]+Jt[e[n+1]]+Jt[e[n+2]]+Jt[e[n+3]]+"-"+Jt[e[n+4]]+Jt[e[n+5]]+"-"+Jt[e[n+6]]+Jt[e[n+7]]+"-"+Jt[e[n+8]]+Jt[e[n+9]]+"-"+Jt[e[n+10]]+Jt[e[n+11]]+Jt[e[n+12]]+Jt[e[n+13]]+Jt[e[n+14]]+Jt[e[n+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Wt.test(e)}(t))throw TypeError("Stringified UUID is invalid");return t}function Vt(e,n,t){var r=(e=e||{}).random||(e.rng||Gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return Yt(r)}var Xt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Zt=Object.keys(Xt),Qt=Object.entries(Xt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})),er=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Qt);var nr={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const tr=new RegExp(`(${Object.keys(nr).join("|")})`,"g");function rr(e="yyyy-MM-dd"){return ar(or(),e)}function ar(e,n){return n.replace(tr,(function n(t,r){const a=nr[r];return"function"==typeof a?a(e):a in nr?n(t,a):e[a]()}))}function or(e=new Date(0),n=new Date){return new Date(Zn(e.getTime(),n.getTime()))}let ur=0;const lr=function(e){return ur+=+e||1},cr=lr;function ir(e=12,n=18){return dn(Bn(Mn(e,n),(()=>hr())).join(" "))+"."}function hr(e=3,n=10){return Bn(Mn(e,n),(()=>rt("lower"))).join("")}function sr(e=12,n=18){return Bn(Mn(e,n),(()=>mr())).join("")+"。"}const fr="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";function mr(...e){let n,t,r=1,a=fr;switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Qn(n,t));break;case 3:[a,n,t]=e,r=Qn(n,t)}return qn(a,r).join("")}const dr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),pr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function br(){return jt(dr)}function xr(e){return`${hr()}.${e||gr()}`}function gr(){return jt(pr)}var vr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},yr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:wr,_screenSize:kr,_videoSize:Ar}=vr,Cr=Object.keys(yr);function Mr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=jt(wr)),r=(r||_t()).replace(/^#/,""),t=(t||_t()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const jr=["东北","华北","华东","华中","华南","西南","西北"];function Er(e){let n;if("array"===In(e))n=e;else n=[e];return n}var Or=Object.freeze({__proto__:null,integer:Zn,isNumber:Vn,random:Mn,natural:Qn,int:Zn,float:et,boolean:nt,bool:nt,character:rt,char:rt,string:at,str:at,range:Sn,color:function(e){return e||Mt[e]?Mt[e].nicer:jt(Rt).hex},hex:_t,rgb:function(){return Ft().hsv().string()},rgba:function(){return Ft().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return Ft().hsl().string()},_goldenRatioColor:Ft,first:Lt,last:Ht,name:function(e){return e=e?` ${Lt()} `:" ",`${Lt()}${e}${Ht()}`},cfirst:Nt,clast:Bt,cname:function(){return Nt()+Bt()},capitalize:dn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:jt,shuffle:Et,order:St,d4:function(){return Qn(1,4)},d6:function(){return Qn(1,6)},d8:function(){return Qn(1,8)},d12:function(){return Qn(1,12)},d20:function(){return Qn(1,20)},d100:function(){return Qn(1,100)},guid:function(){return Vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Vt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=jt(er).id+rr("yyyyMMdd")+at("number",3);for(let r=0;rir())).join("\n")},word:hr,sentence:ir,title:function(e=3,n=7){return Bn(Mn(e,n),(()=>dn(hr()))).join("")},ctitle:function(e=3,n=7){return Bn(Mn(e,n),(()=>mr())).join("")},csentence:sr,cparagraph:function(e=3,n=7){return Bn(Mn(e,n),(()=>sr())).join("\n")},cword:mr,protocol:br,domain:xr,tld:gr,email:function(e){return`${rt("lower")}.${hr()}@${e||hr()+"."+gr()}`},ip:function(){return[...Array(4)].map((()=>Qn(0,255))).join(".")},url:function(e,n){return`${e||br()}://${n||xr()}/${hr()}`},_patternLetters:nr,_rformat:tr,_formatDate:ar,_randomDate:or,time:function(e="HH:mm:ss"){return rr(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return rr(e)},date:rr,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}if("week"===e)t.setDate(t.getDate()-t.getDay());return ar(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?or(e,n).getTime():or().getTime()},_adSize:wr,_screenSize:kr,_videoSize:Ar,image:Mr,img:Mr,_brandColors:yr,_brandNames:Cr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=jt(wr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=yr[jt(Cr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return jt(jr)},province:function(){return jt(er).name},city:function(e){const n=jt(er),t=jt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=jt(er),t=jt(n.children),r=jt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Qn(0,9);return n},genFile:function(e){return new File(Er(e),hr())},genBlob:function(e){return new Blob(Er(e))}}),Sr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Rr(e=""){"string"!=typeof e&&(e+="");const n=e.match(Sr.RE_KEY),t=n&&n[3]&&n[3].match(Sr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Zn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Sr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Zn(l,c):void 0},h=Object.keys(i).some((e=>void 0!==e));return h?i:{}}function Tr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=jt(ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ga(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(ga(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function Fr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?nt(n,e,r):r}function _r(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function $r({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=et(n,t,r,a)})):u=n&&!a[2]?t:o,u}function Dr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=Et(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(Sr.RE_KEY);c&&c[2]&&"number"===In(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function qr(e){this.type=e,this.offset=qr.offset(),this.text=qr.text()}function Pr(e,n){qr.call(this,"alternate"),this.left=e,this.right=n}function zr(e){qr.call(this,"match"),this.body=e.filter(Boolean)}function Lr(e,n){qr.call(this,e),this.body=n}function Hr(e){Lr.call(this,"capture-group"),this.index=Qr[this.offset]||(Qr[this.offset]=Zr++),this.body=e}function Nr(e,n){qr.call(this,"quantified"),this.body=e,this.quantifier=n}function Br(e,n){qr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Ir(e,n){qr.call(this,"charset"),this.invert=e,this.body=n}function Ur(e,n){qr.call(this,"range"),this.start=e,this.end=n}function Gr(e){qr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Wr(e){qr.call(this,"unicode"),this.code=e.toUpperCase()}function Jr(e){qr.call(this,"hex"),this.code=e.toUpperCase()}function Kr(e){qr.call(this,"octal"),this.code=e.toUpperCase()}function Yr(e){qr.call(this,"back-reference"),this.code=e.toUpperCase()}function Vr(e){qr.call(this,"control-character"),this.code=e.toUpperCase()}var Xr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t,r;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return r=n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input","Expected "+t+" but "+r+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(e){return Et!==e&&(Et>e&&(Et=0,Ot={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ot,Et,e),Et=e),Ot}function r(e){St>Mt||(Mt>St&&(St=Mt,Rt=[]),Rt.push(e))}function a(){var e,t,h,s,f;return e=Mt,t=function(){var e,n,t,r,a;if(e=Mt,n=u(),null===n&&(n=X),null!==n)if(t=Mt,Tt++,r=i(),Tt--,null===r?t=X:(Mt=t,t=V),null!==t){for(r=[],null===(a=c())&&(a=o());null!==a;)r.push(a),null===(a=c())&&(a=o());null!==r?(null===(a=l())&&(a=X),null!==a?(jt=e,null===(n=ne(n,r,a))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return e}(),null!==t?(h=Mt,124===n.charCodeAt(Mt)?(s=Z,Mt++):(s=null,0===Tt&&r(Q)),null!==s?null!==(f=a())?h=s=[s,f]:(Mt=h,h=V):(Mt=h,h=V),null===h&&(h=X),null!==h?(jt=e,null===(t=ee(t,h))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function o(){var e;return null===(e=g())&&(null===(e=v())&&(e=function(){var e;return e=A(),null===e&&(e=function(){var e;return e=j(),null===e&&(e=E(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=H(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))))),e}(),null===e&&(e=C())),e}())),e}function u(){var e,t;return e=Mt,94===n.charCodeAt(Mt)?(t=te,Mt++):(t=null,0===Tt&&r(re)),null!==t&&(jt=e,t=ae()),null===t?(Mt=e,e=t):e=t,e}function l(){var e,t;return e=Mt,36===n.charCodeAt(Mt)?(t=oe,Mt++):(t=null,0===Tt&&r(ue)),null!==t&&(jt=e,t=le()),null===t?(Mt=e,e=t):e=t,e}function c(){var e,n,t;return e=Mt,null!==(n=o())?null!==(t=i())?(jt=e,null===(n=ce(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V):(Mt=e,e=V),e}function i(){var e,n,t;return Tt++,e=Mt,n=function(){var e;return e=h(),null===e&&(e=s(),null===e&&(e=f(),null===e&&(e=m(),null===e&&(e=d(),null===e&&(e=p()))))),e}(),null!==n?(null===(t=b())&&(t=X),null!==t?(jt=e,null===(n=he(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(n=null,0===Tt&&r(ie)),e}function h(){var e,t,a,o,u,l;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(44===n.charCodeAt(Mt)?(o=me,Mt++):(o=null,0===Tt&&r(de)),null!==o?null!==(u=x())?(125===n.charCodeAt(Mt)?(l=pe,Mt++):(l=null,0===Tt&&r(be)),null!==l?(jt=e,null===(t=xe(a,u))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function s(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(n.substr(Mt,2)===ge?(o=ge,Mt+=2):(o=null,0===Tt&&r(ve)),null!==o?(jt=e,null===(t=ye(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function f(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(125===n.charCodeAt(Mt)?(o=pe,Mt++):(o=null,0===Tt&&r(be)),null!==o?(jt=e,null===(t=we(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function m(){var e,t;return e=Mt,43===n.charCodeAt(Mt)?(t=ke,Mt++):(t=null,0===Tt&&r(Ae)),null!==t&&(jt=e,t=Ce()),null===t?(Mt=e,e=t):e=t,e}function d(){var e,t;return e=Mt,42===n.charCodeAt(Mt)?(t=Me,Mt++):(t=null,0===Tt&&r(je)),null!==t&&(jt=e,t=Ee()),null===t?(Mt=e,e=t):e=t,e}function p(){var e,t;return e=Mt,63===n.charCodeAt(Mt)?(t=Oe,Mt++):(t=null,0===Tt&&r(Se)),null!==t&&(jt=e,t=Re()),null===t?(Mt=e,e=t):e=t,e}function b(){var e;return 63===n.charCodeAt(Mt)?(e=Oe,Mt++):(e=null,0===Tt&&r(Se)),e}function x(){var e,t,a;if(e=Mt,t=[],Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe)),null!==a)for(;null!==a;)t.push(a),Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe));else t=V;return null!==t&&(jt=e,t=_e(t)),null===t?(Mt=e,e=t):e=t,e}function g(){var e,t,o,u;return e=Mt,40===n.charCodeAt(Mt)?(t=$e,Mt++):(t=null,0===Tt&&r(De)),null!==t?(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===Ie?(t=Ie,Mt+=2):(t=null,0===Tt&&r(Ue)),null!==t?(o=a(),null!==o?(jt=e,t=Ge(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===We?(t=We,Mt+=2):(t=null,0===Tt&&r(Je)),null!==t?(o=a(),null!==o?(jt=e,t=Ke(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===He?(t=He,Mt+=2):(t=null,0===Tt&&r(Ne)),null!==t?(o=a(),null!==o?(jt=e,t=Be(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,n;return e=Mt,n=a(),null!==n&&(jt=e,n=Le(n)),null===n?(Mt=e,e=n):e=n,e}()))),null!==o?(41===n.charCodeAt(Mt)?(u=qe,Mt++):(u=null,0===Tt&&r(Pe)),null!==u?(jt=e,null===(t=ze(o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)):(Mt=e,e=V),e}function v(){var e,t,a,o,u;if(Tt++,e=Mt,91===n.charCodeAt(Mt)?(t=Ve,Mt++):(t=null,0===Tt&&r(Xe)),null!==t)if(94===n.charCodeAt(Mt)?(a=te,Mt++):(a=null,0===Tt&&r(re)),null===a&&(a=X),null!==a){for(o=[],null===(u=y())&&(u=w());null!==u;)o.push(u),null===(u=y())&&(u=w());null!==o?(93===n.charCodeAt(Mt)?(u=Ze,Mt++):(u=null,0===Tt&&r(Qe)),null!==u?(jt=e,null===(t=en(a,o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return Tt--,null===e&&(t=null,0===Tt&&r(Ye)),e}function y(){var e,t,a,o;return Tt++,e=Mt,null!==(t=w())?(45===n.charCodeAt(Mt)?(a=tn,Mt++):(a=null,0===Tt&&r(rn)),null!==a?null!==(o=w())?(jt=e,null===(t=an(t,o))?(Mt=e,e=t):e=t):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(t=null,0===Tt&&r(nn)),e}function w(){var e;return Tt++,null===(e=function(){var e;return e=M(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))),e}())&&(e=k()),Tt--,null===e&&0===Tt&&r(on),e}function k(){var e,t;return e=Mt,un.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(ln)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,e}function A(){var e,t;return e=Mt,46===n.charCodeAt(Mt)?(t=hn,Mt++):(t=null,0===Tt&&r(sn)),null!==t&&(jt=e,t=fn()),null===t?(Mt=e,e=t):e=t,e}function C(){var e,t;return Tt++,e=Mt,dn.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(pn)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,Tt--,null===e&&(t=null,0===Tt&&r(mn)),e}function M(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=gn()),null===t?(Mt=e,e=t):e=t,e}function j(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=vn()),null===t?(Mt=e,e=t):e=t,e}function E(){var e,t;return e=Mt,n.substr(Mt,2)===yn?(t=yn,Mt+=2):(t=null,0===Tt&&r(wn)),null!==t&&(jt=e,t=kn()),null===t?(Mt=e,e=t):e=t,e}function O(){var e,t;return e=Mt,n.substr(Mt,2)===An?(t=An,Mt+=2):(t=null,0===Tt&&r(Cn)),null!==t&&(jt=e,t=Mn()),null===t?(Mt=e,e=t):e=t,e}function S(){var e,t;return e=Mt,n.substr(Mt,2)===jn?(t=jn,Mt+=2):(t=null,0===Tt&&r(En)),null!==t&&(jt=e,t=On()),null===t?(Mt=e,e=t):e=t,e}function R(){var e,t;return e=Mt,n.substr(Mt,2)===Sn?(t=Sn,Mt+=2):(t=null,0===Tt&&r(Rn)),null!==t&&(jt=e,t=Tn()),null===t?(Mt=e,e=t):e=t,e}function T(){var e,t;return e=Mt,n.substr(Mt,2)===Fn?(t=Fn,Mt+=2):(t=null,0===Tt&&r(_n)),null!==t&&(jt=e,t=$n()),null===t?(Mt=e,e=t):e=t,e}function F(){var e,t;return e=Mt,n.substr(Mt,2)===Dn?(t=Dn,Mt+=2):(t=null,0===Tt&&r(qn)),null!==t&&(jt=e,t=Pn()),null===t?(Mt=e,e=t):e=t,e}function _(){var e,t;return e=Mt,n.substr(Mt,2)===zn?(t=zn,Mt+=2):(t=null,0===Tt&&r(Ln)),null!==t&&(jt=e,t=Hn()),null===t?(Mt=e,e=t):e=t,e}function $(){var e,t;return e=Mt,n.substr(Mt,2)===Nn?(t=Nn,Mt+=2):(t=null,0===Tt&&r(Bn)),null!==t&&(jt=e,t=In()),null===t?(Mt=e,e=t):e=t,e}function D(){var e,t;return e=Mt,n.substr(Mt,2)===Un?(t=Un,Mt+=2):(t=null,0===Tt&&r(Gn)),null!==t&&(jt=e,t=Wn()),null===t?(Mt=e,e=t):e=t,e}function q(){var e,t;return e=Mt,n.substr(Mt,2)===Jn?(t=Jn,Mt+=2):(t=null,0===Tt&&r(Kn)),null!==t&&(jt=e,t=Yn()),null===t?(Mt=e,e=t):e=t,e}function P(){var e,t;return e=Mt,n.substr(Mt,2)===Vn?(t=Vn,Mt+=2):(t=null,0===Tt&&r(Xn)),null!==t&&(jt=e,t=Zn()),null===t?(Mt=e,e=t):e=t,e}function z(){var e,t;return e=Mt,n.substr(Mt,2)===Qn?(t=Qn,Mt+=2):(t=null,0===Tt&&r(et)),null!==t&&(jt=e,t=nt()),null===t?(Mt=e,e=t):e=t,e}function L(){var e,t,a;return e=Mt,n.substr(Mt,2)===tt?(t=tt,Mt+=2):(t=null,0===Tt&&r(rt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=ot(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function H(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(ct.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(it)),null!==a?(jt=e,null===(t=ht(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function N(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t){if(a=[],mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt)),null!==o)for(;null!==o;)a.push(o),mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt));else a=V;null!==a?(jt=e,null===(t=pt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function B(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===bt?(t=bt,Mt+=2):(t=null,0===Tt&&r(xt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=yt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function I(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===wt?(t=wt,Mt+=2):(t=null,0===Tt&&r(kt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=At(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function U(){var e,t;return e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t&&(jt=e,t=Ct()),null===t?(Mt=e,e=t):e=t,e}function G(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=cn(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}var W,J=arguments.length>1?arguments[1]:{},K={regexp:a},Y=a,V=null,X="",Z="|",Q='"|"',ee=function(e,n){return n?new Pr(e,n[1]):e},ne=function(e,n,t){return new zr([e].concat(n).concat([t]))},te="^",re='"^"',ae=function(){return new qr("start")},oe="$",ue='"$"',le=function(){return new qr("end")},ce=function(e,n){return new Nr(e,n)},ie="Quantifier",he=function(e,n){return n&&(e.greedy=!1),e},se="{",fe='"{"',me=",",de='","',pe="}",be='"}"',xe=function(e,n){return new Br(e,n)},ge=",}",ve='",}"',ye=function(e){return new Br(e,1/0)},we=function(e){return new Br(e,e)},ke="+",Ae='"+"',Ce=function(){return new Br(1,1/0)},Me="*",je='"*"',Ee=function(){return new Br(0,1/0)},Oe="?",Se='"?"',Re=function(){return new Br(0,1)},Te=/^[0-9]/,Fe="[0-9]",_e=function(e){return+e.join("")},$e="(",De='"("',qe=")",Pe='")"',ze=function(e){return e},Le=function(e){return new Hr(e)},He="?:",Ne='"?:"',Be=function(e){return new Lr("non-capture-group",e)},Ie="?=",Ue='"?="',Ge=function(e){return new Lr("positive-lookahead",e)},We="?!",Je='"?!"',Ke=function(e){return new Lr("negative-lookahead",e)},Ye="CharacterSet",Ve="[",Xe='"["',Ze="]",Qe='"]"',en=function(e,n){return new Ir(!!e,n)},nn="CharacterRange",tn="-",rn='"-"',an=function(e,n){return new Ur(e,n)},on="Character",un=/^[^\\\]]/,ln="[^\\\\\\]]",cn=function(e){return new Gr(e)},hn=".",sn='"."',fn=function(){return new qr("any-character")},mn="Literal",dn=/^[^|\\\/.[()?+*$\^]/,pn="[^|\\\\\\/.[()?+*$\\^]",bn="\\b",xn='"\\\\b"',gn=function(){return new qr("backspace")},vn=function(){return new qr("word-boundary")},yn="\\B",wn='"\\\\B"',kn=function(){return new qr("non-word-boundary")},An="\\d",Cn='"\\\\d"',Mn=function(){return new qr("digit")},jn="\\D",En='"\\\\D"',On=function(){return new qr("non-digit")},Sn="\\f",Rn='"\\\\f"',Tn=function(){return new qr("form-feed")},Fn="\\n",_n='"\\\\n"',$n=function(){return new qr("line-feed")},Dn="\\r",qn='"\\\\r"',Pn=function(){return new qr("carriage-return")},zn="\\s",Ln='"\\\\s"',Hn=function(){return new qr("white-space")},Nn="\\S",Bn='"\\\\S"',In=function(){return new qr("non-white-space")},Un="\\t",Gn='"\\\\t"',Wn=function(){return new qr("tab")},Jn="\\v",Kn='"\\\\v"',Yn=function(){return new qr("vertical-tab")},Vn="\\w",Xn='"\\\\w"',Zn=function(){return new qr("word")},Qn="\\W",et='"\\\\W"',nt=function(){return new qr("non-word")},tt="\\c",rt='"\\\\c"',at="any character",ot=function(e){return new Vr(e)},ut="\\",lt='"\\\\"',ct=/^[1-9]/,it="[1-9]",ht=function(e){return new Yr(e)},st="\\0",ft='"\\\\0"',mt=/^[0-7]/,dt="[0-7]",pt=function(e){return new Kr(e.join(""))},bt="\\x",xt='"\\\\x"',gt=/^[0-9a-fA-F]/,vt="[0-9a-fA-F]",yt=function(e){return new Jr(e.join(""))},wt="\\u",kt='"\\\\u"',At=function(e){return new Wr(e.join(""))},Ct=function(){return new qr("null-character")},Mt=0,jt=0,Et=0,Ot={line:1,column:1,seenCR:!1},St=0,Rt=[],Tt=0;if("startRule"in J){if(!(J.startRule in K))throw new Error("Can't start parsing from rule \""+J.startRule+'".');Y=K[J.startRule]}if(qr.offset=function(){return jt},qr.text=function(){return n.substring(jt,Mt)},null!==(W=Y())&&Mt===n.length)return W;throw function(e){var n=0;for(e.sort();nString.fromCharCode(n+e))).join("")}ea.gen=function(e,n,t){return t=t||{guid:1},ea[e.type]?ea[e.type](e,n,t):ea.token(e,n,t)},ea.extend({token:function(e,n,t){switch(e.type){case"start":case"end":case"backspace":case"word-boundary":return"";case"any-character":return rt();case"non-word-boundary":case"form-feed":case"carriage-return":case"tab":case"vertical-tab":break;case"digit":return jt(ra.split(""));case"non-digit":return jt((na+ta+aa).split(""));case"line-feed":return e.body||e.text;case"white-space":return jt(ua.split(""));case"non-white-space":case"word":return jt((na+ta+ra).split(""));case"non-word":return jt(aa.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(nt()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=fa(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return sa(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ga(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Or)&&!(u in Or))return e;o=o?o.split(/\s*,\s*/).map((e=>(Sr.RE_PLACEHOLDER.exec(""),Sr.RE_PLACEHOLDER.test(e)?da(e,n,t,r):e))):[];const c=Or[a]||Or[u];switch(In(c)){case"array":return jt(c);case"function":{c.options=r;const e=c.apply(Or,o)||"";return delete c.options,e}}}function pa(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(Sr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=da(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Un(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?at(t):o;return u}var ba=Object.freeze({__proto__:null,array:Tr,boolean:Fr,function:_r,number:$r,object:Dr,regexp:ha,string:pa});let xa=1;function ga(e,n="",t={}){const r={path:t.path||[xa],templatePath:t.templatePath||[xa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=In(e),o=ba[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Sr.RE_KEY,"$1"):n,rule:Rr(n),context:r}),r.root||(r.root=u),u):e}const va={gen:ga,extend:Gn};function ya(e,n,t=[]){const r={name:"string"==typeof n?n.replace(Sr.RE_KEY,"$1"):n,template:e,type:In(e),rule:Rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ya(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ya(e,n,r.path)))}return r}function wa(e,n){const t=ya(e),r=ka.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:da,getValueByKeyPath:sa,normalizePath:fa,splitPathToArray:ma});const ka={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return Aa.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Aa.equal("type",e.path,In(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return Aa.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return r.length===a}return Aa.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&Aa.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(Aa.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),Aa.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&Aa.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Aa.equal("properties length",e.path,u.length,o.min,r)):Aa.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1}};wa.Diff=ka,wa.Assert=Aa;const Ca={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Ma({url:e,type:n}){n=n.toLowerCase();for(const t in Ca){const r=Ca[t],{rurl:a,rtype:o}=r;if(ja(a,e)&&ja(o,n))return r}return!1}function ja(e,n){switch(In(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function Ea({template:e},n){return H(e)?e(n):ga(e)}const Oa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],Sa=Symbol("Body internals"),Ra=Symbol("Response internals");async function Ta(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class Fa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):Oa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[Sa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[Sa].body}get bodyUsed(){return this[Sa].disturbed}async arrayBuffer(){return(await Ta(this[Sa])).arrayBuffer()}async blob(){return Ta(this[Sa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await Ta(this[Sa])).text()}}Object.defineProperties(Fa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const _a=new Set([301,302,303,307,308]),$a=globalThis.window&&globalThis.window.Response||class{};class Da extends Fa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":Oa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[Sa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[Ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[Ra].type}get url(){return this[Ra].url||""}get status(){return this[Ra].status}get ok(){return this[Ra].status>=200&&this[Ra].status<300}get redirected(){return this[Ra].counter>0}get statusText(){return this[Ra].statusText}get headers(){return this[Ra].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new $a(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!_a.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new $a(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new $a(null,{status:0,statusText:""});return e[Ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties($a.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const qa=globalThis.window||{},Pa=qa.fetch;async function za(e,n={}){if(!0===qa.fetch.$mock){const t=Ma({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=Ea(t,{});return console.warn("mock代理中"),new Da(e,n)}}return console.warn("未使用 mockjs"),Pa(e,n)}var La="OK";const Ha=function(){},Na=globalThis.window||{},Ba=void 0!==Na?Na.XMLHttpRequest:class{},Ia=Ba.prototype.send||Ha,Ua=Ba.prototype.open||Ha;class Ga extends Ba{constructor(...e){super(...e)}_send=Ia;_open=Ua;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Ma({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=La;const e=Ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&qa.fetch&&!qa.fetch.hasOwnProperty("$mock")&&(qa.fetch=za,qa.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Wa=globalThis.window||{};const Ja={Handler:va,Random:Or,Util:Yn,XHR:Ga,RE:ia,toJSONSchema:ya,valid:wa,heredoc:Jn,setup:function(e){return Ga.setup(e)},_mocked:Ca,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,va.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Wa.XMLHttpRequest!==Ga&&(Wa.XMLHttpRequest=Ga),Ca.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ja; diff --git a/dist/mock.esm.js b/dist/mock.esm.js index dc1f4d53..0b9ad5a3 100644 --- a/dist/mock.esm.js +++ b/dist/mock.esm.js @@ -1,20 +1,20 @@ /** * // esm 版本编写人 - * + * * MIT License - * + * * Copyright (c) 2020 动中之动 - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE @@ -22,24 +22,24 @@ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. - * + * * // 原始代码编写人 - * + * * The MIT License (MIT) - * + * * Copyright (c) 2015 nuysoft * http://mockjs.com/ - * + * * Permission is hereby granted, free of charge, to any person obtaining a copy of * this software and associated documentation files (the "Software"), to deal in * the Software without restriction, including without limitation the rights to * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of * the Software, and to permit persons to whom the Software is furnished to do so, * subject to the following conditions: - * + * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. - * + * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR @@ -48,4 +48,4 @@ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i=r?r.toStringTag:void 0;function h(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function s(e){return null!=e&&"object"==typeof e}function f(e){return"symbol"==typeof e||s(e)&&"[object Symbol]"==h(e)}function m(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++G>=800)return arguments[0]}else G=0;return U.apply(void 0,arguments)}),Y=/^(?:0|[1-9]\d*)$/;function V(e,n){var t=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==t||"symbol"!=t&&Y.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function ae(e){return null!=e&&re(e.length)&&!S(e)}function oe(e,n,t){if(!w(t))return!1;var r=typeof n;return!!("number"==r?ae(t)&&V(n,t.length):"string"==r&&n in t)&&Z(t[n],e)}var ue=Object.prototype;function le(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ue)}function ce(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=_e.length>3&&"function"==typeof a?(r--,a):void 0,o&&oe(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function en(e){return null==e?[]:function(e,n){return m(n,(function(n){return e[n]}))}(e,Re(e))}var nn=Ae&&Ae.isRegExp,tn=nn?ye(nn):function(e){return s(e)&&"[object RegExp]"==h(e)},rn=Math.floor,an=Math.random;function on(e,n){return e+rn(an()*(n-e+1))}var un=parseFloat,ln=Math.min,cn=Math.random;function hn(e,n,t){if(t&&"boolean"!=typeof t&&oe(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=j(e),void 0===n?(n=e,e=0):n=j(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=cn();return ln(e+a*(n-e+un("1e-"+((a+"").length-1))),n)}return on(e,n)}var sn=Math.ceil,fn=Math.max;var mn,dn=function(e,n,t){return t&&"number"!=typeof t&&oe(e,n,t)&&(n=t=void 0),e=j(e),void 0===n?(n=e,e=0):n=j(n),function(e,n,t,r){for(var a=-1,o=fn(sn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?e9007199254740991)return[];var t,r=4294967295,a=Mn(e,4294967295);e-=4294967295;for(var o=ce(a,n="function"==typeof(t=n)?t:O);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=hn(t,r,!1);return parseFloat(hn(e,n,!0).toFixed(a))},Ln=function(e,n,t=!1){return t?hn(0,e+n)>e?!t:t:hn(10,-10)>0},Hn={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};Hn.alpha=Hn.lower+Hn.upper,Hn.default=Hn.lower+Hn.upper+Hn.number+Hn.symbol;const Nn=function(e="default"){return Hn.hasOwnProperty(e.toLocaleLowerCase())&&(e=Hn[e.toLowerCase()]),xn(e)},In=function(...e){let n,t,r,a;switch(e.length){case 0:n=Pn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Pn(r,a));break;case 3:[t,r,a]=e,n=Pn(r,a)}return jn(n,(()=>Nn(t))).join("")};function Bn(e,n){return e(n={exports:{}},n.exports),n.exports}var Un={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Gn=Bn((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),Wn=Bn((function(e){var n={};for(var t in Un)Un.hasOwnProperty(t)&&(n[Un[t]]=t);var r=e.exports={to:{},get:{}};function a(e,n,t){return Math.min(Math.max(n,e),t)}function o(e){var n=e.toString(16).toUpperCase();return n.length<2?"0"+n:n}r.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=r.get.hsl(e),t="hsl";break;case"hwb":n=r.get.hwb(e),t="hwb";break;default:n=r.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},r.get.rgb=function(e){if(!e)return null;var n,t,r,o=[0,0,0,1];if(n=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(r=n[2],n=n[1],t=0;t<3;t++){var u=2*t;o[t]=parseInt(n.slice(u,u+2),16)}r&&(o[3]=parseInt(r,16)/255)}else if(n=e.match(/^#([a-f0-9]{3,4})$/i)){for(r=(n=n[1])[3],t=0;t<3;t++)o[t]=parseInt(n[t]+n[t],16);r&&(o[3]=parseInt(r+r,16)/255)}else if(n=e.match(/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)){for(t=0;t<3;t++)o[t]=parseInt(n[t+1],0);n[4]&&(o[3]=parseFloat(n[4]))}else{if(!(n=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/)))return(n=e.match(/(\D+)/))?"transparent"===n[1]?[0,0,0,0]:(o=Un[n[1]])?(o[3]=1,o):null:null;for(t=0;t<3;t++)o[t]=Math.round(2.55*parseFloat(n[t+1]));n[4]&&(o[3]=parseFloat(n[4]))}for(t=0;t<3;t++)o[t]=a(o[t],0,255);return o[3]=a(o[3],0,1),o},r.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,a(parseFloat(n[2]),0,100),a(parseFloat(n[3]),0,100),a(isNaN(t)?1:t,0,1)]}return null},r.to.hex=function(){var e=Gn(arguments);return"#"+o(e[0])+o(e[1])+o(e[2])+(e[3]<1?o(Math.round(255*e[3])):"")},r.to.rgb=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},r.to.rgb.percent=function(){var e=Gn(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},r.to.hsl=function(){var e=Gn(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},r.to.hwb=function(){var e=Gn(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},r.to.keyword=function(e){return n[e.slice(0,3)]}}));Wn.to,Wn.get;var Jn={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},Kn=Bn((function(e){var n={};for(var t in Jn)Jn.hasOwnProperty(t)&&(n[Jn[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in Jn)if(Jn.hasOwnProperty(l)){var c=Jn[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function Yn(e){var n=function(){for(var e={},n=Object.keys(Kn),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var Qn=Zn,et=[].slice,nt=["keyword","gray","hex"],tt={};Object.keys(Qn).forEach((function(e){tt[et.call(Qn[e].labels).sort().join("")]=e}));var rt={};function at(e,n){if(!(this instanceof at))return new at(e,n);if(n&&n in nt&&(n=null),n&&!(n in Qn))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof at)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=Wn.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=Qn[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=Qn[this.model].channels;var o=et.call(e,0,r);this.color=ct(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in tt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=tt[l];var c=Qn[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return at.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return at.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(Qn).forEach((function(e){if(-1===nt.indexOf(e)){var n=Qn[e].channels;at.prototype[e]=function(){if(this.model===e)return new at(this);if(arguments.length)return new at(arguments,e);var t="number"==typeof arguments[n]?n:this.valpha;return new at(lt(Qn[this.model][e].raw(this.color)).concat(t),e)},at[e]=function(t){return"number"==typeof t&&(t=ct(et.call(arguments),n)),new at(t,e)}}}));var it=at,ht={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const st=function(e,...n){let t,r,a;switch(n.length){case 0:return xn(e);case 1:return[a]=n,wn(e,a);case 2:return[t,r]=n,wn(e,hn(t,r))}},ft=function(e,n,t){const r=Cn(e);switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},mt={},dt=function(...e){1===e.length&&(e=e[0]);const n=dt.options.context.templatePath.join("."),t=mt[n]=mt[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var pt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let bt;function xt(e,n){return bt=bt||Math.random(),bt+=.618033988749895,bt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),it.hsv(360*bt,100*e,100*n)}function gt(){return xt().hex()}var yt={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:vt,lastName:wt,cfirstName:kt,clastName:At}=yt;function Ct(){const e=vt.male.concat();return st(e)}function Mt(){return st(wt)}function jt(){return st(kt)}function Et(){return st(At)}var Ot,St=new Uint8Array(16);function Rt(){if(!Ot&&!(Ot="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return Ot(St)}var Tt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;function Ft(e){return"string"==typeof e&&Tt.test(e)}for(var _t=[],Dt=0;Dt<256;++Dt)_t.push((Dt+256).toString(16).substr(1));function $t(e,n,t){var r=(e=e||{}).random||(e.rng||Rt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(_t[e[n+0]]+_t[e[n+1]]+_t[e[n+2]]+_t[e[n+3]]+"-"+_t[e[n+4]]+_t[e[n+5]]+"-"+_t[e[n+6]]+_t[e[n+7]]+"-"+_t[e[n+8]]+_t[e[n+9]]+"-"+_t[e[n+10]]+_t[e[n+11]]+_t[e[n+12]]+_t[e[n+13]]+_t[e[n+14]]+_t[e[n+15]]).toLowerCase();if(!Ft(t))throw TypeError("Stringified UUID is invalid");return t}(r)}var qt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Pt=Object.keys(qt),zt=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Object.entries(qt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Pt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})));var Lt={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const Ht=new RegExp(`(${Object.keys(Lt).join("|")})`,"g");function Nt(e="yyyy-MM-dd"){return It(Bt(),e)}function It(e,n){return n.replace(Ht,(function n(t,r){const a=Lt[r];return"function"==typeof a?a(e):a in Lt?n(t,a):e[a]()}))}function Bt(e=new Date(0),n=new Date){return new Date(qn(e.getTime(),n.getTime()))}let Ut=0;const Gt=function(e){return Ut+=+e||1},Wt=Gt;function Jt(e=12,n=18){return Ze(jn(hn(e,n),(()=>Kt())).join(" "))+"."}function Kt(e=3,n=10){return jn(hn(e,n),(()=>Nn("lower"))).join("")}function Yt(e=12,n=18){return jn(hn(e,n),(()=>Vt())).join("")+"。"}function Vt(...e){let n,t,r=1,a="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Pn(n,t));break;case 3:[a,n,t]=e,r=Pn(n,t)}return wn(a,r).join("")}const Xt="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),Zt="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function Qt(){return st(Xt)}function er(e){return`${Kt()}.${e||nr()}`}function nr(){return st(Zt)}var tr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},rr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:ar,_screenSize:or,_videoSize:ur}=tr,lr=Object.keys(rr);function cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=st(ar)),r=(r||gt()).replace(/^#/,""),t=(t||gt()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const ir=["东北","华北","华东","华中","华南","西南","西北"];function hr(e){let n;switch(En(e)){case"array":n=e;break;default:n=[e]}return n}var sr=Object.freeze({__proto__:null,integer:qn,isNumber:Dn,random:hn,natural:Pn,int:qn,float:zn,boolean:Ln,bool:Ln,character:Nn,char:Nn,string:In,str:In,range:dn,color:function(e){return e||ht[e]?ht[e].nicer:st(pt).hex},hex:gt,rgb:function(){return xt().hsv().string()},rgba:function(){return xt().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return xt().hsl().string()},_goldenRatioColor:xt,first:Ct,last:Mt,name:function(e){return e=e?` ${Ct()} `:" ",`${Ct()}${e}${Mt()}`},cfirst:jt,clast:Et,cname:function(){return jt()+Et()},capitalize:Ze,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:st,shuffle:ft,order:dt,d4:function(){return Pn(1,4)},d6:function(){return Pn(1,6)},d8:function(){return Pn(1,8)},d12:function(){return Pn(1,12)},d20:function(){return Pn(1,20)},d100:function(){return Pn(1,100)},guid:function(){return $t().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:$t,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=st(zt).id+Nt("yyyyMMdd")+In("number",3);for(let r=0;rJt())).join("\n")},word:Kt,sentence:Jt,title:function(e=3,n=7){return jn(hn(e,n),(()=>Ze(Kt()))).join("")},ctitle:function(e=3,n=7){return jn(hn(e,n),(()=>Vt())).join("")},csentence:Yt,cparagraph:function(e=3,n=7){return jn(hn(e,n),(()=>Yt())).join("\n")},cword:Vt,protocol:Qt,domain:er,tld:nr,email:function(e){return`${Nn("lower")}.${Kt()}@${e||Kt()+"."+nr()}`},ip:function(){return[...Array(4)].map((()=>Pn(0,255))).join(".")},url:function(e,n){return`${e||Qt()}://${n||er()}/${Kt()}`},_patternLetters:Lt,_rformat:Ht,_formatDate:It,_randomDate:Bt,time:function(e="HH:mm:ss"){return Nt(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return Nt(e)},date:Nt,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}switch(e){case"week":t.setDate(t.getDate()-t.getDay())}return It(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?Bt(e,n).getTime():Bt().getTime()},_adSize:ar,_screenSize:or,_videoSize:ur,image:cr,img:cr,_brandColors:rr,_brandNames:lr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=st(ar)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=rr[st(lr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return st(ir)},province:function(){return st(zt).name},city:function(e){const n=st(zt),t=st(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=st(zt),t=st(n.children),r=st(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Pn(0,9);return n},genFile:function(e){return new File(hr(e),Kt())},genBlob:function(e){return new Blob(hr(e))}}),fr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function mr(e=""){"string"!=typeof e&&(e+="");const n=e.match(fr.RE_KEY),t=n&&n[3]&&n[3].match(fr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?qn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(fr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||qn(l,c):void 0};return Object.keys(i).some((e=>void 0!==e))?i:{}}function dr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=st(na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=na(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(na(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(na(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function pr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?Ln(n,e,r):r}function br(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function xr({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=zn(n,t,r,a)})):u=n&&!a[2]?t:o,u}function gr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=ft(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(fr.RE_KEY,"$1");l[t]=na(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(fr.RE_KEY);c&&c[2]&&"number"===En(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function yr(e){this.type=e,this.offset=yr.offset(),this.text=yr.text()}function vr(e,n){yr.call(this,"alternate"),this.left=e,this.right=n}function wr(e){yr.call(this,"match"),this.body=e.filter(Boolean)}function kr(e,n){yr.call(this,e),this.body=n}function Ar(e){kr.call(this,"capture-group"),this.index=qr[this.offset]||(qr[this.offset]=$r++),this.body=e}function Cr(e,n){yr.call(this,"quantified"),this.body=e,this.quantifier=n}function Mr(e,n){yr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function jr(e,n){yr.call(this,"charset"),this.invert=e,this.body=n}function Er(e,n){yr.call(this,"range"),this.start=e,this.end=n}function Or(e){yr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Sr(e){yr.call(this,"unicode"),this.code=e.toUpperCase()}function Rr(e){yr.call(this,"hex"),this.code=e.toUpperCase()}function Tr(e){yr.call(this,"octal"),this.code=e.toUpperCase()}function Fr(e){yr.call(this,"back-reference"),this.code=e.toUpperCase()}function _r(e){yr.call(this,"control-character"),this.code=e.toUpperCase()}var Dr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return"Expected "+t+" but "+(n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input")+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(){return n.substring(zt,Pt)}function r(){return zt}function a(e){return Lt!==e&&(Lt>e&&(Lt=0,Ht={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ht,Lt,e),Lt=e),Ht}function o(e){Nt>Pt||(Pt>Nt&&(Nt=Pt,It=[]),It.push(e))}function u(e){var n=0;for(e.sort();nPt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=xt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Z(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(vt.test(n.charAt(Pt))?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(wt)),null!==r?(zt=e,null===(t=kt(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}function Q(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t){if(r=[],Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt)),null!==a)for(;null!==a;)r.push(a),Mt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(jt));else r=ce;null!==r?(zt=e,null===(t=Et(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ee(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===Ot?(t=Ot,Pt+=2):(t=null,0===Bt&&o(St)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=Ft(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function ne(){var e,t,r,a;if(e=Pt,n.substr(Pt,2)===_t?(t=_t,Pt+=2):(t=null,0===Bt&&o(Dt)),null!==t){if(r=[],Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt)),null!==a)for(;null!==a;)r.push(a),Rt.test(n.charAt(Pt))?(a=n.charAt(Pt),Pt++):(a=null,0===Bt&&o(Tt));else r=ce;null!==r?(zt=e,null===(t=$t(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)}else Pt=e,e=ce;return e}function te(){var e,t;return e=Pt,n.substr(Pt,2)===At?(t=At,Pt+=2):(t=null,0===Bt&&o(Ct)),null!==t&&(zt=e,t=qt()),null===t?(Pt=e,e=t):e=t,e}function re(){var e,t,r;return e=Pt,92===n.charCodeAt(Pt)?(t=gt,Pt++):(t=null,0===Bt&&o(yt)),null!==t?(n.length>Pt?(r=n.charAt(Pt),Pt++):(r=null,0===Bt&&o(bt)),null!==r?(zt=e,null===(t=wn(r))?(Pt=e,e=t):e=t):(Pt=e,e=ce)):(Pt=e,e=ce),e}var ae,oe=arguments.length>1?arguments[1]:{},ue={regexp:l},le=l,ce=null,ie="",he="|",se='"|"',fe=function(e,n){return n?new vr(e,n[1]):e},me=function(e,n,t){return new wr([e].concat(n).concat([t]))},de="^",pe='"^"',be=function(){return new yr("start")},xe="$",ge='"$"',ye=function(){return new yr("end")},ve=function(e,n){return new Cr(e,n)},we="Quantifier",ke=function(e,n){return n&&(e.greedy=!1),e},Ae="{",Ce='"{"',Me=",",je='","',Ee="}",Oe='"}"',Se=function(e,n){return new Mr(e,n)},Re=",}",Te='",}"',Fe=function(e){return new Mr(e,1/0)},_e=function(e){return new Mr(e,e)},De="+",$e='"+"',qe=function(){return new Mr(1,1/0)},Pe="*",ze='"*"',Le=function(){return new Mr(0,1/0)},He="?",Ne='"?"',Ie=function(){return new Mr(0,1)},Be=/^[0-9]/,Ue="[0-9]",Ge=function(e){return+e.join("")},We="(",Je='"("',Ke=")",Ye='")"',Ve=function(e){return e},Xe=function(e){return new Ar(e)},Ze="?:",Qe='"?:"',en=function(e){return new kr("non-capture-group",e)},nn="?=",tn='"?="',rn=function(e){return new kr("positive-lookahead",e)},an="?!",on='"?!"',un=function(e){return new kr("negative-lookahead",e)},ln="CharacterSet",cn="[",hn='"["',sn="]",fn='"]"',mn=function(e,n){return new jr(!!e,n)},dn="CharacterRange",pn="-",bn='"-"',xn=function(e,n){return new Er(e,n)},gn="Character",yn=/^[^\\\]]/,vn="[^\\\\\\]]",wn=function(e){return new Or(e)},kn=".",An='"."',Cn=function(){return new yr("any-character")},Mn="Literal",jn=/^[^|\\\/.[()?+*$\^]/,En="[^|\\\\\\/.[()?+*$\\^]",On="\\b",Sn='"\\\\b"',Rn=function(){return new yr("backspace")},Tn=function(){return new yr("word-boundary")},Fn="\\B",_n='"\\\\B"',Dn=function(){return new yr("non-word-boundary")},$n="\\d",qn='"\\\\d"',Pn=function(){return new yr("digit")},zn="\\D",Ln='"\\\\D"',Hn=function(){return new yr("non-digit")},Nn="\\f",In='"\\\\f"',Bn=function(){return new yr("form-feed")},Un="\\n",Gn='"\\\\n"',Wn=function(){return new yr("line-feed")},Jn="\\r",Kn='"\\\\r"',Yn=function(){return new yr("carriage-return")},Vn="\\s",Xn='"\\\\s"',Zn=function(){return new yr("white-space")},Qn="\\S",et='"\\\\S"',nt=function(){return new yr("non-white-space")},tt="\\t",rt='"\\\\t"',at=function(){return new yr("tab")},ot="\\v",ut='"\\\\v"',lt=function(){return new yr("vertical-tab")},ct="\\w",it='"\\\\w"',ht=function(){return new yr("word")},st="\\W",ft='"\\\\W"',mt=function(){return new yr("non-word")},dt="\\c",pt='"\\\\c"',bt="any character",xt=function(e){return new _r(e)},gt="\\",yt='"\\\\"',vt=/^[1-9]/,wt="[1-9]",kt=function(e){return new Fr(e)},At="\\0",Ct='"\\\\0"',Mt=/^[0-7]/,jt="[0-7]",Et=function(e){return new Tr(e.join(""))},Ot="\\x",St='"\\\\x"',Rt=/^[0-9a-fA-F]/,Tt="[0-9a-fA-F]",Ft=function(e){return new Rr(e.join(""))},_t="\\u",Dt='"\\\\u"',$t=function(e){return new Sr(e.join(""))},qt=function(){return new yr("null-character")},Pt=0,zt=0,Lt=0,Ht={line:1,column:1,seenCR:!1},Nt=0,It=[],Bt=0;if("startRule"in oe){if(!(oe.startRule in ue))throw new Error("Can't start parsing from rule \""+oe.startRule+'".');le=ue[oe.startRule]}if(yr.offset=r,yr.text=t,null!==(ae=le())&&Pt===n.length)return ae;throw u(It),zt=Math.max(Pt,Nt),new e(It,ztString.fromCharCode(n+e))).join("")}Pr.gen=function(e,n,t){return t=t||{guid:1},Pr[e.type]?Pr[e.type](e,n,t):Pr.token(e,n,t)},Pr.extend({token:function(e,n,t){switch(e.type){case"start":case"end":return"";case"any-character":return Nn();case"backspace":case"word-boundary":return"";case"non-word-boundary":break;case"digit":return st(Hr.split(""));case"non-digit":return st((zr+Lr+Nr).split(""));case"form-feed":break;case"line-feed":return e.body||e.text;case"carriage-return":break;case"white-space":return st(Br.split(""));case"non-white-space":return st((zr+Lr+Hr).split(""));case"tab":case"vertical-tab":break;case"word":return st((zr+Lr+Hr).split(""));case"non-word":return st(Nr.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(Ln()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=Yr(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return Kr(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=na(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in sr)&&!(u in sr))return e;o=o?o.split(/\s*,\s*/).map((e=>(fr.RE_PLACEHOLDER.exec(""),fr.RE_PLACEHOLDER.test(e)?Xr(e,n,t,r):e))):[];const c=sr[a]||sr[u];switch(En(c)){case"array":return st(c);case"function":{c.options=r;const e=c.apply(sr,o)||"";return delete c.options,e}}}function Zr(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(fr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=Xr(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return On(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?In(t):o;return u}var Qr=Object.freeze({__proto__:null,array:dr,boolean:pr,function:br,number:xr,object:gr,regexp:Jr,string:Zr});let ea=1;function na(e,n="",t={}){const r={path:t.path||[ea],templatePath:t.templatePath||[ea++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=En(e),o=Qr[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(fr.RE_KEY,"$1"):n,rule:mr(n),context:r}),r.root||(r.root=u),u):e}const ta={gen:na,extend:Sn};function ra(e,n,t=[]){const r={name:"string"==typeof n?n.replace(fr.RE_KEY,"$1"):n,template:e,type:En(e),rule:mr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ra(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ra(e,n,r.path)))}return r}function aa(e,n){const t=ra(e),r=oa.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:Xr,getValueByKeyPath:Kr,normalizePath:Yr,splitPathToArray:Vr});const oa={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return ua.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(fr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return ua.equal("type",e.path,En(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return ua.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(fr.RE_PLACEHOLDER))return r.length===a}return ua.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&ua.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(ua.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),ua.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&ua.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),ua.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&ua.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Fn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(ua.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),ua.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&ua.equal("properties length",e.path,u.length,o.min,r)):ua.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=ua.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=ua.message(u),a.push(u),!1}};aa.Diff=oa,aa.Assert=ua;const la={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function ca({url:e,type:n}){n=n.toLowerCase();for(const t in la){const r=la[t],{rurl:a,rtype:o}=r;if(ia(a,e)&&ia(o,n))return r}return!1}function ia(e,n){switch(En(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function ha({template:e},n){return S(e)?e(n):na(e)}const sa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],fa=Symbol("Body internals"),ma=Symbol("Response internals");async function da(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class pa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):sa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[fa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[fa].body}get bodyUsed(){return this[fa].disturbed}async arrayBuffer(){return(await da(this[fa])).arrayBuffer()}async blob(){return da(this[fa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await da(this[fa])).text()}}Object.defineProperties(pa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const ba=new Set([301,302,303,307,308]),xa=globalThis.window&&globalThis.window.Response||class{};class ga extends pa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":sa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[fa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[ma]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[ma].type}get url(){return this[ma].url||""}get status(){return this[ma].status}get ok(){return this[ma].status>=200&&this[ma].status<300}get redirected(){return this[ma].counter>0}get statusText(){return this[ma].statusText}get headers(){return this[ma].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new xa(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!ba.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new xa(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new xa(null,{status:0,statusText:""});return e[ma].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties(xa.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const ya=globalThis.window||{},va=ya.fetch;async function wa(e,n={}){if(!0===ya.fetch.$mock){const t=ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=ha(t,{});return console.warn("mock代理中"),new ga(e,n)}}return console.warn("未使用 mockjs"),va(e,n)}var ka="OK";const Aa=function(){},Ca=globalThis.window||{},Ma=void 0!==Ca?Ca.XMLHttpRequest:class{},ja=Ma.prototype.send||Aa,Ea=Ma.prototype.open||Aa;class Oa extends Ma{constructor(...e){super(...e)}_send=ja;_open=Ea;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=ka;const e=ha(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&ya.fetch&&!ya.fetch.hasOwnProperty("$mock")&&(ya.fetch=wa,ya.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Sa=globalThis.window||{};const Ra={Handler:ta,Random:sr,Util:_n,XHR:Oa,RE:Wr,toJSONSchema:ra,valid:aa,heredoc:Tn,setup:function(e){return Oa.setup(e)},_mocked:la,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,ta.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Sa.XMLHttpRequest!==Oa&&(Sa.XMLHttpRequest=Oa),la.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ra; +var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i="[object Null]",h="[object Undefined]",s=r?r.toStringTag:void 0;function f(e){return null==e?void 0===e?h:i:s&&s in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function m(e){return null!=e&&"object"==typeof e}var d="[object Symbol]";function p(e){return"symbol"==typeof e||m(e)&&f(e)==d}function b(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++ne>=800)return arguments[0]}else ne=0;return ee.apply(void 0,arguments)}),ue=9007199254740991,le=/^(?:0|[1-9]\d*)$/;function ce(e,n){var t=typeof e;return!!(n=null==n?ue:n)&&("number"==t||"symbol"!=t&&le.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=pe}function xe(e){return null!=e&&be(e.length)&&!H(e)}function ge(e,n,t){if(!M(t))return!1;var r=typeof n;return!!("number"==r?xe(t)&&ce(n,t.length):"string"==r&&n in t)&&he(t[n],e)}var ve=Object.prototype;function ye(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ve)}function we(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=We.length>3&&"function"==typeof a?(r--,a):void 0,o&&ge(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function bn(e){return null==e?[]:function(e,n){return b(n,(function(n){return e[n]}))}(e,Ie(e))}var xn=qe&&qe.isRegExp,gn=xn?Fe(xn):function(e){return m(e)&&"[object RegExp]"==f(e)},vn=Math.floor,yn=Math.random;function wn(e,n){return e+vn(yn()*(n-e+1))}var kn=parseFloat,An=Math.min,Cn=Math.random;function Mn(e,n,t){if(t&&"boolean"!=typeof t&&ge(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=_(e),void 0===n?(n=e,e=0):n=_(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=Cn();return An(e+a*(n-e+kn("1e-"+((a+"").length-1))),n)}return wn(e,n)}var jn=Math.ceil,En=Math.max;var On,Sn=function(e,n,t){return t&&"number"!=typeof t&&ge(e,n,t)&&(n=t=void 0),e=_(e),void 0===n?(n=e,e=0):n=_(n),function(e,n,t,r){for(var a=-1,o=En(jn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?eLn)return[];var t,r=Hn,a=Nn(e,Hn);e-=Hn;for(var o=we(a,n="function"==typeof(t=n)?t:D);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=Mn(t,r,!1);return parseFloat(Mn(e,n,!0).toFixed(a))},nt=function(e,n,t=!1){return t?Mn(0,e+n)>e?!t:t:Mn(10,-10)>0},tt={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};tt.alpha=tt.lower+tt.upper,tt.default=tt.lower+tt.upper+tt.number+tt.symbol;const rt=function(e="default"){return tt.hasOwnProperty(e.toLocaleLowerCase())&&(e=tt[e.toLowerCase()]),Fn(e)},at=function(...e){let n,t,r,a;switch(e.length){case 0:n=Qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Qn(r,a));break;case 3:[t,r,a]=e,n=Qn(r,a)}return Bn(n,(()=>rt(t))).join("")};function ot(e,n){return e(n={exports:{}},n.exports),n.exports}var ut={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},lt=ot((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),ct=ot((function(e){var n=Object.hasOwnProperty,t=Object.create(null);for(var r in ut)n.call(ut,r)&&(t[ut[r]]=r);var a=e.exports={to:{},get:{}};function o(e,n,t){return Math.min(Math.max(n,e),t)}function u(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}a.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=a.get.hsl(e),t="hsl";break;case"hwb":n=a.get.hwb(e),t="hwb";break;default:n=a.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},a.get.rgb=function(e){if(!e)return null;var t,r,a,u=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(a=t[2],t=t[1],r=0;r<3;r++){var l=2*r;u[r]=parseInt(t.slice(l,l+2),16)}a&&(u[3]=parseInt(a,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(a=(t=t[1])[3],r=0;r<3;r++)u[r]=parseInt(t[r]+t[r],16);a&&(u[3]=parseInt(a+a,16)/255)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(r=0;r<3;r++)u[r]=parseInt(t[r+1],0);t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(t=e.match(/^(\w+)$/))?"transparent"===t[1]?[0,0,0,0]:n.call(ut,t[1])?((u=ut[t[1]])[3]=1,u):null:null;for(r=0;r<3;r++)u[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}for(r=0;r<3;r++)u[r]=o(u[r],0,255);return u[3]=o(u[3],0,1),u},a.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.to.hex=function(){var e=lt(arguments);return"#"+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(255*e[3])):"")},a.to.rgb=function(){var e=lt(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},a.to.rgb.percent=function(){var e=lt(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},a.to.hsl=function(){var e=lt(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},a.to.hwb=function(){var e=lt(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},a.to.keyword=function(e){return t[e.slice(0,3)]}}));ct.to,ct.get;var it={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ht=ot((function(e){var n={};for(var t in it)it.hasOwnProperty(t)&&(n[it[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in it)if(it.hasOwnProperty(l)){var c=it[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function st(e){var n=function(){for(var e={},n=Object.keys(ht),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var pt=dt,bt=[].slice,xt=["keyword","gray","hex"],gt={};Object.keys(pt).forEach((function(e){gt[bt.call(pt[e].labels).sort().join("")]=e}));var vt={};function yt(e,n){if(!(this instanceof yt))return new yt(e,n);if(n&&n in xt&&(n=null),n&&!(n in pt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof yt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=ct.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=pt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=pt[this.model].channels;var o=bt.call(e,0,r);this.color=At(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in gt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=gt[l];var c=pt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return yt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return yt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(pt).forEach((function(e){if(-1===xt.indexOf(e)){var n=pt[e].channels;yt.prototype[e]=function(){if(this.model===e)return new yt(this);if(arguments.length)return new yt(arguments,e);var t,r="number"==typeof arguments[n]?n:this.valpha;return new yt((t=pt[this.model][e].raw(this.color),Array.isArray(t)?t:[t]).concat(r),e)},yt[e]=function(t){return"number"==typeof t&&(t=At(bt.call(arguments),n)),new yt(t,e)}}}));var Ct=yt,Mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const jt=function(e,...n){let t,r,a;switch(n.length){case 0:return Fn(e);case 1:return[a]=n,qn(e,a);case 2:return[t,r]=n,qn(e,Mn(t,r))}},Et=function(e,n,t){const r=(x(a=e)?Pn:zn)(a);var a;switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},Ot={},St=function(...e){1===e.length&&(e=e[0]);const n=St.options.context.templatePath.join("."),t=Ot[n]=Ot[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let Tt;function Ft(e,n){return Tt=Tt||Math.random(),Tt+=.618033988749895,Tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Ct.hsv(360*Tt,100*e,100*n)}function _t(){return Ft().hex()}var $t={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:Dt,lastName:qt,cfirstName:Pt,clastName:zt}=$t;function Lt(){const e=Dt.male.concat();return jt(e)}function Ht(){return jt(qt)}function Nt(){return jt(Pt)}function Bt(){return jt(zt)}var It,Ut=new Uint8Array(16);function Gt(){if(!It&&!(It="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return It(Ut)}var Wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Jt=[],Kt=0;Kt<256;++Kt)Jt.push((Kt+256).toString(16).substr(1));function Yt(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Jt[e[n+0]]+Jt[e[n+1]]+Jt[e[n+2]]+Jt[e[n+3]]+"-"+Jt[e[n+4]]+Jt[e[n+5]]+"-"+Jt[e[n+6]]+Jt[e[n+7]]+"-"+Jt[e[n+8]]+Jt[e[n+9]]+"-"+Jt[e[n+10]]+Jt[e[n+11]]+Jt[e[n+12]]+Jt[e[n+13]]+Jt[e[n+14]]+Jt[e[n+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Wt.test(e)}(t))throw TypeError("Stringified UUID is invalid");return t}function Vt(e,n,t){var r=(e=e||{}).random||(e.rng||Gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return Yt(r)}var Xt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Zt=Object.keys(Xt),Qt=Object.entries(Xt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})),er=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Qt);var nr={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const tr=new RegExp(`(${Object.keys(nr).join("|")})`,"g");function rr(e="yyyy-MM-dd"){return ar(or(),e)}function ar(e,n){return n.replace(tr,(function n(t,r){const a=nr[r];return"function"==typeof a?a(e):a in nr?n(t,a):e[a]()}))}function or(e=new Date(0),n=new Date){return new Date(Zn(e.getTime(),n.getTime()))}let ur=0;const lr=function(e){return ur+=+e||1},cr=lr;function ir(e=12,n=18){return dn(Bn(Mn(e,n),(()=>hr())).join(" "))+"."}function hr(e=3,n=10){return Bn(Mn(e,n),(()=>rt("lower"))).join("")}function sr(e=12,n=18){return Bn(Mn(e,n),(()=>mr())).join("")+"。"}const fr="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";function mr(...e){let n,t,r=1,a=fr;switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Qn(n,t));break;case 3:[a,n,t]=e,r=Qn(n,t)}return qn(a,r).join("")}const dr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),pr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function br(){return jt(dr)}function xr(e){return`${hr()}.${e||gr()}`}function gr(){return jt(pr)}var vr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},yr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:wr,_screenSize:kr,_videoSize:Ar}=vr,Cr=Object.keys(yr);function Mr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=jt(wr)),r=(r||_t()).replace(/^#/,""),t=(t||_t()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const jr=["东北","华北","华东","华中","华南","西南","西北"];function Er(e){let n;if("array"===In(e))n=e;else n=[e];return n}var Or=Object.freeze({__proto__:null,integer:Zn,isNumber:Vn,random:Mn,natural:Qn,int:Zn,float:et,boolean:nt,bool:nt,character:rt,char:rt,string:at,str:at,range:Sn,color:function(e){return e||Mt[e]?Mt[e].nicer:jt(Rt).hex},hex:_t,rgb:function(){return Ft().hsv().string()},rgba:function(){return Ft().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return Ft().hsl().string()},_goldenRatioColor:Ft,first:Lt,last:Ht,name:function(e){return e=e?` ${Lt()} `:" ",`${Lt()}${e}${Ht()}`},cfirst:Nt,clast:Bt,cname:function(){return Nt()+Bt()},capitalize:dn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:jt,shuffle:Et,order:St,d4:function(){return Qn(1,4)},d6:function(){return Qn(1,6)},d8:function(){return Qn(1,8)},d12:function(){return Qn(1,12)},d20:function(){return Qn(1,20)},d100:function(){return Qn(1,100)},guid:function(){return Vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Vt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=jt(er).id+rr("yyyyMMdd")+at("number",3);for(let r=0;rir())).join("\n")},word:hr,sentence:ir,title:function(e=3,n=7){return Bn(Mn(e,n),(()=>dn(hr()))).join("")},ctitle:function(e=3,n=7){return Bn(Mn(e,n),(()=>mr())).join("")},csentence:sr,cparagraph:function(e=3,n=7){return Bn(Mn(e,n),(()=>sr())).join("\n")},cword:mr,protocol:br,domain:xr,tld:gr,email:function(e){return`${rt("lower")}.${hr()}@${e||hr()+"."+gr()}`},ip:function(){return[...Array(4)].map((()=>Qn(0,255))).join(".")},url:function(e,n){return`${e||br()}://${n||xr()}/${hr()}`},_patternLetters:nr,_rformat:tr,_formatDate:ar,_randomDate:or,time:function(e="HH:mm:ss"){return rr(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return rr(e)},date:rr,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}if("week"===e)t.setDate(t.getDate()-t.getDay());return ar(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?or(e,n).getTime():or().getTime()},_adSize:wr,_screenSize:kr,_videoSize:Ar,image:Mr,img:Mr,_brandColors:yr,_brandNames:Cr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=jt(wr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=yr[jt(Cr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return jt(jr)},province:function(){return jt(er).name},city:function(e){const n=jt(er),t=jt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=jt(er),t=jt(n.children),r=jt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Qn(0,9);return n},genFile:function(e){return new File(Er(e),hr())},genBlob:function(e){return new Blob(Er(e))}}),Sr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Rr(e=""){"string"!=typeof e&&(e+="");const n=e.match(Sr.RE_KEY),t=n&&n[3]&&n[3].match(Sr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Zn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Sr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Zn(l,c):void 0},h=Object.keys(i).some((e=>void 0!==e));return h?i:{}}function Tr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=jt(ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ga(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(ga(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function Fr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?nt(n,e,r):r}function _r(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function $r({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=et(n,t,r,a)})):u=n&&!a[2]?t:o,u}function Dr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=Et(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(Sr.RE_KEY);c&&c[2]&&"number"===In(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function qr(e){this.type=e,this.offset=qr.offset(),this.text=qr.text()}function Pr(e,n){qr.call(this,"alternate"),this.left=e,this.right=n}function zr(e){qr.call(this,"match"),this.body=e.filter(Boolean)}function Lr(e,n){qr.call(this,e),this.body=n}function Hr(e){Lr.call(this,"capture-group"),this.index=Qr[this.offset]||(Qr[this.offset]=Zr++),this.body=e}function Nr(e,n){qr.call(this,"quantified"),this.body=e,this.quantifier=n}function Br(e,n){qr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Ir(e,n){qr.call(this,"charset"),this.invert=e,this.body=n}function Ur(e,n){qr.call(this,"range"),this.start=e,this.end=n}function Gr(e){qr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Wr(e){qr.call(this,"unicode"),this.code=e.toUpperCase()}function Jr(e){qr.call(this,"hex"),this.code=e.toUpperCase()}function Kr(e){qr.call(this,"octal"),this.code=e.toUpperCase()}function Yr(e){qr.call(this,"back-reference"),this.code=e.toUpperCase()}function Vr(e){qr.call(this,"control-character"),this.code=e.toUpperCase()}var Xr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t,r;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return r=n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input","Expected "+t+" but "+r+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(e){return Et!==e&&(Et>e&&(Et=0,Ot={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ot,Et,e),Et=e),Ot}function r(e){St>Mt||(Mt>St&&(St=Mt,Rt=[]),Rt.push(e))}function a(){var e,t,h,s,f;return e=Mt,t=function(){var e,n,t,r,a;if(e=Mt,n=u(),null===n&&(n=X),null!==n)if(t=Mt,Tt++,r=i(),Tt--,null===r?t=X:(Mt=t,t=V),null!==t){for(r=[],null===(a=c())&&(a=o());null!==a;)r.push(a),null===(a=c())&&(a=o());null!==r?(null===(a=l())&&(a=X),null!==a?(jt=e,null===(n=ne(n,r,a))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return e}(),null!==t?(h=Mt,124===n.charCodeAt(Mt)?(s=Z,Mt++):(s=null,0===Tt&&r(Q)),null!==s?null!==(f=a())?h=s=[s,f]:(Mt=h,h=V):(Mt=h,h=V),null===h&&(h=X),null!==h?(jt=e,null===(t=ee(t,h))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function o(){var e;return null===(e=g())&&(null===(e=v())&&(e=function(){var e;return e=A(),null===e&&(e=function(){var e;return e=j(),null===e&&(e=E(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=H(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))))),e}(),null===e&&(e=C())),e}())),e}function u(){var e,t;return e=Mt,94===n.charCodeAt(Mt)?(t=te,Mt++):(t=null,0===Tt&&r(re)),null!==t&&(jt=e,t=ae()),null===t?(Mt=e,e=t):e=t,e}function l(){var e,t;return e=Mt,36===n.charCodeAt(Mt)?(t=oe,Mt++):(t=null,0===Tt&&r(ue)),null!==t&&(jt=e,t=le()),null===t?(Mt=e,e=t):e=t,e}function c(){var e,n,t;return e=Mt,null!==(n=o())?null!==(t=i())?(jt=e,null===(n=ce(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V):(Mt=e,e=V),e}function i(){var e,n,t;return Tt++,e=Mt,n=function(){var e;return e=h(),null===e&&(e=s(),null===e&&(e=f(),null===e&&(e=m(),null===e&&(e=d(),null===e&&(e=p()))))),e}(),null!==n?(null===(t=b())&&(t=X),null!==t?(jt=e,null===(n=he(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(n=null,0===Tt&&r(ie)),e}function h(){var e,t,a,o,u,l;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(44===n.charCodeAt(Mt)?(o=me,Mt++):(o=null,0===Tt&&r(de)),null!==o?null!==(u=x())?(125===n.charCodeAt(Mt)?(l=pe,Mt++):(l=null,0===Tt&&r(be)),null!==l?(jt=e,null===(t=xe(a,u))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function s(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(n.substr(Mt,2)===ge?(o=ge,Mt+=2):(o=null,0===Tt&&r(ve)),null!==o?(jt=e,null===(t=ye(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function f(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(125===n.charCodeAt(Mt)?(o=pe,Mt++):(o=null,0===Tt&&r(be)),null!==o?(jt=e,null===(t=we(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function m(){var e,t;return e=Mt,43===n.charCodeAt(Mt)?(t=ke,Mt++):(t=null,0===Tt&&r(Ae)),null!==t&&(jt=e,t=Ce()),null===t?(Mt=e,e=t):e=t,e}function d(){var e,t;return e=Mt,42===n.charCodeAt(Mt)?(t=Me,Mt++):(t=null,0===Tt&&r(je)),null!==t&&(jt=e,t=Ee()),null===t?(Mt=e,e=t):e=t,e}function p(){var e,t;return e=Mt,63===n.charCodeAt(Mt)?(t=Oe,Mt++):(t=null,0===Tt&&r(Se)),null!==t&&(jt=e,t=Re()),null===t?(Mt=e,e=t):e=t,e}function b(){var e;return 63===n.charCodeAt(Mt)?(e=Oe,Mt++):(e=null,0===Tt&&r(Se)),e}function x(){var e,t,a;if(e=Mt,t=[],Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe)),null!==a)for(;null!==a;)t.push(a),Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe));else t=V;return null!==t&&(jt=e,t=_e(t)),null===t?(Mt=e,e=t):e=t,e}function g(){var e,t,o,u;return e=Mt,40===n.charCodeAt(Mt)?(t=$e,Mt++):(t=null,0===Tt&&r(De)),null!==t?(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===Ie?(t=Ie,Mt+=2):(t=null,0===Tt&&r(Ue)),null!==t?(o=a(),null!==o?(jt=e,t=Ge(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===We?(t=We,Mt+=2):(t=null,0===Tt&&r(Je)),null!==t?(o=a(),null!==o?(jt=e,t=Ke(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===He?(t=He,Mt+=2):(t=null,0===Tt&&r(Ne)),null!==t?(o=a(),null!==o?(jt=e,t=Be(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,n;return e=Mt,n=a(),null!==n&&(jt=e,n=Le(n)),null===n?(Mt=e,e=n):e=n,e}()))),null!==o?(41===n.charCodeAt(Mt)?(u=qe,Mt++):(u=null,0===Tt&&r(Pe)),null!==u?(jt=e,null===(t=ze(o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)):(Mt=e,e=V),e}function v(){var e,t,a,o,u;if(Tt++,e=Mt,91===n.charCodeAt(Mt)?(t=Ve,Mt++):(t=null,0===Tt&&r(Xe)),null!==t)if(94===n.charCodeAt(Mt)?(a=te,Mt++):(a=null,0===Tt&&r(re)),null===a&&(a=X),null!==a){for(o=[],null===(u=y())&&(u=w());null!==u;)o.push(u),null===(u=y())&&(u=w());null!==o?(93===n.charCodeAt(Mt)?(u=Ze,Mt++):(u=null,0===Tt&&r(Qe)),null!==u?(jt=e,null===(t=en(a,o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return Tt--,null===e&&(t=null,0===Tt&&r(Ye)),e}function y(){var e,t,a,o;return Tt++,e=Mt,null!==(t=w())?(45===n.charCodeAt(Mt)?(a=tn,Mt++):(a=null,0===Tt&&r(rn)),null!==a?null!==(o=w())?(jt=e,null===(t=an(t,o))?(Mt=e,e=t):e=t):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(t=null,0===Tt&&r(nn)),e}function w(){var e;return Tt++,null===(e=function(){var e;return e=M(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))),e}())&&(e=k()),Tt--,null===e&&0===Tt&&r(on),e}function k(){var e,t;return e=Mt,un.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(ln)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,e}function A(){var e,t;return e=Mt,46===n.charCodeAt(Mt)?(t=hn,Mt++):(t=null,0===Tt&&r(sn)),null!==t&&(jt=e,t=fn()),null===t?(Mt=e,e=t):e=t,e}function C(){var e,t;return Tt++,e=Mt,dn.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(pn)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,Tt--,null===e&&(t=null,0===Tt&&r(mn)),e}function M(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=gn()),null===t?(Mt=e,e=t):e=t,e}function j(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=vn()),null===t?(Mt=e,e=t):e=t,e}function E(){var e,t;return e=Mt,n.substr(Mt,2)===yn?(t=yn,Mt+=2):(t=null,0===Tt&&r(wn)),null!==t&&(jt=e,t=kn()),null===t?(Mt=e,e=t):e=t,e}function O(){var e,t;return e=Mt,n.substr(Mt,2)===An?(t=An,Mt+=2):(t=null,0===Tt&&r(Cn)),null!==t&&(jt=e,t=Mn()),null===t?(Mt=e,e=t):e=t,e}function S(){var e,t;return e=Mt,n.substr(Mt,2)===jn?(t=jn,Mt+=2):(t=null,0===Tt&&r(En)),null!==t&&(jt=e,t=On()),null===t?(Mt=e,e=t):e=t,e}function R(){var e,t;return e=Mt,n.substr(Mt,2)===Sn?(t=Sn,Mt+=2):(t=null,0===Tt&&r(Rn)),null!==t&&(jt=e,t=Tn()),null===t?(Mt=e,e=t):e=t,e}function T(){var e,t;return e=Mt,n.substr(Mt,2)===Fn?(t=Fn,Mt+=2):(t=null,0===Tt&&r(_n)),null!==t&&(jt=e,t=$n()),null===t?(Mt=e,e=t):e=t,e}function F(){var e,t;return e=Mt,n.substr(Mt,2)===Dn?(t=Dn,Mt+=2):(t=null,0===Tt&&r(qn)),null!==t&&(jt=e,t=Pn()),null===t?(Mt=e,e=t):e=t,e}function _(){var e,t;return e=Mt,n.substr(Mt,2)===zn?(t=zn,Mt+=2):(t=null,0===Tt&&r(Ln)),null!==t&&(jt=e,t=Hn()),null===t?(Mt=e,e=t):e=t,e}function $(){var e,t;return e=Mt,n.substr(Mt,2)===Nn?(t=Nn,Mt+=2):(t=null,0===Tt&&r(Bn)),null!==t&&(jt=e,t=In()),null===t?(Mt=e,e=t):e=t,e}function D(){var e,t;return e=Mt,n.substr(Mt,2)===Un?(t=Un,Mt+=2):(t=null,0===Tt&&r(Gn)),null!==t&&(jt=e,t=Wn()),null===t?(Mt=e,e=t):e=t,e}function q(){var e,t;return e=Mt,n.substr(Mt,2)===Jn?(t=Jn,Mt+=2):(t=null,0===Tt&&r(Kn)),null!==t&&(jt=e,t=Yn()),null===t?(Mt=e,e=t):e=t,e}function P(){var e,t;return e=Mt,n.substr(Mt,2)===Vn?(t=Vn,Mt+=2):(t=null,0===Tt&&r(Xn)),null!==t&&(jt=e,t=Zn()),null===t?(Mt=e,e=t):e=t,e}function z(){var e,t;return e=Mt,n.substr(Mt,2)===Qn?(t=Qn,Mt+=2):(t=null,0===Tt&&r(et)),null!==t&&(jt=e,t=nt()),null===t?(Mt=e,e=t):e=t,e}function L(){var e,t,a;return e=Mt,n.substr(Mt,2)===tt?(t=tt,Mt+=2):(t=null,0===Tt&&r(rt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=ot(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function H(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(ct.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(it)),null!==a?(jt=e,null===(t=ht(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function N(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t){if(a=[],mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt)),null!==o)for(;null!==o;)a.push(o),mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt));else a=V;null!==a?(jt=e,null===(t=pt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function B(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===bt?(t=bt,Mt+=2):(t=null,0===Tt&&r(xt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=yt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function I(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===wt?(t=wt,Mt+=2):(t=null,0===Tt&&r(kt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=At(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function U(){var e,t;return e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t&&(jt=e,t=Ct()),null===t?(Mt=e,e=t):e=t,e}function G(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=cn(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}var W,J=arguments.length>1?arguments[1]:{},K={regexp:a},Y=a,V=null,X="",Z="|",Q='"|"',ee=function(e,n){return n?new Pr(e,n[1]):e},ne=function(e,n,t){return new zr([e].concat(n).concat([t]))},te="^",re='"^"',ae=function(){return new qr("start")},oe="$",ue='"$"',le=function(){return new qr("end")},ce=function(e,n){return new Nr(e,n)},ie="Quantifier",he=function(e,n){return n&&(e.greedy=!1),e},se="{",fe='"{"',me=",",de='","',pe="}",be='"}"',xe=function(e,n){return new Br(e,n)},ge=",}",ve='",}"',ye=function(e){return new Br(e,1/0)},we=function(e){return new Br(e,e)},ke="+",Ae='"+"',Ce=function(){return new Br(1,1/0)},Me="*",je='"*"',Ee=function(){return new Br(0,1/0)},Oe="?",Se='"?"',Re=function(){return new Br(0,1)},Te=/^[0-9]/,Fe="[0-9]",_e=function(e){return+e.join("")},$e="(",De='"("',qe=")",Pe='")"',ze=function(e){return e},Le=function(e){return new Hr(e)},He="?:",Ne='"?:"',Be=function(e){return new Lr("non-capture-group",e)},Ie="?=",Ue='"?="',Ge=function(e){return new Lr("positive-lookahead",e)},We="?!",Je='"?!"',Ke=function(e){return new Lr("negative-lookahead",e)},Ye="CharacterSet",Ve="[",Xe='"["',Ze="]",Qe='"]"',en=function(e,n){return new Ir(!!e,n)},nn="CharacterRange",tn="-",rn='"-"',an=function(e,n){return new Ur(e,n)},on="Character",un=/^[^\\\]]/,ln="[^\\\\\\]]",cn=function(e){return new Gr(e)},hn=".",sn='"."',fn=function(){return new qr("any-character")},mn="Literal",dn=/^[^|\\\/.[()?+*$\^]/,pn="[^|\\\\\\/.[()?+*$\\^]",bn="\\b",xn='"\\\\b"',gn=function(){return new qr("backspace")},vn=function(){return new qr("word-boundary")},yn="\\B",wn='"\\\\B"',kn=function(){return new qr("non-word-boundary")},An="\\d",Cn='"\\\\d"',Mn=function(){return new qr("digit")},jn="\\D",En='"\\\\D"',On=function(){return new qr("non-digit")},Sn="\\f",Rn='"\\\\f"',Tn=function(){return new qr("form-feed")},Fn="\\n",_n='"\\\\n"',$n=function(){return new qr("line-feed")},Dn="\\r",qn='"\\\\r"',Pn=function(){return new qr("carriage-return")},zn="\\s",Ln='"\\\\s"',Hn=function(){return new qr("white-space")},Nn="\\S",Bn='"\\\\S"',In=function(){return new qr("non-white-space")},Un="\\t",Gn='"\\\\t"',Wn=function(){return new qr("tab")},Jn="\\v",Kn='"\\\\v"',Yn=function(){return new qr("vertical-tab")},Vn="\\w",Xn='"\\\\w"',Zn=function(){return new qr("word")},Qn="\\W",et='"\\\\W"',nt=function(){return new qr("non-word")},tt="\\c",rt='"\\\\c"',at="any character",ot=function(e){return new Vr(e)},ut="\\",lt='"\\\\"',ct=/^[1-9]/,it="[1-9]",ht=function(e){return new Yr(e)},st="\\0",ft='"\\\\0"',mt=/^[0-7]/,dt="[0-7]",pt=function(e){return new Kr(e.join(""))},bt="\\x",xt='"\\\\x"',gt=/^[0-9a-fA-F]/,vt="[0-9a-fA-F]",yt=function(e){return new Jr(e.join(""))},wt="\\u",kt='"\\\\u"',At=function(e){return new Wr(e.join(""))},Ct=function(){return new qr("null-character")},Mt=0,jt=0,Et=0,Ot={line:1,column:1,seenCR:!1},St=0,Rt=[],Tt=0;if("startRule"in J){if(!(J.startRule in K))throw new Error("Can't start parsing from rule \""+J.startRule+'".');Y=K[J.startRule]}if(qr.offset=function(){return jt},qr.text=function(){return n.substring(jt,Mt)},null!==(W=Y())&&Mt===n.length)return W;throw function(e){var n=0;for(e.sort();nString.fromCharCode(n+e))).join("")}ea.gen=function(e,n,t){return t=t||{guid:1},ea[e.type]?ea[e.type](e,n,t):ea.token(e,n,t)},ea.extend({token:function(e,n,t){switch(e.type){case"start":case"end":case"backspace":case"word-boundary":return"";case"any-character":return rt();case"non-word-boundary":case"form-feed":case"carriage-return":case"tab":case"vertical-tab":break;case"digit":return jt(ra.split(""));case"non-digit":return jt((na+ta+aa).split(""));case"line-feed":return e.body||e.text;case"white-space":return jt(ua.split(""));case"non-white-space":case"word":return jt((na+ta+ra).split(""));case"non-word":return jt(aa.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(nt()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=fa(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return sa(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ga(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Or)&&!(u in Or))return e;o=o?o.split(/\s*,\s*/).map((e=>(Sr.RE_PLACEHOLDER.exec(""),Sr.RE_PLACEHOLDER.test(e)?da(e,n,t,r):e))):[];const c=Or[a]||Or[u];switch(In(c)){case"array":return jt(c);case"function":{c.options=r;const e=c.apply(Or,o)||"";return delete c.options,e}}}function pa(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(Sr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=da(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Un(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?at(t):o;return u}var ba=Object.freeze({__proto__:null,array:Tr,boolean:Fr,function:_r,number:$r,object:Dr,regexp:ha,string:pa});let xa=1;function ga(e,n="",t={}){const r={path:t.path||[xa],templatePath:t.templatePath||[xa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=In(e),o=ba[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Sr.RE_KEY,"$1"):n,rule:Rr(n),context:r}),r.root||(r.root=u),u):e}const va={gen:ga,extend:Gn};function ya(e,n,t=[]){const r={name:"string"==typeof n?n.replace(Sr.RE_KEY,"$1"):n,template:e,type:In(e),rule:Rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ya(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ya(e,n,r.path)))}return r}function wa(e,n){const t=ya(e),r=ka.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:da,getValueByKeyPath:sa,normalizePath:fa,splitPathToArray:ma});const ka={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return Aa.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Aa.equal("type",e.path,In(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return Aa.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return r.length===a}return Aa.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&Aa.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(Aa.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),Aa.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&Aa.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Aa.equal("properties length",e.path,u.length,o.min,r)):Aa.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1}};wa.Diff=ka,wa.Assert=Aa;const Ca={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Ma({url:e,type:n}){n=n.toLowerCase();for(const t in Ca){const r=Ca[t],{rurl:a,rtype:o}=r;if(ja(a,e)&&ja(o,n))return r}return!1}function ja(e,n){switch(In(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function Ea({template:e},n){return H(e)?e(n):ga(e)}const Oa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],Sa=Symbol("Body internals"),Ra=Symbol("Response internals");async function Ta(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class Fa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):Oa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[Sa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[Sa].body}get bodyUsed(){return this[Sa].disturbed}async arrayBuffer(){return(await Ta(this[Sa])).arrayBuffer()}async blob(){return Ta(this[Sa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await Ta(this[Sa])).text()}}Object.defineProperties(Fa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const _a=new Set([301,302,303,307,308]),$a=globalThis.window&&globalThis.window.Response||class{};class Da extends Fa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":Oa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[Sa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[Ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[Ra].type}get url(){return this[Ra].url||""}get status(){return this[Ra].status}get ok(){return this[Ra].status>=200&&this[Ra].status<300}get redirected(){return this[Ra].counter>0}get statusText(){return this[Ra].statusText}get headers(){return this[Ra].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new $a(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!_a.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new $a(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new $a(null,{status:0,statusText:""});return e[Ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties($a.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const qa=globalThis.window||{},Pa=qa.fetch;async function za(e,n={}){if(!0===qa.fetch.$mock){const t=Ma({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=Ea(t,{});return console.warn("mock代理中"),new Da(e,n)}}return console.warn("未使用 mockjs"),Pa(e,n)}var La="OK";const Ha=function(){},Na=globalThis.window||{},Ba=void 0!==Na?Na.XMLHttpRequest:class{},Ia=Ba.prototype.send||Ha,Ua=Ba.prototype.open||Ha;class Ga extends Ba{constructor(...e){super(...e)}_send=Ia;_open=Ua;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Ma({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=La;const e=Ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&qa.fetch&&!qa.fetch.hasOwnProperty("$mock")&&(qa.fetch=za,qa.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Wa=globalThis.window||{};const Ja={Handler:va,Random:Or,Util:Yn,XHR:Ga,RE:ia,toJSONSchema:ya,valid:wa,heredoc:Jn,setup:function(e){return Ga.setup(e)},_mocked:Ca,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,va.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Wa.XMLHttpRequest!==Ga&&(Wa.XMLHttpRequest=Ga),Ca.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ja; diff --git a/dist/mock.min.js b/dist/mock.min.js new file mode 100644 index 00000000..c87704a0 --- /dev/null +++ b/dist/mock.min.js @@ -0,0 +1,51 @@ +/** + * // esm 版本编写人 + * + * MIT License + * + * Copyright (c) 2020 动中之动 + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * // 原始代码编写人 + * + * The MIT License (MIT) + * + * Copyright (c) 2015 nuysoft + * http://mockjs.com/ + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of + * the Software, and to permit persons to whom the Software is furnished to do so, + * subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS + * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR + * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER + * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i="[object Null]",h="[object Undefined]",s=r?r.toStringTag:void 0;function f(e){return null==e?void 0===e?h:i:s&&s in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function m(e){return null!=e&&"object"==typeof e}var d="[object Symbol]";function p(e){return"symbol"==typeof e||m(e)&&f(e)==d}function b(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++ne>=800)return arguments[0]}else ne=0;return ee.apply(void 0,arguments)}),ue=9007199254740991,le=/^(?:0|[1-9]\d*)$/;function ce(e,n){var t=typeof e;return!!(n=null==n?ue:n)&&("number"==t||"symbol"!=t&&le.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=pe}function xe(e){return null!=e&&be(e.length)&&!H(e)}function ge(e,n,t){if(!C(t))return!1;var r=typeof n;return!!("number"==r?xe(t)&&ce(n,t.length):"string"==r&&n in t)&&he(t[n],e)}var ve=Object.prototype;function ye(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ve)}function we(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=We.length>3&&"function"==typeof a?(r--,a):void 0,o&&ge(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function bn(e){return null==e?[]:function(e,n){return b(n,(function(n){return e[n]}))}(e,Ie(e))}var xn=qe&&qe.isRegExp,gn=xn?Fe(xn):function(e){return m(e)&&"[object RegExp]"==f(e)},vn=Math.floor,yn=Math.random;function wn(e,n){return e+vn(yn()*(n-e+1))}var kn=parseFloat,An=Math.min,Mn=Math.random;function Cn(e,n,t){if(t&&"boolean"!=typeof t&&ge(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=_(e),void 0===n?(n=e,e=0):n=_(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=Mn();return An(e+a*(n-e+kn("1e-"+((a+"").length-1))),n)}return wn(e,n)}var jn=Math.ceil,En=Math.max;var On,Sn=function(e,n,t){return t&&"number"!=typeof t&&ge(e,n,t)&&(n=t=void 0),e=_(e),void 0===n?(n=e,e=0):n=_(n),function(e,n,t,r){for(var a=-1,o=En(jn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?eLn)return[];var t,r=Hn,a=Nn(e,Hn);e-=Hn;for(var o=we(a,n="function"==typeof(t=n)?t:D);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=Cn(t,r,!1);return parseFloat(Cn(e,n,!0).toFixed(a))},nt=function(e,n,t=!1){return t?Cn(0,e+n)>e?!t:t:Cn(10,-10)>0},tt={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};tt.alpha=tt.lower+tt.upper,tt.default=tt.lower+tt.upper+tt.number+tt.symbol;const rt=function(e="default"){return tt.hasOwnProperty(e.toLocaleLowerCase())&&(e=tt[e.toLowerCase()]),Fn(e)},at=function(...e){let n,t,r,a;switch(e.length){case 0:n=Qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Qn(r,a));break;case 3:[t,r,a]=e,n=Qn(r,a)}return Bn(n,(()=>rt(t))).join("")};function ot(e,n){return e(n={exports:{}},n.exports),n.exports}var ut={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},lt=ot((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),ct=ot((function(e){var n=Object.hasOwnProperty,t=Object.create(null);for(var r in ut)n.call(ut,r)&&(t[ut[r]]=r);var a=e.exports={to:{},get:{}};function o(e,n,t){return Math.min(Math.max(n,e),t)}function u(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}a.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=a.get.hsl(e),t="hsl";break;case"hwb":n=a.get.hwb(e),t="hwb";break;default:n=a.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},a.get.rgb=function(e){if(!e)return null;var t,r,a,u=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(a=t[2],t=t[1],r=0;r<3;r++){var l=2*r;u[r]=parseInt(t.slice(l,l+2),16)}a&&(u[3]=parseInt(a,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(a=(t=t[1])[3],r=0;r<3;r++)u[r]=parseInt(t[r]+t[r],16);a&&(u[3]=parseInt(a+a,16)/255)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(r=0;r<3;r++)u[r]=parseInt(t[r+1],0);t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(t=e.match(/^(\w+)$/))?"transparent"===t[1]?[0,0,0,0]:n.call(ut,t[1])?((u=ut[t[1]])[3]=1,u):null:null;for(r=0;r<3;r++)u[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}for(r=0;r<3;r++)u[r]=o(u[r],0,255);return u[3]=o(u[3],0,1),u},a.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.to.hex=function(){var e=lt(arguments);return"#"+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(255*e[3])):"")},a.to.rgb=function(){var e=lt(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},a.to.rgb.percent=function(){var e=lt(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},a.to.hsl=function(){var e=lt(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},a.to.hwb=function(){var e=lt(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},a.to.keyword=function(e){return t[e.slice(0,3)]}}));ct.to,ct.get;var it={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ht=ot((function(e){var n={};for(var t in it)it.hasOwnProperty(t)&&(n[it[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in it)if(it.hasOwnProperty(l)){var c=it[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function st(e){var n=function(){for(var e={},n=Object.keys(ht),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var pt=dt,bt=[].slice,xt=["keyword","gray","hex"],gt={};Object.keys(pt).forEach((function(e){gt[bt.call(pt[e].labels).sort().join("")]=e}));var vt={};function yt(e,n){if(!(this instanceof yt))return new yt(e,n);if(n&&n in xt&&(n=null),n&&!(n in pt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof yt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=ct.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=pt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=pt[this.model].channels;var o=bt.call(e,0,r);this.color=At(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in gt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=gt[l];var c=pt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return yt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return yt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(pt).forEach((function(e){if(-1===xt.indexOf(e)){var n=pt[e].channels;yt.prototype[e]=function(){if(this.model===e)return new yt(this);if(arguments.length)return new yt(arguments,e);var t,r="number"==typeof arguments[n]?n:this.valpha;return new yt((t=pt[this.model][e].raw(this.color),Array.isArray(t)?t:[t]).concat(r),e)},yt[e]=function(t){return"number"==typeof t&&(t=At(bt.call(arguments),n)),new yt(t,e)}}}));var Mt=yt,Ct={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const jt=function(e,...n){let t,r,a;switch(n.length){case 0:return Fn(e);case 1:return[a]=n,qn(e,a);case 2:return[t,r]=n,qn(e,Cn(t,r))}},Et=function(e,n,t){const r=(x(a=e)?Pn:zn)(a);var a;switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},Ot={},St=function(...e){1===e.length&&(e=e[0]);const n=St.options.context.templatePath.join("."),t=Ot[n]=Ot[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let Tt;function Ft(e,n){return Tt=Tt||Math.random(),Tt+=.618033988749895,Tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Mt.hsv(360*Tt,100*e,100*n)}function _t(){return Ft().hex()}var $t={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:Dt,lastName:qt,cfirstName:Pt,clastName:zt}=$t;function Lt(){const e=Dt.male.concat();return jt(e)}function Ht(){return jt(qt)}function Nt(){return jt(Pt)}function Bt(){return jt(zt)}var It,Ut=new Uint8Array(16);function Gt(){if(!It&&!(It="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return It(Ut)}var Wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Jt=[],Kt=0;Kt<256;++Kt)Jt.push((Kt+256).toString(16).substr(1));function Yt(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Jt[e[n+0]]+Jt[e[n+1]]+Jt[e[n+2]]+Jt[e[n+3]]+"-"+Jt[e[n+4]]+Jt[e[n+5]]+"-"+Jt[e[n+6]]+Jt[e[n+7]]+"-"+Jt[e[n+8]]+Jt[e[n+9]]+"-"+Jt[e[n+10]]+Jt[e[n+11]]+Jt[e[n+12]]+Jt[e[n+13]]+Jt[e[n+14]]+Jt[e[n+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Wt.test(e)}(t))throw TypeError("Stringified UUID is invalid");return t}function Vt(e,n,t){var r=(e=e||{}).random||(e.rng||Gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return Yt(r)}var Xt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Zt=Object.keys(Xt),Qt=Object.entries(Xt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})),er=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Qt);var nr={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const tr=new RegExp(`(${Object.keys(nr).join("|")})`,"g");function rr(e="yyyy-MM-dd"){return ar(or(),e)}function ar(e,n){return n.replace(tr,(function n(t,r){const a=nr[r];return"function"==typeof a?a(e):a in nr?n(t,a):e[a]()}))}function or(e=new Date(0),n=new Date){return new Date(Zn(e.getTime(),n.getTime()))}let ur=0;const lr=function(e){return ur+=+e||1},cr=lr;function ir(e=12,n=18){return dn(Bn(Cn(e,n),(()=>hr())).join(" "))+"."}function hr(e=3,n=10){return Bn(Cn(e,n),(()=>rt("lower"))).join("")}function sr(e=12,n=18){return Bn(Cn(e,n),(()=>mr())).join("")+"。"}const fr="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";function mr(...e){let n,t,r=1,a=fr;switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Qn(n,t));break;case 3:[a,n,t]=e,r=Qn(n,t)}return qn(a,r).join("")}const dr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),pr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function br(){return jt(dr)}function xr(e){return`${hr()}.${e||gr()}`}function gr(){return jt(pr)}var vr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},yr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:wr,_screenSize:kr,_videoSize:Ar}=vr,Mr=Object.keys(yr);function Cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=jt(wr)),r=(r||_t()).replace(/^#/,""),t=(t||_t()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const jr=["东北","华北","华东","华中","华南","西南","西北"];function Er(e){let n;if("array"===In(e))n=e;else n=[e];return n}var Or=Object.freeze({__proto__:null,integer:Zn,isNumber:Vn,random:Cn,natural:Qn,int:Zn,float:et,boolean:nt,bool:nt,character:rt,char:rt,string:at,str:at,range:Sn,color:function(e){return e||Ct[e]?Ct[e].nicer:jt(Rt).hex},hex:_t,rgb:function(){return Ft().hsv().string()},rgba:function(){return Ft().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return Ft().hsl().string()},_goldenRatioColor:Ft,first:Lt,last:Ht,name:function(e){return e=e?` ${Lt()} `:" ",`${Lt()}${e}${Ht()}`},cfirst:Nt,clast:Bt,cname:function(){return Nt()+Bt()},capitalize:dn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:jt,shuffle:Et,order:St,d4:function(){return Qn(1,4)},d6:function(){return Qn(1,6)},d8:function(){return Qn(1,8)},d12:function(){return Qn(1,12)},d20:function(){return Qn(1,20)},d100:function(){return Qn(1,100)},guid:function(){return Vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Vt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=jt(er).id+rr("yyyyMMdd")+at("number",3);for(let r=0;rir())).join("\n")},word:hr,sentence:ir,title:function(e=3,n=7){return Bn(Cn(e,n),(()=>dn(hr()))).join("")},ctitle:function(e=3,n=7){return Bn(Cn(e,n),(()=>mr())).join("")},csentence:sr,cparagraph:function(e=3,n=7){return Bn(Cn(e,n),(()=>sr())).join("\n")},cword:mr,protocol:br,domain:xr,tld:gr,email:function(e){return`${rt("lower")}.${hr()}@${e||hr()+"."+gr()}`},ip:function(){return[...Array(4)].map((()=>Qn(0,255))).join(".")},url:function(e,n){return`${e||br()}://${n||xr()}/${hr()}`},_patternLetters:nr,_rformat:tr,_formatDate:ar,_randomDate:or,time:function(e="HH:mm:ss"){return rr(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return rr(e)},date:rr,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}if("week"===e)t.setDate(t.getDate()-t.getDay());return ar(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?or(e,n).getTime():or().getTime()},_adSize:wr,_screenSize:kr,_videoSize:Ar,image:Cr,img:Cr,_brandColors:yr,_brandNames:Mr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=jt(wr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=yr[jt(Mr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return jt(jr)},province:function(){return jt(er).name},city:function(e){const n=jt(er),t=jt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=jt(er),t=jt(n.children),r=jt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Qn(0,9);return n},genFile:function(e){return new File(Er(e),hr())},genBlob:function(e){return new Blob(Er(e))}}),Sr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Rr(e=""){"string"!=typeof e&&(e+="");const n=e.match(Sr.RE_KEY),t=n&&n[3]&&n[3].match(Sr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Zn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Sr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Zn(l,c):void 0},h=Object.keys(i).some((e=>void 0!==e));return h?i:{}}function Tr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=jt(ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ga(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(ga(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function Fr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?nt(n,e,r):r}function _r(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function $r({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=et(n,t,r,a)})):u=n&&!a[2]?t:o,u}function Dr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=Et(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(Sr.RE_KEY);c&&c[2]&&"number"===In(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function qr(e){this.type=e,this.offset=qr.offset(),this.text=qr.text()}function Pr(e,n){qr.call(this,"alternate"),this.left=e,this.right=n}function zr(e){qr.call(this,"match"),this.body=e.filter(Boolean)}function Lr(e,n){qr.call(this,e),this.body=n}function Hr(e){Lr.call(this,"capture-group"),this.index=Qr[this.offset]||(Qr[this.offset]=Zr++),this.body=e}function Nr(e,n){qr.call(this,"quantified"),this.body=e,this.quantifier=n}function Br(e,n){qr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Ir(e,n){qr.call(this,"charset"),this.invert=e,this.body=n}function Ur(e,n){qr.call(this,"range"),this.start=e,this.end=n}function Gr(e){qr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Wr(e){qr.call(this,"unicode"),this.code=e.toUpperCase()}function Jr(e){qr.call(this,"hex"),this.code=e.toUpperCase()}function Kr(e){qr.call(this,"octal"),this.code=e.toUpperCase()}function Yr(e){qr.call(this,"back-reference"),this.code=e.toUpperCase()}function Vr(e){qr.call(this,"control-character"),this.code=e.toUpperCase()}var Xr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t,r;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return r=n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input","Expected "+t+" but "+r+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(e){return Et!==e&&(Et>e&&(Et=0,Ot={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ot,Et,e),Et=e),Ot}function r(e){St>Ct||(Ct>St&&(St=Ct,Rt=[]),Rt.push(e))}function a(){var e,t,h,s,f;return e=Ct,t=function(){var e,n,t,r,a;if(e=Ct,n=u(),null===n&&(n=X),null!==n)if(t=Ct,Tt++,r=i(),Tt--,null===r?t=X:(Ct=t,t=V),null!==t){for(r=[],null===(a=c())&&(a=o());null!==a;)r.push(a),null===(a=c())&&(a=o());null!==r?(null===(a=l())&&(a=X),null!==a?(jt=e,null===(n=ne(n,r,a))?(Ct=e,e=n):e=n):(Ct=e,e=V)):(Ct=e,e=V)}else Ct=e,e=V;else Ct=e,e=V;return e}(),null!==t?(h=Ct,124===n.charCodeAt(Ct)?(s=Z,Ct++):(s=null,0===Tt&&r(Q)),null!==s?null!==(f=a())?h=s=[s,f]:(Ct=h,h=V):(Ct=h,h=V),null===h&&(h=X),null!==h?(jt=e,null===(t=ee(t,h))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}function o(){var e;return null===(e=g())&&(null===(e=v())&&(e=function(){var e;return e=A(),null===e&&(e=function(){var e;return e=j(),null===e&&(e=E(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=H(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))))),e}(),null===e&&(e=M())),e}())),e}function u(){var e,t;return e=Ct,94===n.charCodeAt(Ct)?(t=te,Ct++):(t=null,0===Tt&&r(re)),null!==t&&(jt=e,t=ae()),null===t?(Ct=e,e=t):e=t,e}function l(){var e,t;return e=Ct,36===n.charCodeAt(Ct)?(t=oe,Ct++):(t=null,0===Tt&&r(ue)),null!==t&&(jt=e,t=le()),null===t?(Ct=e,e=t):e=t,e}function c(){var e,n,t;return e=Ct,null!==(n=o())?null!==(t=i())?(jt=e,null===(n=ce(n,t))?(Ct=e,e=n):e=n):(Ct=e,e=V):(Ct=e,e=V),e}function i(){var e,n,t;return Tt++,e=Ct,n=function(){var e;return e=h(),null===e&&(e=s(),null===e&&(e=f(),null===e&&(e=m(),null===e&&(e=d(),null===e&&(e=p()))))),e}(),null!==n?(null===(t=b())&&(t=X),null!==t?(jt=e,null===(n=he(n,t))?(Ct=e,e=n):e=n):(Ct=e,e=V)):(Ct=e,e=V),Tt--,null===e&&(n=null,0===Tt&&r(ie)),e}function h(){var e,t,a,o,u,l;return e=Ct,123===n.charCodeAt(Ct)?(t=se,Ct++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(44===n.charCodeAt(Ct)?(o=me,Ct++):(o=null,0===Tt&&r(de)),null!==o?null!==(u=x())?(125===n.charCodeAt(Ct)?(l=pe,Ct++):(l=null,0===Tt&&r(be)),null!==l?(jt=e,null===(t=xe(a,u))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V),e}function s(){var e,t,a,o;return e=Ct,123===n.charCodeAt(Ct)?(t=se,Ct++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(n.substr(Ct,2)===ge?(o=ge,Ct+=2):(o=null,0===Tt&&r(ve)),null!==o?(jt=e,null===(t=ye(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V),e}function f(){var e,t,a,o;return e=Ct,123===n.charCodeAt(Ct)?(t=se,Ct++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(125===n.charCodeAt(Ct)?(o=pe,Ct++):(o=null,0===Tt&&r(be)),null!==o?(jt=e,null===(t=we(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V),e}function m(){var e,t;return e=Ct,43===n.charCodeAt(Ct)?(t=ke,Ct++):(t=null,0===Tt&&r(Ae)),null!==t&&(jt=e,t=Me()),null===t?(Ct=e,e=t):e=t,e}function d(){var e,t;return e=Ct,42===n.charCodeAt(Ct)?(t=Ce,Ct++):(t=null,0===Tt&&r(je)),null!==t&&(jt=e,t=Ee()),null===t?(Ct=e,e=t):e=t,e}function p(){var e,t;return e=Ct,63===n.charCodeAt(Ct)?(t=Oe,Ct++):(t=null,0===Tt&&r(Se)),null!==t&&(jt=e,t=Re()),null===t?(Ct=e,e=t):e=t,e}function b(){var e;return 63===n.charCodeAt(Ct)?(e=Oe,Ct++):(e=null,0===Tt&&r(Se)),e}function x(){var e,t,a;if(e=Ct,t=[],Te.test(n.charAt(Ct))?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(Fe)),null!==a)for(;null!==a;)t.push(a),Te.test(n.charAt(Ct))?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(Fe));else t=V;return null!==t&&(jt=e,t=_e(t)),null===t?(Ct=e,e=t):e=t,e}function g(){var e,t,o,u;return e=Ct,40===n.charCodeAt(Ct)?(t=$e,Ct++):(t=null,0===Tt&&r(De)),null!==t?(o=function(){var e,t,o;return e=Ct,n.substr(Ct,2)===Ie?(t=Ie,Ct+=2):(t=null,0===Tt&&r(Ue)),null!==t?(o=a(),null!==o?(jt=e,t=Ge(o),null===t?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Ct,n.substr(Ct,2)===We?(t=We,Ct+=2):(t=null,0===Tt&&r(Je)),null!==t?(o=a(),null!==o?(jt=e,t=Ke(o),null===t?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Ct,n.substr(Ct,2)===He?(t=He,Ct+=2):(t=null,0===Tt&&r(Ne)),null!==t?(o=a(),null!==o?(jt=e,t=Be(o),null===t?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}(),null===o&&(o=function(){var e,n;return e=Ct,n=a(),null!==n&&(jt=e,n=Le(n)),null===n?(Ct=e,e=n):e=n,e}()))),null!==o?(41===n.charCodeAt(Ct)?(u=qe,Ct++):(u=null,0===Tt&&r(Pe)),null!==u?(jt=e,null===(t=ze(o))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V)):(Ct=e,e=V),e}function v(){var e,t,a,o,u;if(Tt++,e=Ct,91===n.charCodeAt(Ct)?(t=Ve,Ct++):(t=null,0===Tt&&r(Xe)),null!==t)if(94===n.charCodeAt(Ct)?(a=te,Ct++):(a=null,0===Tt&&r(re)),null===a&&(a=X),null!==a){for(o=[],null===(u=y())&&(u=w());null!==u;)o.push(u),null===(u=y())&&(u=w());null!==o?(93===n.charCodeAt(Ct)?(u=Ze,Ct++):(u=null,0===Tt&&r(Qe)),null!==u?(jt=e,null===(t=en(a,o))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V)}else Ct=e,e=V;else Ct=e,e=V;return Tt--,null===e&&(t=null,0===Tt&&r(Ye)),e}function y(){var e,t,a,o;return Tt++,e=Ct,null!==(t=w())?(45===n.charCodeAt(Ct)?(a=tn,Ct++):(a=null,0===Tt&&r(rn)),null!==a?null!==(o=w())?(jt=e,null===(t=an(t,o))?(Ct=e,e=t):e=t):(Ct=e,e=V):(Ct=e,e=V)):(Ct=e,e=V),Tt--,null===e&&(t=null,0===Tt&&r(nn)),e}function w(){var e;return Tt++,null===(e=function(){var e;return e=C(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))),e}())&&(e=k()),Tt--,null===e&&0===Tt&&r(on),e}function k(){var e,t;return e=Ct,un.test(n.charAt(Ct))?(t=n.charAt(Ct),Ct++):(t=null,0===Tt&&r(ln)),null!==t&&(jt=e,t=cn(t)),null===t?(Ct=e,e=t):e=t,e}function A(){var e,t;return e=Ct,46===n.charCodeAt(Ct)?(t=hn,Ct++):(t=null,0===Tt&&r(sn)),null!==t&&(jt=e,t=fn()),null===t?(Ct=e,e=t):e=t,e}function M(){var e,t;return Tt++,e=Ct,dn.test(n.charAt(Ct))?(t=n.charAt(Ct),Ct++):(t=null,0===Tt&&r(pn)),null!==t&&(jt=e,t=cn(t)),null===t?(Ct=e,e=t):e=t,Tt--,null===e&&(t=null,0===Tt&&r(mn)),e}function C(){var e,t;return e=Ct,n.substr(Ct,2)===bn?(t=bn,Ct+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=gn()),null===t?(Ct=e,e=t):e=t,e}function j(){var e,t;return e=Ct,n.substr(Ct,2)===bn?(t=bn,Ct+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=vn()),null===t?(Ct=e,e=t):e=t,e}function E(){var e,t;return e=Ct,n.substr(Ct,2)===yn?(t=yn,Ct+=2):(t=null,0===Tt&&r(wn)),null!==t&&(jt=e,t=kn()),null===t?(Ct=e,e=t):e=t,e}function O(){var e,t;return e=Ct,n.substr(Ct,2)===An?(t=An,Ct+=2):(t=null,0===Tt&&r(Mn)),null!==t&&(jt=e,t=Cn()),null===t?(Ct=e,e=t):e=t,e}function S(){var e,t;return e=Ct,n.substr(Ct,2)===jn?(t=jn,Ct+=2):(t=null,0===Tt&&r(En)),null!==t&&(jt=e,t=On()),null===t?(Ct=e,e=t):e=t,e}function R(){var e,t;return e=Ct,n.substr(Ct,2)===Sn?(t=Sn,Ct+=2):(t=null,0===Tt&&r(Rn)),null!==t&&(jt=e,t=Tn()),null===t?(Ct=e,e=t):e=t,e}function T(){var e,t;return e=Ct,n.substr(Ct,2)===Fn?(t=Fn,Ct+=2):(t=null,0===Tt&&r(_n)),null!==t&&(jt=e,t=$n()),null===t?(Ct=e,e=t):e=t,e}function F(){var e,t;return e=Ct,n.substr(Ct,2)===Dn?(t=Dn,Ct+=2):(t=null,0===Tt&&r(qn)),null!==t&&(jt=e,t=Pn()),null===t?(Ct=e,e=t):e=t,e}function _(){var e,t;return e=Ct,n.substr(Ct,2)===zn?(t=zn,Ct+=2):(t=null,0===Tt&&r(Ln)),null!==t&&(jt=e,t=Hn()),null===t?(Ct=e,e=t):e=t,e}function $(){var e,t;return e=Ct,n.substr(Ct,2)===Nn?(t=Nn,Ct+=2):(t=null,0===Tt&&r(Bn)),null!==t&&(jt=e,t=In()),null===t?(Ct=e,e=t):e=t,e}function D(){var e,t;return e=Ct,n.substr(Ct,2)===Un?(t=Un,Ct+=2):(t=null,0===Tt&&r(Gn)),null!==t&&(jt=e,t=Wn()),null===t?(Ct=e,e=t):e=t,e}function q(){var e,t;return e=Ct,n.substr(Ct,2)===Jn?(t=Jn,Ct+=2):(t=null,0===Tt&&r(Kn)),null!==t&&(jt=e,t=Yn()),null===t?(Ct=e,e=t):e=t,e}function P(){var e,t;return e=Ct,n.substr(Ct,2)===Vn?(t=Vn,Ct+=2):(t=null,0===Tt&&r(Xn)),null!==t&&(jt=e,t=Zn()),null===t?(Ct=e,e=t):e=t,e}function z(){var e,t;return e=Ct,n.substr(Ct,2)===Qn?(t=Qn,Ct+=2):(t=null,0===Tt&&r(et)),null!==t&&(jt=e,t=nt()),null===t?(Ct=e,e=t):e=t,e}function L(){var e,t,a;return e=Ct,n.substr(Ct,2)===tt?(t=tt,Ct+=2):(t=null,0===Tt&&r(rt)),null!==t?(n.length>Ct?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=ot(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}function H(){var e,t,a;return e=Ct,92===n.charCodeAt(Ct)?(t=ut,Ct++):(t=null,0===Tt&&r(lt)),null!==t?(ct.test(n.charAt(Ct))?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(it)),null!==a?(jt=e,null===(t=ht(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}function N(){var e,t,a,o;if(e=Ct,n.substr(Ct,2)===st?(t=st,Ct+=2):(t=null,0===Tt&&r(ft)),null!==t){if(a=[],mt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(dt)),null!==o)for(;null!==o;)a.push(o),mt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(dt));else a=V;null!==a?(jt=e,null===(t=pt(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)}else Ct=e,e=V;return e}function B(){var e,t,a,o;if(e=Ct,n.substr(Ct,2)===bt?(t=bt,Ct+=2):(t=null,0===Tt&&r(xt)),null!==t){if(a=[],gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=yt(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)}else Ct=e,e=V;return e}function I(){var e,t,a,o;if(e=Ct,n.substr(Ct,2)===wt?(t=wt,Ct+=2):(t=null,0===Tt&&r(kt)),null!==t){if(a=[],gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=At(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)}else Ct=e,e=V;return e}function U(){var e,t;return e=Ct,n.substr(Ct,2)===st?(t=st,Ct+=2):(t=null,0===Tt&&r(ft)),null!==t&&(jt=e,t=Mt()),null===t?(Ct=e,e=t):e=t,e}function G(){var e,t,a;return e=Ct,92===n.charCodeAt(Ct)?(t=ut,Ct++):(t=null,0===Tt&&r(lt)),null!==t?(n.length>Ct?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=cn(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}var W,J=arguments.length>1?arguments[1]:{},K={regexp:a},Y=a,V=null,X="",Z="|",Q='"|"',ee=function(e,n){return n?new Pr(e,n[1]):e},ne=function(e,n,t){return new zr([e].concat(n).concat([t]))},te="^",re='"^"',ae=function(){return new qr("start")},oe="$",ue='"$"',le=function(){return new qr("end")},ce=function(e,n){return new Nr(e,n)},ie="Quantifier",he=function(e,n){return n&&(e.greedy=!1),e},se="{",fe='"{"',me=",",de='","',pe="}",be='"}"',xe=function(e,n){return new Br(e,n)},ge=",}",ve='",}"',ye=function(e){return new Br(e,1/0)},we=function(e){return new Br(e,e)},ke="+",Ae='"+"',Me=function(){return new Br(1,1/0)},Ce="*",je='"*"',Ee=function(){return new Br(0,1/0)},Oe="?",Se='"?"',Re=function(){return new Br(0,1)},Te=/^[0-9]/,Fe="[0-9]",_e=function(e){return+e.join("")},$e="(",De='"("',qe=")",Pe='")"',ze=function(e){return e},Le=function(e){return new Hr(e)},He="?:",Ne='"?:"',Be=function(e){return new Lr("non-capture-group",e)},Ie="?=",Ue='"?="',Ge=function(e){return new Lr("positive-lookahead",e)},We="?!",Je='"?!"',Ke=function(e){return new Lr("negative-lookahead",e)},Ye="CharacterSet",Ve="[",Xe='"["',Ze="]",Qe='"]"',en=function(e,n){return new Ir(!!e,n)},nn="CharacterRange",tn="-",rn='"-"',an=function(e,n){return new Ur(e,n)},on="Character",un=/^[^\\\]]/,ln="[^\\\\\\]]",cn=function(e){return new Gr(e)},hn=".",sn='"."',fn=function(){return new qr("any-character")},mn="Literal",dn=/^[^|\\\/.[()?+*$\^]/,pn="[^|\\\\\\/.[()?+*$\\^]",bn="\\b",xn='"\\\\b"',gn=function(){return new qr("backspace")},vn=function(){return new qr("word-boundary")},yn="\\B",wn='"\\\\B"',kn=function(){return new qr("non-word-boundary")},An="\\d",Mn='"\\\\d"',Cn=function(){return new qr("digit")},jn="\\D",En='"\\\\D"',On=function(){return new qr("non-digit")},Sn="\\f",Rn='"\\\\f"',Tn=function(){return new qr("form-feed")},Fn="\\n",_n='"\\\\n"',$n=function(){return new qr("line-feed")},Dn="\\r",qn='"\\\\r"',Pn=function(){return new qr("carriage-return")},zn="\\s",Ln='"\\\\s"',Hn=function(){return new qr("white-space")},Nn="\\S",Bn='"\\\\S"',In=function(){return new qr("non-white-space")},Un="\\t",Gn='"\\\\t"',Wn=function(){return new qr("tab")},Jn="\\v",Kn='"\\\\v"',Yn=function(){return new qr("vertical-tab")},Vn="\\w",Xn='"\\\\w"',Zn=function(){return new qr("word")},Qn="\\W",et='"\\\\W"',nt=function(){return new qr("non-word")},tt="\\c",rt='"\\\\c"',at="any character",ot=function(e){return new Vr(e)},ut="\\",lt='"\\\\"',ct=/^[1-9]/,it="[1-9]",ht=function(e){return new Yr(e)},st="\\0",ft='"\\\\0"',mt=/^[0-7]/,dt="[0-7]",pt=function(e){return new Kr(e.join(""))},bt="\\x",xt='"\\\\x"',gt=/^[0-9a-fA-F]/,vt="[0-9a-fA-F]",yt=function(e){return new Jr(e.join(""))},wt="\\u",kt='"\\\\u"',At=function(e){return new Wr(e.join(""))},Mt=function(){return new qr("null-character")},Ct=0,jt=0,Et=0,Ot={line:1,column:1,seenCR:!1},St=0,Rt=[],Tt=0;if("startRule"in J){if(!(J.startRule in K))throw new Error("Can't start parsing from rule \""+J.startRule+'".');Y=K[J.startRule]}if(qr.offset=function(){return jt},qr.text=function(){return n.substring(jt,Ct)},null!==(W=Y())&&Ct===n.length)return W;throw function(e){var n=0;for(e.sort();nString.fromCharCode(n+e))).join("")}ea.gen=function(e,n,t){return t=t||{guid:1},ea[e.type]?ea[e.type](e,n,t):ea.token(e,n,t)},ea.extend({token:function(e,n,t){switch(e.type){case"start":case"end":case"backspace":case"word-boundary":return"";case"any-character":return rt();case"non-word-boundary":case"form-feed":case"carriage-return":case"tab":case"vertical-tab":break;case"digit":return jt(ra.split(""));case"non-digit":return jt((na+ta+aa).split(""));case"line-feed":return e.body||e.text;case"white-space":return jt(ua.split(""));case"non-white-space":case"word":return jt((na+ta+ra).split(""));case"non-word":return jt(aa.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(nt()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=fa(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return sa(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ga(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Or)&&!(u in Or))return e;o=o?o.split(/\s*,\s*/).map((e=>(Sr.RE_PLACEHOLDER.exec(""),Sr.RE_PLACEHOLDER.test(e)?da(e,n,t,r):e))):[];const c=Or[a]||Or[u];switch(In(c)){case"array":return jt(c);case"function":{c.options=r;const e=c.apply(Or,o)||"";return delete c.options,e}}}function pa(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(Sr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=da(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Un(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?at(t):o;return u}var ba=Object.freeze({__proto__:null,array:Tr,boolean:Fr,function:_r,number:$r,object:Dr,regexp:ha,string:pa});let xa=1;function ga(e,n="",t={}){const r={path:t.path||[xa],templatePath:t.templatePath||[xa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=In(e),o=ba[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Sr.RE_KEY,"$1"):n,rule:Rr(n),context:r}),r.root||(r.root=u),u):e}const va={gen:ga,extend:Gn};function ya(e,n,t=[]){const r={name:"string"==typeof n?n.replace(Sr.RE_KEY,"$1"):n,template:e,type:In(e),rule:Rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ya(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ya(e,n,r.path)))}return r}function wa(e,n){const t=ya(e),r=ka.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:da,getValueByKeyPath:sa,normalizePath:fa,splitPathToArray:ma});const ka={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return Aa.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Aa.equal("type",e.path,In(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return Aa.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return r.length===a}return Aa.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&Aa.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(Aa.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),Aa.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&Aa.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Aa.equal("properties length",e.path,u.length,o.min,r)):Aa.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1}};wa.Diff=ka,wa.Assert=Aa;const Ma={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Ca({url:e,type:n}){n=n.toLowerCase();for(const t in Ma){const r=Ma[t],{rurl:a,rtype:o}=r;if(ja(a,e)&&ja(o,n))return r}return!1}function ja(e,n){switch(In(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function Ea({template:e},n){return H(e)?e(n):ga(e)}const Oa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],Sa=Symbol("Body internals"),Ra=Symbol("Response internals");async function Ta(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class Fa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):Oa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[Sa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[Sa].body}get bodyUsed(){return this[Sa].disturbed}async arrayBuffer(){return(await Ta(this[Sa])).arrayBuffer()}async blob(){return Ta(this[Sa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await Ta(this[Sa])).text()}}Object.defineProperties(Fa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const _a=new Set([301,302,303,307,308]),$a=globalThis.window&&globalThis.window.Response||class{};class Da extends Fa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":Oa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[Sa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[Ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[Ra].type}get url(){return this[Ra].url||""}get status(){return this[Ra].status}get ok(){return this[Ra].status>=200&&this[Ra].status<300}get redirected(){return this[Ra].counter>0}get statusText(){return this[Ra].statusText}get headers(){return this[Ra].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new $a(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!_a.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new $a(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new $a(null,{status:0,statusText:""});return e[Ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties($a.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const qa=globalThis.window||{},Pa=qa.fetch;async function za(e,n={}){if(!0===qa.fetch.$mock){const t=Ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=Ea(t,{});return console.warn("mock代理中"),new Da(e,n)}}return console.warn("未使用 mockjs"),Pa(e,n)}var La="OK";const Ha=function(){},Na=globalThis.window||{},Ba=void 0!==Na?Na.XMLHttpRequest:class{},Ia=Ba.prototype.send||Ha,Ua=Ba.prototype.open||Ha;class Ga extends Ba{constructor(...e){super(...e)}_send=Ia;_open=Ua;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=La;const e=Ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&qa.fetch&&!qa.fetch.hasOwnProperty("$mock")&&(qa.fetch=za,qa.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Wa=globalThis.window||{};const Ja={Handler:va,Random:Or,Util:Yn,XHR:Ga,RE:ia,toJSONSchema:ya,valid:wa,heredoc:Jn,setup:function(e){return Ga.setup(e)},_mocked:Ma,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,va.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Wa.XMLHttpRequest!==Ga&&(Wa.XMLHttpRequest=Ga),Ma.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return Ja}(); diff --git a/package.json b/package.json index e0b5c9a1..232fb948 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ }, "dependencies": { "color": "^3.1.3", - "lodash": "^4.17.21", "lodash-es": "^4.17.21", "rollup-plugin-module-replacement": "^1.2.1", "uuid": "^8.3.2" @@ -60,6 +59,7 @@ "eslint-config-google": "^0.14.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^3.4.0", + "jquery": "^3.7.1", "prettier": "^2.3.2", "rollup": "^2.50.5", "rollup-plugin-babel": "^4.4.0", @@ -70,6 +70,8 @@ "rollup-plugin-multi-input": "^1.3.1", "rollup-plugin-node-resolve": "^5.2.0", "rollup-plugin-serve": "^1.1.0", - "rollup-plugin-terser": "^7.0.2" + "rollup-plugin-terser": "^7.0.2", + "vite": "^5.0.12", + "vitest": "^1.2.2" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 00000000..bb0bd5f4 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,3794 @@ +lockfileVersion: '6.0' + +dependencies: + color: + specifier: ^3.1.3 + version: 3.1.3 + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + rollup-plugin-module-replacement: + specifier: ^1.2.1 + version: 1.2.1 + uuid: + specifier: ^8.3.2 + version: 8.3.2 + +devDependencies: + '@babel/core': + specifier: ^7.14.6 + version: 7.14.6 + '@babel/preset-env': + specifier: ^7.14.4 + version: 7.14.4(@babel/core@7.14.6) + '@rollup/plugin-babel': + specifier: ^5.3.0 + version: 5.3.0(@babel/core@7.14.6)(rollup@2.50.5) + '@rollup/plugin-json': + specifier: ^4.1.0 + version: 4.1.0(rollup@2.50.5) + '@rollup/plugin-multi-entry': + specifier: ^4.0.0 + version: 4.0.0(rollup@2.50.5) + '@rollup/plugin-replace': + specifier: ^2.4.2 + version: 2.4.2(rollup@2.50.5) + babel-eslint: + specifier: ^10.1.0 + version: 10.1.0(eslint@7.29.0) + eslint: + specifier: ^7.29.0 + version: 7.29.0 + eslint-config-google: + specifier: ^0.14.0 + version: 0.14.0(eslint@7.29.0) + eslint-config-prettier: + specifier: ^8.3.0 + version: 8.3.0(eslint@7.29.0) + eslint-plugin-prettier: + specifier: ^3.4.0 + version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@7.29.0)(prettier@2.3.2) + jquery: + specifier: ^3.7.1 + version: 3.7.1 + prettier: + specifier: ^2.3.2 + version: 2.3.2 + rollup: + specifier: ^2.50.5 + version: 2.50.5 + rollup-plugin-babel: + specifier: ^4.4.0 + version: 4.4.0(@babel/core@7.14.6)(rollup@2.50.5) + rollup-plugin-commonjs: + specifier: ^10.1.0 + version: 10.1.0(rollup@2.50.5) + rollup-plugin-delete: + specifier: ^2.0.0 + version: 2.0.0 + rollup-plugin-license: + specifier: ^2.4.0 + version: 2.4.0(rollup@2.50.5) + rollup-plugin-livereload: + specifier: ^2.0.0 + version: 2.0.0 + rollup-plugin-multi-input: + specifier: ^1.3.1 + version: 1.3.1 + rollup-plugin-node-resolve: + specifier: ^5.2.0 + version: 5.2.0(rollup@2.50.5) + rollup-plugin-serve: + specifier: ^1.1.0 + version: 1.1.0 + rollup-plugin-terser: + specifier: ^7.0.2 + version: 7.0.2(rollup@2.50.5) + vite: + specifier: ^5.0.12 + version: 5.0.12 + vitest: + specifier: ^1.2.2 + version: 1.2.2 + +packages: + + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + + /@babel/code-frame@7.12.11: + resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==} + dependencies: + '@babel/highlight': 7.23.4 + dev: true + + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.14.6: + resolution: {integrity: sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6) + '@babel/helpers': 7.23.9 + '@babel/parser': 7.23.9 + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.3 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.23.9(@babel/core@7.14.6): + resolution: {integrity: sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.14.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.14.6): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: true + + /@babel/helper-define-polyfill-provider@0.2.4(@babel/core@7.14.6): + resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/traverse': 7.23.9 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-plugin-utils@7.22.5: + resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.14.6): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: true + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.14.6): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.23.9 + '@babel/types': 7.23.9 + dev: true + + /@babel/helpers@7.23.9: + resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser@7.23.9: + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.14.6): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.14.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.14.6): + resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.14.6): + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.14.6): + resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.14.6): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.14.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.14.6): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.14.6): + resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.14.6) + dev: true + + /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.14.6): + resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.14.6): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.14.6): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.14.6): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.14.6): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.14.6): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.14.6): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.14.6): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.14.6): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.14.6) + dev: true + + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.14.6): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-classes@7.23.8(@babel/core@7.14.6): + resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.14.6) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: true + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.23.9 + dev: true + + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.14.6): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.14.6): + resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.14.6): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.14.6) + dev: true + + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.14.6): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.14.6) + dev: true + + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + dev: true + + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: true + + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.14.6): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/preset-env@7.14.4(@babel/core@7.14.6): + resolution: {integrity: sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.14.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.14.6) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.14.6) + '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.14.6) + '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.14.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.14.6) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.14.6) + '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.14.6) + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.14.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.14.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.14.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.14.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.14.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.14.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.14.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.14.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.14.6) + '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.14.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.14.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.14.6) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.14.6) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.14.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.14.6) + '@babel/preset-modules': 0.1.6(@babel/core@7.14.6) + '@babel/types': 7.23.9 + babel-plugin-polyfill-corejs2: 0.2.3(@babel/core@7.14.6) + babel-plugin-polyfill-corejs3: 0.2.5(@babel/core@7.14.6) + babel-plugin-polyfill-regenerator: 0.2.3(@babel/core@7.14.6) + core-js-compat: 3.35.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules@0.1.6(@babel/core@7.14.6): + resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.14.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.14.6) + '@babel/types': 7.23.9 + esutils: 2.0.3 + dev: true + + /@babel/regjsgen@0.8.0: + resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} + dev: true + + /@babel/runtime@7.23.9: + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 + dev: true + + /@babel/template@7.23.9: + resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + dev: true + + /@babel/traverse@7.23.9: + resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@esbuild/aix-ppc64@0.19.12: + resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64@0.19.12: + resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm@0.19.12: + resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64@0.19.12: + resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64@0.19.12: + resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64@0.19.12: + resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64@0.19.12: + resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64@0.19.12: + resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64@0.19.12: + resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm@0.19.12: + resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32@0.19.12: + resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64@0.19.12: + resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el@0.19.12: + resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64@0.19.12: + resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64@0.19.12: + resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x@0.19.12: + resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64@0.19.12: + resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64@0.19.12: + resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64@0.19.12: + resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64@0.19.12: + resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64@0.19.12: + resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32@0.19.12: + resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64@0.19.12: + resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@eslint/eslintrc@0.4.3: + resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 7.3.1 + globals: 13.24.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + js-yaml: 3.14.1 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': 0.27.8 + dev: true + + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/source-map@0.3.5: + resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@jridgewell/sourcemap-codec@1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + dev: true + + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.0 + dev: true + + /@rollup/plugin-babel@5.3.0(@babel/core@7.14.6)(rollup@2.50.5): + resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.50.5) + rollup: 2.50.5 + dev: true + + /@rollup/plugin-json@4.1.0(rollup@2.50.5): + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.50.5) + rollup: 2.50.5 + dev: true + + /@rollup/plugin-multi-entry@4.0.0(rollup@2.50.5): + resolution: {integrity: sha512-1Sw86rwFxrNS7ECY3iSZ7T940xKnruNGpmQDgSDVTp+VTa1g5cPXNzBgp+IoOer41CiVeGFLwYwvicVoJLHEDQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/plugin-virtual': 2.1.0(rollup@2.50.5) + matched: 5.0.1 + rollup: 2.50.5 + dev: true + + /@rollup/plugin-replace@2.4.2(rollup@2.50.5): + resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.50.5) + magic-string: 0.25.9 + rollup: 2.50.5 + dev: true + + /@rollup/plugin-virtual@2.1.0(rollup@2.50.5): + resolution: {integrity: sha512-CPPAtlKT53HFqC8jFHb/V5WErpU8Hrq2TyCR0A7kPQMlF2wNUf0o1xuAc+Qxj8NCZM0Z3Yvl+FbUXfJjVWqDwA==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 2.50.5 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.50.5): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.50.5 + dev: true + + /@rollup/rollup-android-arm-eabi@4.9.6: + resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-android-arm64@4.9.6: + resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-arm64@4.9.6: + resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-darwin-x64@4.9.6: + resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm-gnueabihf@4.9.6: + resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-gnu@4.9.6: + resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-arm64-musl@4.9.6: + resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-riscv64-gnu@4.9.6: + resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-gnu@4.9.6: + resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-linux-x64-musl@4.9.6: + resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-arm64-msvc@4.9.6: + resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-ia32-msvc@4.9.6: + resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@rollup/rollup-win32-x64-msvc@4.9.6: + resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + dev: true + + /@types/glob@7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.11.10 + dev: true + + /@types/minimatch@5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: true + + /@types/node@20.11.10: + resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/resolve@0.0.8: + resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==} + dependencies: + '@types/node': 20.11.10 + dev: true + + /@vitest/expect@1.2.2: + resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} + dependencies: + '@vitest/spy': 1.2.2 + '@vitest/utils': 1.2.2 + chai: 4.4.1 + dev: true + + /@vitest/runner@1.2.2: + resolution: {integrity: sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==} + dependencies: + '@vitest/utils': 1.2.2 + p-limit: 5.0.0 + pathe: 1.1.2 + dev: true + + /@vitest/snapshot@1.2.2: + resolution: {integrity: sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.2 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.2.2: + resolution: {integrity: sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/utils@1.2.2: + resolution: {integrity: sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + dev: true + + /acorn-jsx@5.3.2(acorn@7.4.1): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 7.4.1 + dev: true + + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + dev: true + + /ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + dev: true + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + dev: true + + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + dependencies: + sprintf-js: 1.0.3 + dev: true + + /array-find-index@1.0.2: + resolution: {integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=} + engines: {node: '>=0.10.0'} + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + + /babel-eslint@10.1.0(eslint@7.29.0): + resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==} + engines: {node: '>=6'} + peerDependencies: + eslint: '>= 4.12.1' + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.9 + '@babel/traverse': 7.23.9 + '@babel/types': 7.23.9 + eslint: 7.29.0 + eslint-visitor-keys: 1.3.0 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs2@0.2.3(@babel/core@7.14.6): + resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.14.6 + '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.14.6) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3@0.2.5(@babel/core@7.14.6): + resolution: {integrity: sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.14.6) + core-js-compat: 3.35.1 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator@0.2.3(@babel/core@7.14.6): + resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.14.6) + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist@4.22.3: + resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001581 + electron-to-chromium: 1.4.650 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.3) + dev: true + + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + + /cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite@1.0.30001581: + resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} + dev: true + + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} + engines: {node: '>=4'} + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /chokidar@3.5.3: + resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name@1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: false + + /color@3.1.3: + resolution: {integrity: sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ==} + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + dev: false + + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commenting@1.1.0: + resolution: {integrity: sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==} + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /core-js-compat@3.35.1: + resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==} + dependencies: + browserslist: 4.22.3 + dev: true + + /core-js@3.35.1: + resolution: {integrity: sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==} + requiresBuild: true + dev: true + + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /del@5.1.0: + resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==} + engines: {node: '>=8'} + dependencies: + globby: 10.0.2 + graceful-fs: 4.2.11 + is-glob: 4.0.3 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 3.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /electron-to-chromium@1.4.650: + resolution: {integrity: sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==} + dev: true + + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + dev: true + + /esbuild@0.19.12: + resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/aix-ppc64': 0.19.12 + '@esbuild/android-arm': 0.19.12 + '@esbuild/android-arm64': 0.19.12 + '@esbuild/android-x64': 0.19.12 + '@esbuild/darwin-arm64': 0.19.12 + '@esbuild/darwin-x64': 0.19.12 + '@esbuild/freebsd-arm64': 0.19.12 + '@esbuild/freebsd-x64': 0.19.12 + '@esbuild/linux-arm': 0.19.12 + '@esbuild/linux-arm64': 0.19.12 + '@esbuild/linux-ia32': 0.19.12 + '@esbuild/linux-loong64': 0.19.12 + '@esbuild/linux-mips64el': 0.19.12 + '@esbuild/linux-ppc64': 0.19.12 + '@esbuild/linux-riscv64': 0.19.12 + '@esbuild/linux-s390x': 0.19.12 + '@esbuild/linux-x64': 0.19.12 + '@esbuild/netbsd-x64': 0.19.12 + '@esbuild/openbsd-x64': 0.19.12 + '@esbuild/sunos-x64': 0.19.12 + '@esbuild/win32-arm64': 0.19.12 + '@esbuild/win32-ia32': 0.19.12 + '@esbuild/win32-x64': 0.19.12 + dev: true + + /escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: true + + /eslint-config-google@0.14.0(eslint@7.29.0): + resolution: {integrity: sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==} + engines: {node: '>=0.10.0'} + peerDependencies: + eslint: '>=5.16.0' + dependencies: + eslint: 7.29.0 + dev: true + + /eslint-config-prettier@8.3.0(eslint@7.29.0): + resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 7.29.0 + dev: true + + /eslint-plugin-prettier@3.4.0(eslint-config-prettier@8.3.0)(eslint@7.29.0)(prettier@2.3.2): + resolution: {integrity: sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==} + engines: {node: '>=6.0.0'} + peerDependencies: + eslint: '>=5.0.0' + eslint-config-prettier: '*' + prettier: '>=1.13.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 7.29.0 + eslint-config-prettier: 8.3.0(eslint@7.29.0) + prettier: 2.3.2 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-utils@2.1.0: + resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} + engines: {node: '>=6'} + dependencies: + eslint-visitor-keys: 1.3.0 + dev: true + + /eslint-visitor-keys@1.3.0: + resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} + engines: {node: '>=4'} + dev: true + + /eslint-visitor-keys@2.1.0: + resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} + engines: {node: '>=10'} + dev: true + + /eslint@7.29.0: + resolution: {integrity: sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==} + engines: {node: ^10.12.0 || >=12.0.0} + hasBin: true + dependencies: + '@babel/code-frame': 7.12.11 + '@eslint/eslintrc': 0.4.3 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + enquirer: 2.4.1 + escape-string-regexp: 4.0.0 + eslint-scope: 5.1.1 + eslint-utils: 2.1.0 + eslint-visitor-keys: 2.1.0 + espree: 7.3.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + functional-red-black-tree: 1.0.1 + glob-parent: 5.1.2 + globals: 13.24.0 + ignore: 4.0.6 + import-fresh: 3.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + js-yaml: 3.14.1 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + progress: 2.0.3 + regexpp: 3.2.0 + semver: 7.5.4 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + table: 6.8.1 + text-table: 0.2.0 + v8-compile-cache: 2.4.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree@7.3.1: + resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + acorn: 7.4.1 + acorn-jsx: 5.3.2(acorn@7.4.1) + eslint-visitor-keys: 1.3.0 + dev: true + + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + dev: true + + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker@0.6.1: + resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.2.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-diff@1.3.0: + resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} + dev: true + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=} + dev: true + + /fastq@1.17.0: + resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==} + dependencies: + reusify: 1.0.4 + dev: true + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + dev: true + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.9 + keyv: 4.5.4 + rimraf: 3.0.2 + dev: true + + /flatted@3.2.9: + resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true + + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /functional-red-black-tree@1.0.1: + resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + dev: true + + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob@7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + + /globby@10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.2.0 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + glob: 7.2.3 + ignore: 5.3.0 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + + /ignore@4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: true + + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /imurmurhash@0.1.4: + resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false + + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-module@1.0.0: + resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=} + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 + dev: true + + /is-stream@3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + dev: true + + /jest-worker@26.6.2: + resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 20.11.10 + merge-stream: 2.0.0 + supports-color: 7.2.0 + dev: true + + /jquery@3.7.1: + resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==} + dev: true + + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: true + + /jsesc@0.5.0: + resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} + hasBin: true + dev: true + + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: true + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + dev: true + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=} + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /livereload-js@3.4.1: + resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==} + dev: true + + /livereload@0.9.3: + resolution: {integrity: sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==} + engines: {node: '>=8.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + livereload-js: 3.4.1 + opts: 2.0.2 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + dependencies: + mlly: 1.5.0 + pkg-types: 1.0.3 + dev: true + + /lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + dev: false + + /lodash.debounce@4.0.8: + resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} + dev: true + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.truncate@4.4.2: + resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=} + dev: true + + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string@0.25.7: + resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /magic-string@0.30.5: + resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + + /matched@5.0.1: + resolution: {integrity: sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw==} + engines: {node: '>=10'} + dependencies: + glob: 7.2.3 + picomatch: 2.3.1 + dev: true + + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + + /mime@4.0.1: + resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==} + engines: {node: '>=16'} + hasBin: true + dev: true + + /mimic-fn@4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + dev: true + + /mlly@1.5.0: + resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} + dependencies: + acorn: 8.11.3 + pathe: 1.1.2 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: true + + /moment@2.29.1: + resolution: {integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=} + dev: true + + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /npm-run-path@5.2.0: + resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /once@1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime@6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: true + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + + /opts@2.0.2: + resolution: {integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==} + dev: true + + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + + /p-map@3.0.0: + resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} + engines: {node: '>=8'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /package-name-regex@2.0.1: + resolution: {integrity: sha512-U+K6/cuwHwr/8pUQrpNpKOIFSdS/EluTRSmtn92mug1UiPcff4t9AHs36e2xXJtpEtRfbg+JOj3Y/GLX+mzT6w==} + engines: {node: '>=12'} + dev: true + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + dev: true + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + + /picocolors@1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /pkg-types@1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.1 + mlly: 1.5.0 + pathe: 1.1.2 + dev: true + + /postcss@8.4.33: + resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.0 + source-map-js: 1.0.2 + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + dev: true + + /prettier-linter-helpers@1.0.0: + resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} + engines: {node: '>=6.0.0'} + dependencies: + fast-diff: 1.3.0 + dev: true + + /prettier@2.3.2: + resolution: {integrity: sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + dev: true + + /progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.1 + dev: true + + /regenerate-unicode-properties@10.1.1: + resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + dev: true + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.9 + dev: true + + /regexpp@3.2.0: + resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} + engines: {node: '>=8'} + dev: true + + /regexpu-core@5.3.2: + resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + engines: {node: '>=4'} + dependencies: + '@babel/regjsgen': 0.8.0 + regenerate: 1.4.2 + regenerate-unicode-properties: 10.1.1 + regjsparser: 0.9.1 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.1.0 + dev: true + + /regjsparser@0.9.1: + resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /rollup-plugin-babel@4.4.0(@babel/core@7.14.6)(rollup@2.50.5): + resolution: {integrity: sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel. + peerDependencies: + '@babel/core': 7 || ^7.0.0-rc.2 + rollup: '>=0.60.0 <3' + dependencies: + '@babel/core': 7.14.6 + '@babel/helper-module-imports': 7.22.15 + rollup: 2.50.5 + rollup-pluginutils: 2.8.2 + dev: true + + /rollup-plugin-commonjs@10.1.0(rollup@2.50.5): + resolution: {integrity: sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs. + peerDependencies: + rollup: '>=1.12.0' + dependencies: + estree-walker: 0.6.1 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.8 + rollup: 2.50.5 + rollup-pluginutils: 2.8.2 + dev: true + + /rollup-plugin-delete@2.0.0: + resolution: {integrity: sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==} + engines: {node: '>=10'} + dependencies: + del: 5.1.0 + dev: true + + /rollup-plugin-license@2.4.0(rollup@2.50.5): + resolution: {integrity: sha512-hZ+usKNrAthT9bHBpSPQHs9wSI2zISso96t/ypdOpkCftpydZ6Yf5pkPD50vw1aFH+TSV0N+v+/nqGYiTAsL4Q==} + engines: {node: '>=10.0.0'} + peerDependencies: + rollup: ^1.0.0 || ^2.0.0 + dependencies: + commenting: 1.1.0 + glob: 7.1.7 + lodash: 4.17.21 + magic-string: 0.25.7 + mkdirp: 1.0.4 + moment: 2.29.1 + package-name-regex: 2.0.1 + rollup: 2.50.5 + spdx-expression-validate: 2.0.0 + spdx-satisfies: 5.0.1 + dev: true + + /rollup-plugin-livereload@2.0.0: + resolution: {integrity: sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A==} + engines: {node: '>=8.3'} + dependencies: + livereload: 0.9.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: true + + /rollup-plugin-module-replacement@1.2.1: + resolution: {integrity: sha512-nFWmUGJGX6Fof9EAdyZqCabjniW7cGdm3w+O9/KZwphL30PG5S/tFAniwNEBm4eJA2fTEHj/kqFJEQJ+1bOq4w==} + dependencies: + slash: 3.0.0 + dev: false + + /rollup-plugin-multi-input@1.3.1: + resolution: {integrity: sha512-bPsxHR6dUney7zsCAAlfkq7lbuy5xph2CvUstSv88oqhtRiLWXwVjiA1Gb4HVjC6I9sJI2eZeQlozXa+GXJKDA==} + dependencies: + core-js: 3.35.1 + fast-glob: 3.3.2 + lodash: 4.17.21 + dev: true + + /rollup-plugin-node-resolve@5.2.0(rollup@2.50.5): + resolution: {integrity: sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==} + deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve. + peerDependencies: + rollup: '>=1.11.0' + dependencies: + '@types/resolve': 0.0.8 + builtin-modules: 3.3.0 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.50.5 + rollup-pluginutils: 2.8.2 + dev: true + + /rollup-plugin-serve@1.1.0: + resolution: {integrity: sha512-pYkSsuA0/psKqhhictkJw1c2klya5b+LlCvipWqI9OE1aG2M97mRumZCbBlry5CMEOzYBBgSDgd1694sNbmyIw==} + dependencies: + mime: 4.0.1 + opener: 1.5.2 + dev: true + + /rollup-plugin-terser@7.0.2(rollup@2.50.5): + resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==} + peerDependencies: + rollup: ^2.0.0 + dependencies: + '@babel/code-frame': 7.23.5 + jest-worker: 26.6.2 + rollup: 2.50.5 + serialize-javascript: 4.0.0 + terser: 5.27.0 + dev: true + + /rollup-pluginutils@2.8.2: + resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} + dependencies: + estree-walker: 0.6.1 + dev: true + + /rollup@2.50.5: + resolution: {integrity: sha512-Ztz4NurU2LbS3Jn5rlhnYv35z6pkjBUmYKr94fOBIKINKRO6kug9NTFHArT7jqwMP2kqEZ39jJuEtkk91NBltQ==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /rollup@4.9.6: + resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.9.6 + '@rollup/rollup-android-arm64': 4.9.6 + '@rollup/rollup-darwin-arm64': 4.9.6 + '@rollup/rollup-darwin-x64': 4.9.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.9.6 + '@rollup/rollup-linux-arm64-gnu': 4.9.6 + '@rollup/rollup-linux-arm64-musl': 4.9.6 + '@rollup/rollup-linux-riscv64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-gnu': 4.9.6 + '@rollup/rollup-linux-x64-musl': 4.9.6 + '@rollup/rollup-win32-arm64-msvc': 4.9.6 + '@rollup/rollup-win32-ia32-msvc': 4.9.6 + '@rollup/rollup-win32-x64-msvc': 4.9.6 + fsevents: 2.3.3 + dev: true + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /serialize-javascript@4.0.0: + resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==} + dependencies: + randombytes: 2.1.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + dev: true + + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: true + + /simple-swizzle@0.2.2: + resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} + dependencies: + is-arrayish: 0.3.2 + dev: false + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /source-map-js@1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + engines: {node: '>=0.10.0'} + dev: true + + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /spdx-compare@1.0.0: + resolution: {integrity: sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==} + dependencies: + array-find-index: 1.0.2 + spdx-expression-parse: 3.0.1 + spdx-ranges: 2.1.1 + dev: true + + /spdx-exceptions@2.4.0: + resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} + dev: true + + /spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + dependencies: + spdx-exceptions: 2.4.0 + spdx-license-ids: 3.0.16 + dev: true + + /spdx-expression-validate@2.0.0: + resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==} + dependencies: + spdx-expression-parse: 3.0.1 + dev: true + + /spdx-license-ids@3.0.16: + resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + dev: true + + /spdx-ranges@2.1.1: + resolution: {integrity: sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==} + dev: true + + /spdx-satisfies@5.0.1: + resolution: {integrity: sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==} + dependencies: + spdx-compare: 1.0.0 + spdx-expression-parse: 3.0.1 + spdx-ranges: 2.1.1 + dev: true + + /sprintf-js@1.0.3: + resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=} + dev: true + + /stackback@0.0.2: + resolution: {integrity: sha1-Gsig2Ug4SNFpXkGLbQMaPDzmjjs=} + dev: true + + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: true + + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-final-newline@3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.3 + dev: true + + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /table@6.8.1: + resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==} + engines: {node: '>=10.0.0'} + dependencies: + ajv: 8.12.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /terser@5.27.0: + resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + '@jridgewell/source-map': 0.3.5 + acorn: 8.11.3 + commander: 2.20.3 + source-map-support: 0.5.21 + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} + dev: true + + /tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + dev: true + + /tinypool@0.8.2: + resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + + /to-fast-properties@2.0.0: + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + dev: true + + /type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + dev: true + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + dev: true + + /ufo@1.3.2: + resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} + dev: true + + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + + /unicode-canonical-property-names-ecmascript@2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: true + + /unicode-match-property-value-ecmascript@2.1.0: + resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.3): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.3 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + dev: true + + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false + + /v8-compile-cache@2.4.0: + resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==} + dev: true + + /vite-node@1.2.2: + resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.2 + picocolors: 1.0.0 + vite: 5.0.12 + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vite@5.0.12: + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.19.12 + postcss: 8.4.33 + rollup: 4.9.6 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitest@1.2.2: + resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@vitest/expect': 1.2.2 + '@vitest/runner': 1.2.2 + '@vitest/snapshot': 1.2.2 + '@vitest/spy': 1.2.2 + '@vitest/utils': 1.2.2 + acorn-walk: 8.3.2 + cac: 6.7.14 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.5 + pathe: 1.1.2 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 1.3.0 + tinybench: 2.6.0 + tinypool: 0.8.2 + vite: 5.0.12 + vite-node: 1.2.2 + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + + /wrappy@1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true + + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/rollup.config.cjs.dev.js b/rollup.config.cjs.dev.js deleted file mode 100644 index e5db2af2..00000000 --- a/rollup.config.cjs.dev.js +++ /dev/null @@ -1,35 +0,0 @@ -import resolve from 'rollup-plugin-node-resolve'; // 帮助寻找node_modules里的包 -import commonjs from 'rollup-plugin-commonjs'; // 将非ES6语法的包转为ES6可用 - -import json from '@rollup/plugin-json'; - -export default { - input: './src/mock.js', // 打包入口 - output: { - // 打包出口 - file: './dist/mock.cjs.js', - format: 'cjs', - name: 'Mock', - exports: 'auto', - external: ['crypto'], - globals: { - window: 'window', // 告诉rollup 全局变量$即是jquery - crypto: 'crypto', - }, - }, - plugins: [ - json(), - resolve({ - jsnext: true, - main: true, - browser: false, - }), - commonjs({ - // non-CommonJS modules will be ignored, but you can also - // specifically include/exclude files - include: ['node_modules/**', './src/**'], // Default: undefined - ignoreGlobal: true, - sourceMap: false, // Default: true - }), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 - ], -}; diff --git a/rollup.config.dev.js b/rollup.config.dev.js deleted file mode 100644 index b4e866e7..00000000 --- a/rollup.config.dev.js +++ /dev/null @@ -1,37 +0,0 @@ -import resolve from 'rollup-plugin-node-resolve'; // 帮助寻找node_modules里的包 -import commonjs from 'rollup-plugin-commonjs'; // 将非ES6语法的包转为ES6可用 -import liver from 'rollup-plugin-livereload'; -import json from '@rollup/plugin-json'; - -export default { - input: './src/mock.js', // 打包入口 - output: [ - { - // 打包出口 - file: './dist/mock.esm.js', - format: 'es', - }, - { - // 打包出口 - file: './dist/mock.min.js', - format: 'iife', - name: 'Mock', - }, - ], - plugins: [ - json(), - resolve({ - jsnext: true, - main: true, - browser: true, - }), - commonjs({ - // non-CommonJS modules will be ignored, but you can also - // specifically include/exclude files - include: ['node_modules/**', './src/**'], // Default: undefined - ignoreGlobal: false, - sourceMap: false, // Default: true - }), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理 - liver(), - ], -}; diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index eda4e5b7..734227ea 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -15,7 +15,7 @@ function toJSONSchema(template, name, path = [] /* Internal Use Only */) { name: typeof name === 'string' ? name.replace(Constant.RE_KEY, '$1') : name, template, type: type(template), // 可能不准确,例如 { 'name|1': [{}, {} ...] } - rule: parser.parse(name), + rule: parser(name), path: path.slice(0), }; result.path.push(name === undefined ? 'ROOT' : result.name); @@ -25,7 +25,7 @@ function toJSONSchema(template, name, path = [] /* Internal Use Only */) { result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); break; case 'object': - result.properties = template.map((value, name) => toJSONSchema(value, name, result.path)); + result.properties = [...Object.entries(template)].map(([name, value]) => toJSONSchema(value, name, result.path)); break; } diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 70548f0a..73a3d372 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -5,9 +5,9 @@ import HTTP_STATUS_CODES from './constant.js'; const voidFunc = function () {}; const window = globalThis.window || {}; -const XMLHttpRequest = window !== undefined ? window.XMLHttpRequest : class NULL {}; -const SEND = XMLHttpRequest.prototype.send || voidFunc; -const OPEN = XMLHttpRequest.prototype.open || voidFunc; +const XMLHttpRequest = window?.XMLHttpRequest ? window.XMLHttpRequest : class __NULL__ {}; +const SEND = XMLHttpRequest?.prototype?.send || voidFunc; +const OPEN = XMLHttpRequest?.prototype?.open || voidFunc; // ! 虽然 XMLHttpRequest 不能够修改,但是可以通过设置 getter 和 setter 将属性映射到 $属性上,这样的话,原生 XHR 会将数据写入和读取的位置更改为新的对象属性上,这样就可以被我们修改了。 diff --git a/test/common.test.js b/test/common.test.js deleted file mode 100644 index 72159e83..00000000 --- a/test/common.test.js +++ /dev/null @@ -1,6 +0,0 @@ -const Mock = require('mockjs-esm'); - -const a = Mock.mock({ - 'a|20': ['@cname'], -}); -console.log(a); diff --git a/test/fakeServer.js b/test/fakeServer.js deleted file mode 100644 index 93515f3f..00000000 --- a/test/fakeServer.js +++ /dev/null @@ -1,23 +0,0 @@ -Mock.mock('fake/file', { - 'data|100': [ - { - ID: '@increment()', - name: '@cname()', - description: '@csentence()', - avatar: '@dataImage("64x64")', - address: '@region()', - province: '@province()', - }, - ], -}); -axios.get('fake/file').then((res) => console.warn('xhr inner', res)); -axios - .get('https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json') - .then((res) => console.warn('xhr outer', { res })); - -fetch('fake/file') - .then((res) => res.json()) - .then((res) => console.warn('fetch inner', res)); -fetch('https://cdn.jsdelivr.net/gh/fluency03/shijing/package.json') - .then((res) => res.json()) - .then((res) => console.warn('fetch outer', res)); diff --git a/test/index.css b/test/index.css deleted file mode 100644 index 4483f8ff..00000000 --- a/test/index.css +++ /dev/null @@ -1,44 +0,0 @@ -.badge { - box-sizing: border-box; - min-width: 10px; - line-height: 1; - text-align: center; - white-space: nowrap; - vertical-align: middle; - position: absolute; - right: 0; - top: 0; - border-radius: 0 6px 0 6px; - padding: 5px 6px; - font-weight: normal; - color: #999; - background-color: #e6e6e6; - display: inline-block; - width: 120px; - font-size: 10px; -} - -.code, -.result, -.result { - position: relative; -} -.rerun { - position: absolute; - right: 10px; - bottom: 10px; - opacity: 0.3; - color: #339966; -} -.definition .result .mockicon.rerun:after, -.definition .code .mockicon.rerun:after { - font-family: "mockicon"; - content: "\e606"; - font-size: 20px; - line-height: 1; -} -.row { - display: grid; - grid-template-columns: 1fr 1fr; - grid-column-gap: 2em; -} diff --git a/test/index.html b/test/index.html deleted file mode 100644 index 4d417c5b..00000000 --- a/test/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - Document - - - - - - - - - - - - - diff --git a/test/test.js b/test/test.js deleted file mode 100644 index a260d5bc..00000000 --- a/test/test.js +++ /dev/null @@ -1,750 +0,0 @@ -console.log( - `.mock({ - "string|1-10": "★", -})`, - Mock.mock({ - "string|1-10": "★", - }) -); -console.log( - `.mock({ - "string|3": "★★★", -})`, - Mock.mock({ - "string|3": "★★★", - }) -); -console.log( - `.mock({ - "number|+1": 202, -})`, - Mock.mock({ - "number|+1": 202, - }) -); -console.log( - `.mock({ - "number|1-100": 100, -})`, - Mock.mock({ - "number|1-100": 100, - }) -); -console.log( - `.mock({ - "number|1-100.1-10": 1, -})`, - Mock.mock({ - "number|1-100.1-10": 1, - }) -); -console.log( - `.mock({ - "number|123.1-10": 1, -})`, - Mock.mock({ - "number|123.1-10": 1, - }) -); -console.log( - `.mock({ - "number|123.3": 1, -})`, - Mock.mock({ - "number|123.3": 1, - }) -); -console.log( - `.mock({ - "number|123.10": 1.123, -})`, - Mock.mock({ - "number|123.10": 1.123, - }) -); -console.log( - `.mock({ - "boolean|1": true, -})`, - Mock.mock({ - "boolean|1": true, - }) -); -console.log( - `.mock({ - "boolean|1-2": true, -})`, - Mock.mock({ - "boolean|1-2": true, - }) -); -console.log( - `.mock({ - "object|2": { - 310000: "上海市", - 320000: "江苏省", - 330000: "浙江省", - 340000: "安徽省", - }, -})`, - Mock.mock({ - "object|2": { - 310000: "上海市", - 320000: "江苏省", - 330000: "浙江省", - 340000: "安徽省", - }, - }) -); -console.log( - `.mock({ - "object|2-4": { - 110000: "北京市", - 120000: "天津市", - 130000: "河北省", - 140000: "山西省", - }, -})`, - Mock.mock({ - "object|2-4": { - 110000: "北京市", - 120000: "天津市", - 130000: "河北省", - 140000: "山西省", - }, - }) -); -console.log( - `.mock({ - "array|1": ["AMD", "CMD", "UMD"], -})`, - Mock.mock({ - "array|1": ["AMD", "CMD", "UMD"], - }) -); -console.log( - `.mock({ - "array|+1": ["AMD", "CMD", "UMD"], -})`, - Mock.mock({ - "array|+1": ["AMD", "CMD", "UMD"], - }) -); -console.log( - `.mock({ - "array|1-10": [ - { - "name|+1": ["Hello", "Mock.js", "!"], - }, - ], -})`, - Mock.mock({ - "array|1-10": [ - { - "name|+1": ["Hello", "Mock.js", "!"], - }, - ], - }) -); -console.log( - `.mock({ - "array|1-10": ["Mock.js"], -})`, - Mock.mock({ - "array|1-10": ["Mock.js"], - }) -); -console.log( - `.mock({ - "array|1-10": ["Hello", "Mock.js", "!"], -})`, - Mock.mock({ - "array|1-10": ["Hello", "Mock.js", "!"], - }) -); -console.log( - `.mock({ - "array|3": ["Mock.js"], -})`, - Mock.mock({ - "array|3": ["Mock.js"], - }) -); -console.log( - `.mock({ - "array|3": ["Hello", "Mock.js", "!"], -})`, - Mock.mock({ - "array|3": ["Hello", "Mock.js", "!"], - }) -); - -console.log( - `.mock({ - regexp: /[a-z][A-Z][0-9]/, -})`, - Mock.mock({ - regexp: /[a-z][A-Z][0-9]/, - }) -); -console.log( - `.mock({ - regexp: /\w\W\s\S\d\D/, -})`, - Mock.mock({ - regexp: /\w\W\s\S\d\D/, - }) -); -console.log( - `.mock({ - regexp: /\d{5,10}/, -})`, - Mock.mock({ - regexp: /\d{5,10}/, - }) -); -console.log( - `.mock({ - "regexp|3": /\d{5,10}\-/, -})`, - Mock.mock({ - "regexp|3": /\d{5,10}\-/, - }) -); -console.log( - `.mock({ - "regexp|1-5": /\d{5,10}\-/, -})`, - Mock.mock({ - "regexp|1-5": /\d{5,10}\-/, - }) -); -console.log( - `.mock({ - foo: "Hello", - nested: { - a: { - b: { - c: "Mock.js", - }, - }, - }, - absolutePath: "@/foo @/nested/a/b/c", -})`, - Mock.mock({ - foo: "Hello", - nested: { - a: { - b: { - c: "Mock.js", - }, - }, - }, - absolutePath: "@/foo @/nested/a/b/c", - }) -); -console.log( - `.mock({ - foo: "Hello", - nested: { - a: { - b: { - c: "Mock.js", - }, - }, - }, - relativePath: { - a: { - b: { - c: "@../../../foo @../../../nested/a/b/c", - }, - }, - }, -})`, - Mock.mock({ - foo: "Hello", - nested: { - a: { - b: { - c: "Mock.js", - }, - }, - }, - relativePath: { - a: { - b: { - c: "@../../../foo @../../../nested/a/b/c", - }, - }, - }, - }) -); -// Mock.Random.boolean() -console.log(`.Random.boolean()`, Mock.Random.boolean()); -console.log(`.mock("@boolean")`, Mock.mock("@boolean")); -console.log(`.mock("@boolean()")`, Mock.mock("@boolean()")); - -// Mock.Random.boolean( min, max, current ) -console.log(`.Random.boolean(1, 9, true)`, Mock.Random.boolean(1, 9, true)); -console.log(`.mock("@boolean(1, 9, true)")`, Mock.mock("@boolean(1, 9, true)")); -// Mock.Random.natural() -console.log(`.Random.natural()`, Mock.Random.natural()); -console.log(`.mock("@natural")`, Mock.mock("@natural")); -console.log(`.mock("@natural()")`, Mock.mock("@natural()")); - -// Mock.Random.natural( min ) -console.log(`.Random.natural(10000)`, Mock.Random.natural(10000)); -console.log(`.mock("@natural(10000)")`, Mock.mock("@natural(10000)")); - -// Mock.Random.natural( min, max ) -console.log(`.Random.natural(60, 100)`, Mock.Random.natural(60, 100)); -console.log(`.mock("@natural(60, 100)")`, Mock.mock("@natural(60, 100)")); -// Mock.Random.integer() -console.log(`.Random.integer()`, Mock.Random.integer()); -console.log(`.mock("@integer")`, Mock.mock("@integer")); -console.log(`.mock("@integer()")`, Mock.mock("@integer()")); - -// Mock.Random.integer( min ) -console.log(`.Random.integer(10000)`, Mock.Random.integer(10000)); -console.log(`.mock("@integer(10000)")`, Mock.mock("@integer(10000)")); - -// Mock.Random.integer( min, max ) -console.log(`.Random.integer(60, 100)`, Mock.Random.integer(60, 100)); -console.log(`.mock("@integer(60, 100)")`, Mock.mock("@integer(60, 100)")); -// Mock.Random.float() -console.log(`.Random.float()`, Mock.Random.float()); -console.log(`.mock("@float")`, Mock.mock("@float")); -console.log(`.mock("@float()")`, Mock.mock("@float()")); - -// Mock.Random.float( min ) -console.log(`.Random.float(0)`, Mock.Random.float(0)); -console.log(`.mock("@float(0)")`, Mock.mock("@float(0)")); - -// Mock.Random.float( min, max ) -console.log(`.Random.float(60, 100)`, Mock.Random.float(60, 100)); -console.log(`.mock("@float(60, 100)")`, Mock.mock("@float(60, 100)")); - -// Mock.Random.float( min, max, dmin ) -console.log(`.Random.float(60, 100, 3)`, Mock.Random.float(60, 100, 3)); -console.log(`.mock("@float(60, 100, 3)")`, Mock.mock("@float(60, 100, 3)")); - -// Mock.Random.float( min, max, dmin, dmax ) -console.log(`.Random.float(60, 100, 3, 5)`, Mock.Random.float(60, 100, 3, 5)); -console.log(`.mock("@float(60, 100, 3, 5)")`, Mock.mock("@float(60, 100, 3, 5)")); - -// Mock.Random.character() -console.log(`.Random.character()`, Mock.Random.character()); -console.log(`.mock("@character")`, Mock.mock("@character")); -console.log(`.mock("@character()")`, Mock.mock("@character()")); - -// Mock.Random.character( 'lower/upper/number/symbol' ) -console.log(`.Random.character("lower")`, Mock.Random.character("lower")); -console.log(`.Random.character("upper")`, Mock.Random.character("upper")); -console.log(`.Random.character("number")`, Mock.Random.character("number")); -console.log(`.Random.character("symbol")`, Mock.Random.character("symbol")); - -console.log(`.mock('@character("lower")')`, Mock.mock('@character("lower")')); -console.log(`.mock('@character("upper")')`, Mock.mock('@character("upper")')); -console.log(`.mock('@character("number")')`, Mock.mock('@character("number")')); -console.log(`.mock('@character("symbol")')`, Mock.mock('@character("symbol")')); - -// Mock.Random.character( pool ) -console.log(`.Random.character("aeiou")`, Mock.Random.character("aeiou")); -console.log(`.mock('@character("aeiou")')`, Mock.mock('@character("aeiou")')); -// Mock.Random.string() -console.log(`.Random.string()`, Mock.Random.string()); -console.log(`.mock("@string")`, Mock.mock("@string")); -console.log(`.mock("@string()")`, Mock.mock("@string()")); - -// Mock.Random.string( length ) -console.log(`.Random.string(5)`, Mock.Random.string(5)); -console.log(`.mock("@string(5)")`, Mock.mock("@string(5)")); - -// Mock.Random.string( pool, length ) -console.log(`.Random.string("lower", 5)`, Mock.Random.string("lower", 5)); -console.log(`.Random.string("upper", 5)`, Mock.Random.string("upper", 5)); -console.log(`.Random.string("number", 5)`, Mock.Random.string("number", 5)); -console.log(`.Random.string("symbol", 5)`, Mock.Random.string("symbol", 5)); -console.log(`.Random.string("aeiou", 5)`, Mock.Random.string("aeiou", 5)); - -console.log(`.mock('@string("lower", 5)')`, Mock.mock('@string("lower", 5)')); -console.log(`.mock('@string("upper", 5)')`, Mock.mock('@string("upper", 5)')); -console.log(`.mock('@string("number", 5)')`, Mock.mock('@string("number", 5)')); -console.log(`.mock('@string("symbol", 5)')`, Mock.mock('@string("symbol", 5)')); -console.log(`.mock('@string("aeiou", 5)')`, Mock.mock('@string("aeiou", 5)')); - -// Mock.Random.string( min, max ) -console.log(`.Random.string(7, 10)`, Mock.Random.string(7, 10)); -console.log(`.mock("@string(7, 10)")`, Mock.mock("@string(7, 10)")); - -// Mock.Random.string( pool, min, max ) -console.log(`.Random.string("lower", 1, 3)`, Mock.Random.string("lower", 1, 3)); -console.log(`.Random.string("upper", 1, 3)`, Mock.Random.string("upper", 1, 3)); -console.log(`.Random.string("number", 1, 3)`, Mock.Random.string("number", 1, 3)); -console.log(`.Random.string("symbol", 1, 3)`, Mock.Random.string("symbol", 1, 3)); -console.log(`.Random.string("aeiou", 1, 3)`, Mock.Random.string("aeiou", 1, 3)); - -console.log(`.mock('@string("lower", 1, 3)')`, Mock.mock('@string("lower", 1, 3)')); -console.log(`.mock('@string("upper", 1, 3)')`, Mock.mock('@string("upper", 1, 3)')); -console.log(`.mock('@string("number", 1, 3)')`, Mock.mock('@string("number", 1, 3)')); -console.log(`.mock('@string("symbol", 1, 3)')`, Mock.mock('@string("symbol", 1, 3)')); -console.log(`.mock('@string("aeiou", 1, 3)')`, Mock.mock('@string("aeiou", 1, 3)')); - -// Mock.Random.range( stop ) -console.log(`.Random.range(10)`, Mock.Random.range(10)); -console.log(`.mock("@range(10)")`, Mock.mock("@range(10)")); - -// Mock.Random.range( start, stop ) -console.log(`.Random.range(3, 7)`, Mock.Random.range(3, 7)); -console.log(`.mock("@range(3, 7)")`, Mock.mock("@range(3, 7)")); - -// Mock.Random.range( start, stop, step ) -console.log(`.Random.range(1, 10, 2)`, Mock.Random.range(1, 10, 2)); -console.log(`.Random.range(1, 10, 3)`, Mock.Random.range(1, 10, 3)); - -console.log(`.mock("@range(1, 10, 2)")`, Mock.mock("@range(1, 10, 2)")); -console.log(`.mock("@range(1, 10, 3)")`, Mock.mock("@range(1, 10, 3)")); -// Mock.Random.date() -console.log(`.Random.date()`, Mock.Random.date()); -console.log(`.mock("@date")`, Mock.mock("@date")); -console.log(`.mock("@date()")`, Mock.mock("@date()")); - -// Mock.Random.date( format ) -console.log(`.Random.date("yyyy-MM-dd")`, Mock.Random.date("yyyy-MM-dd")); -console.log(`.Random.date("yy-MM-dd")`, Mock.Random.date("yy-MM-dd")); -console.log(`.Random.date("y-MM-dd")`, Mock.Random.date("y-MM-dd")); -console.log(`.Random.date("y-M-d")`, Mock.Random.date("y-M-d")); - -console.log(`.mock('@date("yyyy-MM-dd")')`, Mock.mock('@date("yyyy-MM-dd")')); -console.log(`.mock('@date("yy-MM-dd")')`, Mock.mock('@date("yy-MM-dd")')); -console.log(`.mock('@date("y-MM-dd")')`, Mock.mock('@date("y-MM-dd")')); -console.log(`.mock('@date("y-M-d")')`, Mock.mock('@date("y-M-d")')); - -console.log(`.mock('@date("yyyy yy y MM M dd d")')`, Mock.mock('@date("yyyy yy y MM M dd d")')); -// Mock.Random.time() -console.log(`.Random.time()`, Mock.Random.time()); -console.log(`.mock("@time")`, Mock.mock("@time")); -console.log(`.mock("@time()")`, Mock.mock("@time()")); - -// Mock.Random.time( format ) -console.log(`.Random.time("A HH:mm:ss")`, Mock.Random.time("A HH:mm:ss")); -console.log(`.Random.time("a HH:mm:ss")`, Mock.Random.time("a HH:mm:ss")); -console.log(`.Random.time("HH:mm:ss")`, Mock.Random.time("HH:mm:ss")); -console.log(`.Random.time("H:m:s")`, Mock.Random.time("H:m:s")); - -console.log(`.mock('@time("A HH:mm:ss")')`, Mock.mock('@time("A HH:mm:ss")')); -console.log(`.mock('@time("a HH:mm:ss")')`, Mock.mock('@time("a HH:mm:ss")')); -console.log(`.mock('@time("HH:mm:ss")')`, Mock.mock('@time("HH:mm:ss")')); -console.log(`.mock('@time("H:m:s")')`, Mock.mock('@time("H:m:s")')); - -console.log(`.mock('@datetime("HH H hh h mm m ss s SS S A a T")')`, Mock.mock('@datetime("HH H hh h mm m ss s SS S A a T")')); -// Mock.Random.datetime() -console.log(`.Random.datetime()`, Mock.Random.datetime()); -console.log(`.mock("@datetime")`, Mock.mock("@datetime")); -console.log(`.mock("@datetime()")`, Mock.mock("@datetime()")); - -// Mock.Random.datetime( format ) -console.log(`.Random.datetime("yyyy-MM-dd A HH:mm:ss")`, Mock.Random.datetime("yyyy-MM-dd A HH:mm:ss")); -console.log(`.Random.datetime("yy-MM-dd a HH:mm:ss")`, Mock.Random.datetime("yy-MM-dd a HH:mm:ss")); -console.log(`.Random.datetime("y-MM-dd HH:mm:ss")`, Mock.Random.datetime("y-MM-dd HH:mm:ss")); -console.log(`.Random.datetime("y-M-d H:m:s")`, Mock.Random.datetime("y-M-d H:m:s")); - -console.log(`.mock('@datetime("yyyy-MM-dd A HH:mm:ss")')`, Mock.mock('@datetime("yyyy-MM-dd A HH:mm:ss")')); -console.log(`.mock('@datetime("yy-MM-dd a HH:mm:ss")')`, Mock.mock('@datetime("yy-MM-dd a HH:mm:ss")')); -console.log(`.mock('@datetime("y-MM-dd HH:mm:ss")')`, Mock.mock('@datetime("y-MM-dd HH:mm:ss")')); -console.log(`.mock('@datetime("y-M-d H:m:s")')`, Mock.mock('@datetime("y-M-d H:m:s")')); - -console.log(`.mock('@datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")')`, Mock.mock('@datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")')); -// Ranndom.now() -console.log(`.Random.now()`, Mock.Random.now()); -console.log(`.mock("@now")`, Mock.mock("@now")); -console.log(`.mock("@now()")`, Mock.mock("@now()")); - -// Ranndom.now( unit ) -console.log(`.Random.now("year")`, Mock.Random.now("year")); -console.log(`.Random.now("month")`, Mock.Random.now("month")); -console.log(`.Random.now("week")`, Mock.Random.now("week")); -console.log(`.Random.now("day")`, Mock.Random.now("day")); -console.log(`.Random.now("hour")`, Mock.Random.now("hour")); -console.log(`.Random.now("minute")`, Mock.Random.now("minute")); -console.log(`.Random.now("second")`, Mock.Random.now("second")); - -// Ranndom.now( format ) -console.log(`.Random.now("yyyy-MM-dd HH:mm:ss SS")`, Mock.Random.now("yyyy-MM-dd HH:mm:ss SS")); - -// Ranndom.now( unit, format ) -console.log(`.Random.now("day", "yyyy-MM-dd HH:mm:ss SS")`, Mock.Random.now("day", "yyyy-MM-dd HH:mm:ss SS")); -// Mock.Random.image() -console.log(`.Random.image()`, Mock.Random.image()); -// Mock.Random.image( size ) -console.log(`.Random.image("200x100")`, Mock.Random.image("200x100")); -// Mock.Random.image( size, background ) -console.log(`.Random.image("200x100", "#FF6600")`, Mock.Random.image("200x100", "#FF6600")); -// Mock.Random.image( size, background, text ) -console.log(`.Random.image("200x100", "#4A7BF7", "Hello")`, Mock.Random.image("200x100", "#4A7BF7", "Hello")); -// Mock.Random.image( size, background, foreground, text ) -console.log(`.Random.image("200x100", "#50B347", "#FFF", "Mock.js")`, Mock.Random.image("200x100", "#50B347", "#FFF", "Mock.js")); -// Mock.Random.image( size, background, foreground, format, text ) -console.log(`.Random.image("200x100", "#894FC4", "#FFF", "png", "!")`, Mock.Random.image("200x100", "#894FC4", "#FFF", "png", "!")); -// Mock.Random.dataImage() -console.log(`.Random.dataImage()`, Mock.Random.dataImage()); - -// Mock.Random.dataImage( size ) -console.log(`.Random.dataImage("200x100")`, Mock.Random.dataImage("200x100")); - -// Mock.Random.dataImage( size, text ) -console.log(`.Random.dataImage("200x100", "Hello Mock.js!")`, Mock.Random.dataImage("200x100", "Hello Mock.js!")); -// Mock.Random.color() -console.log(`.Random.color()`, Mock.Random.color()); -console.log(`.mock("@color")`, Mock.mock("@color")); -console.log(`.mock("@color()")`, Mock.mock("@color()")); -// Mock.Random.hex() -console.log(`.Random.hex()`, Mock.Random.hex()); -console.log(`.mock("@hex")`, Mock.mock("@hex")); -console.log(`.mock("@hex()")`, Mock.mock("@hex()")); -// Mock.Random.rgb() -console.log(`.Random.rgb()`, Mock.Random.rgb()); -console.log(`.mock("@rgb")`, Mock.mock("@rgb")); -console.log(`.mock("@rgb()")`, Mock.mock("@rgb()")); -// Mock.Random.rgba() -console.log(`.Random.rgba()`, Mock.Random.rgba()); -console.log(`.mock("@rgba")`, Mock.mock("@rgba")); -console.log(`.mock("@rgba()")`, Mock.mock("@rgba()")); -// Mock.Random.hsl() -console.log(`.Random.hsl()`, Mock.Random.hsl()); -console.log(`.mock("@hsl")`, Mock.mock("@hsl")); -console.log(`.mock("@hsl()")`, Mock.mock("@hsl()")); -// Mock.Random.paragraph() -console.log(`.Random.paragraph()`, Mock.Random.paragraph()); - -console.log(`.mock("@paragraph")`, Mock.mock("@paragraph")); - -console.log(`.mock("@paragraph()")`, Mock.mock("@paragraph()")); - -// Mock.Random.paragraph( len ) -console.log(`.Random.paragraph(2)`, Mock.Random.paragraph(2)); - -console.log(`.mock("@paragraph(2)")`, Mock.mock("@paragraph(2)")); - -// Mock.Random.paragraph( min, max ) -console.log(`.Random.paragraph(1, 3)`, Mock.Random.paragraph(1, 3)); - -console.log(`.mock("@paragraph(1, 3)")`, Mock.mock("@paragraph(1, 3)")); - -// Mock.Random.sentence() -console.log(`.Random.sentence()`, Mock.Random.sentence()); -console.log(`.mock("@sentence")`, Mock.mock("@sentence")); -console.log(`.mock("@sentence()")`, Mock.mock("@sentence()")); - -// Mock.Random.sentence( len ) -console.log(`.Random.sentence(5)`, Mock.Random.sentence(5)); -console.log(`.mock("@sentence(5)")`, Mock.mock("@sentence(5)")); - -// Mock.Random.sentence( min, max ) -console.log(`.Random.sentence(3, 5)`, Mock.Random.sentence(3, 5)); -console.log(`.mock("@sentence(3, 5)")`, Mock.mock("@sentence(3, 5)")); - -// Mock.Random.word() -console.log(`.Random.word()`, Mock.Random.word()); -console.log(`.mock("@word")`, Mock.mock("@word")); -console.log(`.mock("@word()")`, Mock.mock("@word()")); - -// Mock.Random.word( len ) -console.log(`.Random.word(5)`, Mock.Random.word(5)); -console.log(`.mock("@word(5)")`, Mock.mock("@word(5)")); - -// Mock.Random.word( min, max ) -console.log(`.Random.word(3, 5)`, Mock.Random.word(3, 5)); -console.log(`.mock("@word(3, 5)")`, Mock.mock("@word(3, 5)")); - -// Mock.Random.title() -console.log(`.Random.title()`, Mock.Random.title()); -console.log(`.mock("@title")`, Mock.mock("@title")); -console.log(`.mock("@title()")`, Mock.mock("@title()")); - -// Mock.Random.title( len ) -console.log(`.Random.title(5)`, Mock.Random.title(5)); -console.log(`.mock("@title(5)")`, Mock.mock("@title(5)")); - -// Mock.Random.title( min, max ) -console.log(`.Random.title(3, 5)`, Mock.Random.title(3, 5)); -console.log(`.mock("@title(3, 5)")`, Mock.mock("@title(3, 5)")); - -// Mock.Random.cparagraph() -console.log(`.Random.cparagraph()`, Mock.Random.cparagraph()); - -console.log(`.mock("@cparagraph")`, Mock.mock("@cparagraph")); - -console.log(`.mock("@cparagraph()")`, Mock.mock("@cparagraph()")); - -// Mock.Random.cparagraph( len ) -console.log(`.Random.cparagraph(2)`, Mock.Random.cparagraph(2)); - -console.log(`.mock("@cparagraph(2)")`, Mock.mock("@cparagraph(2)")); - -// Mock.Random.cparagraph( min, max ) -console.log(`.Random.cparagraph(1, 3)`, Mock.Random.cparagraph(1, 3)); - -console.log(`.mock("@cparagraph(1, 3)")`, Mock.mock("@cparagraph(1, 3)")); - -// Mock.Random.csentence() -console.log(`.Random.csentence()`, Mock.Random.csentence()); -console.log(`.mock("@csentence")`, Mock.mock("@csentence")); -console.log(`.mock("@csentence()")`, Mock.mock("@csentence()")); - -// Mock.Random.csentence( len ) -console.log(`.Random.csentence(5)`, Mock.Random.csentence(5)); -console.log(`.mock("@csentence(5)")`, Mock.mock("@csentence(5)")); - -// Mock.Random.csentence( min, max ) -console.log(`.Random.csentence(3, 5)`, Mock.Random.csentence(3, 5)); -console.log(`.mock("@csentence(3, 5)")`, Mock.mock("@csentence(3, 5)")); - -// Mock.Random.cword() -console.log(`.Random.cword()`, Mock.Random.cword()); -console.log(`.mock("@cword")`, Mock.mock("@cword")); -console.log(`.mock("@cword()")`, Mock.mock("@cword()")); - -// Mock.Random.cword( pool ) -console.log(`.Random.cword("零一二三四五六七八九十")`, Mock.Random.cword("零一二三四五六七八九十")); -console.log(`.mock('@cword("零一二三四五六七八九十")')`, Mock.mock('@cword("零一二三四五六七八九十")')); - -// Mock.Random.cword( length ) -console.log(`.Random.cword(3)`, Mock.Random.cword(3)); -console.log(`.mock("@cword(3)")`, Mock.mock("@cword(3)")); - -// Mock.Random.cword( pool, length ) -console.log(`.Random.cword("零一二三四五六七八九十", 3)`, Mock.Random.cword("零一二三四五六七八九十", 3)); -console.log(`.mock('@cword("零一二三四五六七八九十", 3)')`, Mock.mock('@cword("零一二三四五六七八九十", 3)')); - -// Mock.Random.cword( min, max ) -console.log(`.Random.cword(3, 5)`, Mock.Random.cword(3, 5)); -console.log(`.mock("@cword(3, 5)")`, Mock.mock("@cword(3, 5)")); - -// Mock.Random.cword( pool, min, max ) -console.log(`.Random.cword("零一二三四五六七八九十", 5, 7)`, Mock.Random.cword("零一二三四五六七八九十", 5, 7)); -console.log(`.mock('@cword("零一二三四五六七八九十", 5, 7)')`, Mock.mock('@cword("零一二三四五六七八九十", 5, 7)')); -// Mock.Random.ctitle() -console.log(`.Random.ctitle()`, Mock.Random.ctitle()); -console.log(`.mock("@ctitle")`, Mock.mock("@ctitle")); -console.log(`.mock("@ctitle()")`, Mock.mock("@ctitle()")); - -// Mock.Random.ctitle( len ) -console.log(`.Random.ctitle(5)`, Mock.Random.ctitle(5)); -console.log(`.mock("@ctitle(5)")`, Mock.mock("@ctitle(5)")); - -// Mock.Random.ctitle( min, max ) -console.log(`.Random.ctitle(3, 5)`, Mock.Random.ctitle(3, 5)); -console.log(`.mock("@ctitle(3, 5)")`, Mock.mock("@ctitle(3, 5)")); - -// Mock.Random.first() -console.log(`.Random.first()`, Mock.Random.first()); -console.log(`.mock("@first")`, Mock.mock("@first")); -console.log(`.mock("@first()")`, Mock.mock("@first()")); -// Mock.Random.last() -console.log(`.Random.last()`, Mock.Random.last()); -console.log(`.mock("@last")`, Mock.mock("@last")); -console.log(`.mock("@last()")`, Mock.mock("@last()")); -// Mock.Random.name() -console.log(`.Random.name()`, Mock.Random.name()); -console.log(`.mock("@name")`, Mock.mock("@name")); -console.log(`.mock("@name()")`, Mock.mock("@name()")); - -// Mock.Random.name( middle ) -console.log(`.Random.name(true)`, Mock.Random.name(true)); -console.log(`.mock("@name(true)")`, Mock.mock("@name(true)")); -// Mock.Random.cfirst() -console.log(`.Random.cfirst()`, Mock.Random.cfirst()); -console.log(`.mock("@cfirst")`, Mock.mock("@cfirst")); -console.log(`.mock("@cfirst()")`, Mock.mock("@cfirst()")); -// Mock.Random.clast() -console.log(`.Random.clast()`, Mock.Random.clast()); -console.log(`.mock("@clast")`, Mock.mock("@clast")); -console.log(`.mock("@clast()")`, Mock.mock("@clast()")); -// Mock.Random.cname() -console.log(`.Random.cname()`, Mock.Random.cname()); -console.log(`.mock("@cname")`, Mock.mock("@cname")); -console.log(`.mock("@cname()")`, Mock.mock("@cname()")); -// Mock.Random.url() -console.log(`.Random.url()`, Mock.Random.url()); -console.log(`.mock("@url")`, Mock.mock("@url")); -console.log(`.mock("@url()")`, Mock.mock("@url()")); -// Mock.Random.domain() -console.log(`.Random.domain()`, Mock.Random.domain()); -console.log(`.mock("@domain")`, Mock.mock("@domain")); -console.log(`.mock("@domain()")`, Mock.mock("@domain()")); -// Mock.Random.protocol() -console.log(`.Random.protocol()`, Mock.Random.protocol()); -console.log(`.mock("@protocol")`, Mock.mock("@protocol")); -console.log(`.mock("@protocol()")`, Mock.mock("@protocol()")); -// Mock.Random.tld() -console.log(`.Random.tld()`, Mock.Random.tld()); -console.log(`.mock("@tld")`, Mock.mock("@tld")); -console.log(`.mock("@tld()")`, Mock.mock("@tld()")); -// Mock.Random.email() -console.log(`.Random.email()`, Mock.Random.email()); -console.log(`.mock("@email")`, Mock.mock("@email")); -console.log(`.mock("@email()")`, Mock.mock("@email()")); -// Mock.Random.ip() -console.log(`.Random.ip()`, Mock.Random.ip()); -console.log(`.mock("@ip")`, Mock.mock("@ip")); -console.log(`.mock("@ip()")`, Mock.mock("@ip()")); -// Mock.Random.region() -console.log(`.Random.region()`, Mock.Random.region()); -console.log(`.mock("@region")`, Mock.mock("@region")); -console.log(`.mock("@region()")`, Mock.mock("@region()")); -// Mock.Random.province() -console.log(`.Random.province()`, Mock.Random.province()); -console.log(`.mock("@province")`, Mock.mock("@province")); -console.log(`.mock("@province()")`, Mock.mock("@province()")); -// Mock.Random.city() -console.log(`.Random.city()`, Mock.Random.city()); -console.log(`.mock("@city")`, Mock.mock("@city")); -console.log(`.mock("@city()")`, Mock.mock("@city()")); -// Mock.Random.city( prefix ) -console.log(`.Random.city(true)`, Mock.Random.city(true)); -console.log(`.mock("@city(true)")`, Mock.mock("@city(true)")); -// Mock.Random.county() -console.log(`.Random.county()`, Mock.Random.county()); -console.log(`.mock("@county")`, Mock.mock("@county")); -console.log(`.mock("@county()")`, Mock.mock("@county()")); -// Mock.Random.county( prefix ) -console.log(`.Random.county(true)`, Mock.Random.county(true)); -console.log(`.mock("@county(true)")`, Mock.mock("@county(true)")); -// Mock.Random.zip() -console.log(`.Random.zip()`, Mock.Random.zip()); -console.log(`.mock("@zip")`, Mock.mock("@zip")); -console.log(`.mock("@zip()")`, Mock.mock("@zip()")); -// Mock.Random.capitalize( word ) -console.log(`.Random.capitalize("hello")`, Mock.Random.capitalize("hello")); -console.log(`.mock('@capitalize("hello")')`, Mock.mock('@capitalize("hello")')); -// Mock.Random.upper( str ) -console.log(`.Random.upper("hello")`, Mock.Random.upper("hello")); -console.log(`.mock('@upper("hello")')`, Mock.mock('@upper("hello")')); -// Mock.Random.lower( str ) -console.log(`.Random.lower("HELLO")`, Mock.Random.lower("HELLO")); -console.log(`.mock('@lower("HELLO")')`, Mock.mock('@lower("HELLO")')); -// Mock.Random.pick( arr ) -console.log(`.Random.pick(["a", "e", "i", "o", "u"])`, Mock.Random.pick(["a", "e", "i", "o", "u"])); -console.log(`.mock('@pick(["a", "e", "i", "o", "u"])')`, Mock.mock('@pick(["a", "e", "i", "o", "u"])')); -// Mock.Random.shuffle( arr ) -console.log(`.Random.shuffle(["a", "e", "i", "o", "u"])`, Mock.Random.shuffle(["a", "e", "i", "o", "u"])); -console.log(`.mock('@shuffle(["a", "e", "i", "o", "u"])')`, Mock.mock('@shuffle(["a", "e", "i", "o", "u"])')); -// Mock.Random.guid() -console.log(`.Random.guid()`, Mock.Random.guid()); -console.log(`.mock("@guid")`, Mock.mock("@guid")); -console.log(`.mock("@guid()")`, Mock.mock("@guid()")); -// Mock.Random.id() -console.log(`.Random.id()`, Mock.Random.id()); -console.log(`.mock("@id")`, Mock.mock("@id")); -console.log(`.mock("@id()")`, Mock.mock("@id()")); -// Mock.Random.increment() -console.log(`.Random.increment()`, Mock.Random.increment()); -console.log(`.mock("@increment")`, Mock.mock("@increment")); -console.log(`.mock("@increment()")`, Mock.mock("@increment()")); - -// Mock.Random.increment( step ) -console.log(`.Random.increment(100)`, Mock.Random.increment(100)); -console.log(`.mock("@increment(100)")`, Mock.mock("@increment(100)")); -console.log(`.Random.increment(1000)`, Mock.Random.increment(1000)); -console.log(`.mock("@increment(1000)")`, Mock.mock("@increment(1000)")); diff --git a/test/test.mock.schema.js b/test/test.mock.schema.test.js similarity index 68% rename from test/test.mock.schema.js rename to test/test.mock.schema.test.js index ccffdeeb..f403c0a5 100644 --- a/test/test.mock.schema.js +++ b/test/test.mock.schema.test.js @@ -1,98 +1,87 @@ -/* global require, chai, describe, before, it */ /* global window */ // 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('Schema', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - window.XMLHttpRequest = Mock.XHR - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) +import { it, describe, expect, before } from 'vitest' +import Mock from '../src/mock' +import * as _ from 'lodash-es' +import $ from 'jquery' + +describe('Schema', function () { function stringify(json) { - return JSON.stringify(json /*, null, 4*/ ) + return JSON.stringify(json /*, null, 4*/) } function doit(template, validator) { - it('', function() { + it(JSON.stringify(template), function () { var schema = Mock.toJSONSchema(template) - this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) + // this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) validator(schema) }) } - describe('Type', function() { - doit(1, function(schema) { + describe('Type', function () { + doit(1, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'number') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } }) - doit(true, function(schema) { + doit(true, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'boolean') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } }) - doit('', function(schema) { + doit('', function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'string') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } }) - doit(function() {}, function(schema) { + doit(function () { }, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'function') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } }) - doit(/\d/, function(schema) { + doit(/\d/, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'regexp') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } }) - doit([], function(schema) { + doit([], function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'array') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } expect(schema).to.have.property('items').with.length(0) }) - doit({}, function(schema) { + doit({}, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'object') for (var n in schema.rule) { - expect(schema.rule[n]).to.be.null() + expect(schema.rule[n]).toBeFalsy() } expect(schema).to.have.property('properties').with.length(0) }) }) - describe('Object', function() { + describe('Object', function () { doit({ a: { b: { @@ -101,9 +90,9 @@ describe('Schema', function() { } } } - }, function(schema) { + }, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'object') var properties; @@ -139,14 +128,14 @@ describe('Schema', function() { }) - describe('Array', function() { + describe('Array', function () { doit([ [ ['foo', 'bar'] ] - ], function(schema) { + ], function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'array') var items; @@ -169,27 +158,27 @@ describe('Schema', function() { }) }) - describe('String Rule', function() { + describe('String Rule', function () { doit({ 'string|1-10': '★' - }, function(schema) { + }, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'object') var properties; // root.properties properties = schema.properties - expect(properties).to.with.length(1) + expect(properties).to.with.length(1) expect(properties[0]).to.have.property('type', 'string') expect(properties[0].rule).to.have.property('min', 1) expect(properties[0].rule).to.have.property('max', 10) }) doit({ 'string|3': 'value', - }, function(schema) { + }, function (schema) { expect(schema.name).to.be.an('undefined') - // expect(schema).to.not.have.property('name') + // expect(schema).to.not.have.property('name') expect(schema).to.have.property('type', 'object') var properties; diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..978a984b --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,5 @@ +export default { + test: { + + } +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index cd3c239e..00000000 --- a/yarn.lock +++ /dev/null @@ -1,2811 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== - dependencies: - "@babel/highlight" "^7.12.13" - -"@babel/compat-data@^7.13.11", "@babel/compat-data@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.4.tgz#45720fe0cecf3fd42019e1d12cc3d27fadc98d58" - integrity sha512-i2wXrWQNkH6JplJQGn3Rd2I4Pij8GdHkXwHMxm+zV5YG/Jci+bCNrWZEWC4o+umiDkRrRs4dVzH3X4GP7vyjQQ== - -"@babel/compat-data@^7.14.5": - version "7.14.7" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz#7b047d7a3a89a67d2258dc61f604f098f1bc7e08" - integrity sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw== - -"@babel/core@^7.14.6": - version "7.14.6" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - -"@babel/generator@^7.14.2": - version "7.14.3" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.3.tgz#0c2652d91f7bddab7cccc6ba8157e4f40dcedb91" - integrity sha512-bn0S6flG/j0xtQdz3hsjJ624h3W0r3llttBMfyHX3YrZ/KtLYr15bjA0FXkgW7FpvrDuTuElXeVjiKlYRpnOFA== - dependencies: - "@babel/types" "^7.14.2" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/generator@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz#848d7b9f031caca9d0cd0af01b063f226f52d785" - integrity sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA== - dependencies: - "@babel/types" "^7.14.5" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.12.13.tgz#0f58e86dfc4bb3b1fcd7db806570e177d439b6ab" - integrity sha512-7YXfX5wQ5aYM/BOlbSccHDbuXXFPxeoUmfWtz8le2yTkTZc+BxsiEnENFoi2SlmA8ewDkG2LgIMIVzzn2h8kfw== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.12.13.tgz#6bc20361c88b0a74d05137a65cac8d3cbf6f61fc" - integrity sha512-CZOv9tGphhDRlVjVkAgm8Nhklm9RzSmWpX2my+t7Ua/KT616pEzXsQCjinzvkRvHWJ9itO4f296efroX23XCMA== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/helper-compilation-targets@^7.13.0", "@babel/helper-compilation-targets@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.4.tgz#33ebd0ffc34248051ee2089350a929ab02f2a516" - integrity sha512-JgdzOYZ/qGaKTVkn5qEDV/SXAh8KcyUVkCoSWGN8T3bwrgd6m+/dJa2kVGi6RJYJgEYPBdZ84BZp9dUjNWkBaA== - dependencies: - "@babel/compat-data" "^7.14.4" - "@babel/helper-validator-option" "^7.12.17" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-compilation-targets@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz#7a99c5d0967911e972fe2c3411f7d5b498498ecf" - integrity sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw== - dependencies: - "@babel/compat-data" "^7.14.5" - "@babel/helper-validator-option" "^7.14.5" - browserslist "^4.16.6" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.13.0", "@babel/helper-create-class-features-plugin@^7.14.0", "@babel/helper-create-class-features-plugin@^7.14.3": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.4.tgz#abf888d836a441abee783c75229279748705dc42" - integrity sha512-idr3pthFlDCpV+p/rMgGLGYIVtazeatrSOQk8YzO2pAepIjQhCN3myeihVg58ax2bbbGK9PUE1reFi7axOYIOw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-replace-supers" "^7.14.4" - "@babel/helper-split-export-declaration" "^7.12.13" - -"@babel/helper-create-regexp-features-plugin@^7.12.13": - version "7.14.3" - resolved "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.3.tgz#149aa6d78c016e318c43e2409a0ae9c136a86688" - integrity sha512-JIB2+XJrb7v3zceV2XzDhGIB902CmKGSpSl4q2C6agU9SNLG/2V1RtFRGPG1Ajh9STj3+q6zJMOC+N/pp2P9DA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - regexpu-core "^4.7.1" - -"@babel/helper-define-polyfill-provider@^0.2.2": - version "0.2.3" - resolved "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz#0525edec5094653a282688d34d846e4c75e9c0b6" - integrity sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew== - dependencies: - "@babel/helper-compilation-targets" "^7.13.0" - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/traverse" "^7.13.0" - debug "^4.1.1" - lodash.debounce "^4.0.8" - resolve "^1.14.2" - semver "^6.1.2" - -"@babel/helper-explode-assignable-expression@^7.12.13": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.13.0.tgz#17b5c59ff473d9f956f40ef570cf3a76ca12657f" - integrity sha512-qS0peLTDP8kOisG1blKbaoBg/o9OSa1qoumMjTK5pM+KDTtpxpsiubnCGP34vK8BXGcb2M9eigwgvoJryrzwWA== - dependencies: - "@babel/types" "^7.13.0" - -"@babel/helper-function-name@^7.12.13", "@babel/helper-function-name@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.2.tgz#397688b590760b6ef7725b5f0860c82427ebaac2" - integrity sha512-NYZlkZRydxw+YT56IlhIcS8PAhb+FEUiOzuhFTfqDyPmzAhRge6ua0dQYT/Uh0t/EDHq05/i+e5M2d4XvjgarQ== - dependencies: - "@babel/helper-get-function-arity" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/types" "^7.14.2" - -"@babel/helper-function-name@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz#89e2c474972f15d8e233b52ee8c480e2cfcd50c4" - integrity sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ== - dependencies: - "@babel/helper-get-function-arity" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-get-function-arity@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.12.13.tgz#bc63451d403a3b3082b97e1d8b3fe5bd4091e583" - integrity sha512-DjEVzQNz5LICkzN0REdpD5prGoidvbdYk1BVgRUOINaWJP2t6avB27X1guXK1kXNrX0WMfsrm1A/ZBthYuIMQg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-get-function-arity@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815" - integrity sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-hoist-variables@^7.13.0": - version "7.13.16" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.13.16.tgz#1b1651249e94b51f8f0d33439843e33e39775b30" - integrity sha512-1eMtTrXtrwscjcAeO4BVK+vvkxaLJSPFz1w1KLawz6HLNi9bPFGBNwwDyVfiu1Tv/vRRFYfoGaKhmAQPGPn5Wg== - dependencies: - "@babel/traverse" "^7.13.15" - "@babel/types" "^7.13.16" - -"@babel/helper-hoist-variables@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d" - integrity sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-member-expression-to-functions@^7.13.12": - version "7.13.12" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.13.12.tgz#dfe368f26d426a07299d8d6513821768216e6d72" - integrity sha512-48ql1CLL59aKbU94Y88Xgb2VFy7a95ykGRbJJaaVv+LX5U8wFpLfiGXJJGUozsmA1oEh/o5Bp60Voq7ACyA/Sw== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-member-expression-to-functions@^7.14.5": - version "7.14.7" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz#97e56244beb94211fe277bd818e3a329c66f7970" - integrity sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.13.12": - version "7.13.12" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.13.12.tgz#c6a369a6f3621cb25da014078684da9196b61977" - integrity sha512-4cVvR2/1B693IuOvSI20xqqa/+bl7lqAMR59R4iu39R9aOX8/JoYY1sFaNvUMyMBGnHdwvJgUrzNLoUZxXypxA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-module-imports@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3" - integrity sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-module-transforms@^7.13.0", "@babel/helper-module-transforms@^7.14.0", "@babel/helper-module-transforms@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.2.tgz#ac1cc30ee47b945e3e0c4db12fa0c5389509dfe5" - integrity sha512-OznJUda/soKXv0XhpvzGWDnml4Qnwp16GN+D/kZIdLsWoHj05kyu8Rm5kXmMef+rVJZ0+4pSGLkeixdqNUATDA== - dependencies: - "@babel/helper-module-imports" "^7.13.12" - "@babel/helper-replace-supers" "^7.13.12" - "@babel/helper-simple-access" "^7.13.12" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/helper-validator-identifier" "^7.14.0" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.2" - -"@babel/helper-module-transforms@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz#7de42f10d789b423eb902ebd24031ca77cb1e10e" - integrity sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA== - dependencies: - "@babel/helper-module-imports" "^7.14.5" - "@babel/helper-replace-supers" "^7.14.5" - "@babel/helper-simple-access" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/helper-validator-identifier" "^7.14.5" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-optimise-call-expression@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.12.13.tgz#5c02d171b4c8615b1e7163f888c1c81c30a2aaea" - integrity sha512-BdWQhoVJkp6nVjB7nkFWcn43dkprYauqtk++Py2eaf/GRDFm5BxRqEIZCiHlZUGAVmtwKcsVL1dC68WmzeFmiA== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-optimise-call-expression@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c" - integrity sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.13.0.tgz#806526ce125aed03373bc416a828321e3a6a33af" - integrity sha512-ZPafIPSwzUlAoWT8DKs1W2VyF2gOWthGd5NGFMsBcMMol+ZhK+EQY/e6V96poa6PA/Bh+C9plWN0hXO1uB8AfQ== - -"@babel/helper-remap-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.13.0.tgz#376a760d9f7b4b2077a9dd05aa9c3927cadb2209" - integrity sha512-pUQpFBE9JvC9lrQbpX0TmeNIy5s7GnZjna2lhhcHC7DzgBs6fWn722Y5cfwgrtrqc7NAJwMvOa0mKhq6XaE4jg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-wrap-function" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helper-replace-supers@^7.12.13", "@babel/helper-replace-supers@^7.13.12", "@babel/helper-replace-supers@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.4.tgz#b2ab16875deecfff3ddfcd539bc315f72998d836" - integrity sha512-zZ7uHCWlxfEAAOVDYQpEf/uyi1dmeC7fX4nCf2iz9drnCwi1zvwXL3HwWWNXUQEJ1k23yVn3VbddiI9iJEXaTQ== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.13.12" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/traverse" "^7.14.2" - "@babel/types" "^7.14.4" - -"@babel/helper-replace-supers@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz#0ecc0b03c41cd567b4024ea016134c28414abb94" - integrity sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.14.5" - "@babel/helper-optimise-call-expression" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/helper-simple-access@^7.13.12": - version "7.13.12" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.13.12.tgz#dd6c538afb61819d205a012c31792a39c7a5eaf6" - integrity sha512-7FEjbrx5SL9cWvXioDbnlYTppcZGuCY6ow3/D5vMggb2Ywgu4dMrpTJX0JdQAIcRRUElOIxF3yEooa9gUb9ZbA== - dependencies: - "@babel/types" "^7.13.12" - -"@babel/helper-simple-access@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz#66ea85cf53ba0b4e588ba77fc813f53abcaa41c4" - integrity sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": - version "7.12.1" - resolved "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" - integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== - dependencies: - "@babel/types" "^7.12.1" - -"@babel/helper-split-export-declaration@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.12.13.tgz#e9430be00baf3e88b0e13e6f9d4eaf2136372b05" - integrity sha512-tCJDltF83htUtXx5NLcaDqRmknv652ZWCHyoTETf1CXYJdPC7nohZohjUgieXhv0hTJdRf2FjDueFehdNucpzg== - dependencies: - "@babel/types" "^7.12.13" - -"@babel/helper-split-export-declaration@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz#22b23a54ef51c2b7605d851930c1976dd0bc693a" - integrity sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA== - dependencies: - "@babel/types" "^7.14.5" - -"@babel/helper-validator-identifier@^7.12.11", "@babel/helper-validator-identifier@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz#d26cad8a47c65286b15df1547319a5d0bcf27288" - integrity sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A== - -"@babel/helper-validator-identifier@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz#d0f0e277c512e0c938277faa85a3968c9a44c0e8" - integrity sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg== - -"@babel/helper-validator-option@^7.12.17": - version "7.12.17" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.12.17.tgz#d1fbf012e1a79b7eebbfdc6d270baaf8d9eb9831" - integrity sha512-TopkMDmLzq8ngChwRlyjR6raKD6gMSae4JdYDB8bByKreQgG0RBTuKe9LRxW3wFtUnjxOPRKBDwEH6Mg5KeDfw== - -"@babel/helper-validator-option@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz#6e72a1fff18d5dfcb878e1e62f1a021c4b72d5a3" - integrity sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow== - -"@babel/helper-wrap-function@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.13.0.tgz#bdb5c66fda8526ec235ab894ad53a1235c79fcc4" - integrity sha512-1UX9F7K3BS42fI6qd2A4BjKzgGjToscyZTdp1DjknHLCIvpgne6918io+aL5LXFcER/8QWiwpoY902pVEqgTXA== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/template" "^7.12.13" - "@babel/traverse" "^7.13.0" - "@babel/types" "^7.13.0" - -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/highlight@^7.10.4", "@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.12.13": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz#3197e375711ef6bf834e67d0daec88e4f46113cf" - integrity sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.12.13", "@babel/parser@^7.14.2": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.4.tgz#a5c560d6db6cd8e6ed342368dea8039232cbab18" - integrity sha512-ArliyUsWDUqEGfWcmzpGUzNfLxTdTp6WU4IuP6QFSp9gGfWS6boxFCkJSJ/L4+RG8z/FnIU3WxCk6hPL9SSWeA== - -"@babel/parser@^7.14.5", "@babel/parser@^7.14.6", "@babel/parser@^7.14.7", "@babel/parser@^7.7.0": - version "7.14.7" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz#6099720c8839ca865a2637e6c85852ead0bdb595" - integrity sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA== - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.13.12": - version "7.13.12" - resolved "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.13.12.tgz#a3484d84d0b549f3fc916b99ee4783f26fabad2a" - integrity sha512-d0u3zWKcoZf379fOeJdr1a5WPDny4aOFZ6hlfKivgK0LY7ZxNfoaHL2fWwdGtHyVvra38FC+HVYkO+byfSA8AQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-proposal-optional-chaining" "^7.13.12" - -"@babel/plugin-proposal-async-generator-functions@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.2.tgz#3a2085abbf5d5f962d480dbc81347385ed62eb1e" - integrity sha512-b1AM4F6fwck4N8ItZ/AtC4FP/cqZqmKRQ4FaTDutwSYyjuhtvsGEMLK4N/ztV/ImP40BjIDyMgBQAeAMsQYVFQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.13.0.tgz#146376000b94efd001e57a40a88a525afaab9f37" - integrity sha512-KnTDjFNC1g+45ka0myZNvSBFLhNCLN+GeGYLDEA8Oq7MZ6yMgfLoIRh86GRT0FjtJhZw8JyUskP9uvj5pHM9Zg== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-class-static-block@^7.14.3": - version "7.14.3" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.3.tgz#5a527e2cae4a4753119c3a3e7f64ecae8ccf1360" - integrity sha512-HEjzp5q+lWSjAgJtSluFDrGGosmwTgKwCXdDQZvhKsRlwv3YdkUEqxNrrjesJd+B9E9zvr1PVPVBvhYZ9msjvQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.14.3" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - -"@babel/plugin-proposal-dynamic-import@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.2.tgz#01ebabd7c381cff231fa43e302939a9de5be9d9f" - integrity sha512-oxVQZIWFh91vuNEMKltqNsKLFWkOIyJc95k2Gv9lWVyDfPUQGSSlbDEgWuJUU1afGE9WwlzpucMZ3yDRHIItkA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.2.tgz#62542f94aa9ce8f6dba79eec698af22112253791" - integrity sha512-sRxW3z3Zp3pFfLAgVEvzTFutTXax837oOatUIvSG9o5gRj9mKwm3br1Se5f4QalTQs9x4AzlA/HrCWbQIHASUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.2.tgz#830b4e2426a782e8b2878fbfe2cba85b70cbf98c" - integrity sha512-w2DtsfXBBJddJacXMBhElGEYqCZQqN99Se1qeYn8DVLB33owlrlLftIbMzn5nz1OITfDVknXF433tBrLEAOEjA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.2.tgz#222348c080a1678e0e74ea63fe76f275882d1fd7" - integrity sha512-1JAZtUrqYyGsS7IDmFeaem+/LJqujfLZ2weLR9ugB0ufUPjzf8cguyVT1g5im7f7RXxuLq1xUxEzvm68uYRtGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.2.tgz#425b11dc62fc26939a2ab42cbba680bdf5734546" - integrity sha512-ebR0zU9OvI2N4qiAC38KIAK75KItpIPTpAtd2r4OZmMFeKbKJpUFLYP2EuDut82+BmYi8sz42B+TfTptJ9iG5Q== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.2.tgz#82b4cc06571143faf50626104b335dd71baa4f9e" - integrity sha512-DcTQY9syxu9BpU3Uo94fjCB3LN9/hgPS8oUL7KrSW3bA2ePrKZZPJcc5y0hoJAM9dft3pGfErtEUvxXQcfLxUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - -"@babel/plugin-proposal-object-rest-spread@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.4.tgz#0e2b4de419915dc0b409378e829412e2031777c4" - integrity sha512-AYosOWBlyyXEagrPRfLJ1enStufsr7D1+ddpj8OLi9k7B6+NdZ0t/9V7Fh+wJ4g2Jol8z2JkgczYqtWrZd4vbA== - dependencies: - "@babel/compat-data" "^7.14.4" - "@babel/helper-compilation-targets" "^7.14.4" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.14.2" - -"@babel/plugin-proposal-optional-catch-binding@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.2.tgz#150d4e58e525b16a9a1431bd5326c4eed870d717" - integrity sha512-XtkJsmJtBaUbOxZsNk0Fvrv8eiqgneug0A6aqLFZ4TSkar2L5dSXWcnUKHgmjJt49pyB/6ZHvkr3dPgl9MOWRQ== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.13.12", "@babel/plugin-proposal-optional-chaining@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.2.tgz#df8171a8b9c43ebf4c1dabe6311b432d83e1b34e" - integrity sha512-qQByMRPwMZJainfig10BoaDldx/+VDtNcrA7qdNaEOAj6VXud+gfrkA8j4CRAU5HjnWREXqIpSpH30qZX1xivA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.13.0.tgz#04bd4c6d40f6e6bbfa2f57e2d8094bad900ef787" - integrity sha512-MXyyKQd9inhx1kDYPkFRVOBXQ20ES8Pto3T7UZ92xj2mY0EVD8oAVzeyYuVfy/mxAdTSIayOvg+aVzcHV2bn6Q== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-proposal-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.0.tgz#b1a1f2030586b9d3489cc26179d2eb5883277636" - integrity sha512-59ANdmEwwRUkLjB7CRtwJxxwtjESw+X2IePItA+RGQh+oy5RmpCh/EvVVvh5XQc3yxsm5gtv0+i9oBZhaDNVTg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-create-class-features-plugin" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - -"@babel/plugin-proposal-unicode-property-regex@^7.12.13", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.13.tgz#bebde51339be829c17aaaaced18641deb62b39ba" - integrity sha512-XyJmZidNfofEkqFV5VC/bLabGmO5QzenPO/YOfGuEbgU+2sSwMmio3YLb4WtBgcmmdwZHyVyv8on77IUjQ5Gvg== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-class-static-block@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.12.13.tgz#8e3d674b0613e67975ceac2776c97b60cafc5c9c" - integrity sha512-ZmKQ0ZXR0nYpHZIIuj9zE7oIqCx2hw9TKi+lIo73NNrMPAZGHfS92/VRV0ZmPj6H2ffBgyFHXvJ5NYsNeEaP2A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.10.4": - version "7.10.4" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-private-property-in-object@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.0.tgz#762a4babec61176fec6c88480dec40372b140c0b" - integrity sha512-bda3xF8wGl5/5btF794utNOL0Jw+9jE5C1sLZcoK7c4uonE/y3iQiyG+KbkF3WBV/paX58VCpjhxLPkdj5Fe4w== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-syntax-top-level-await@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.13.tgz#c5f0fa6e249f5b739727f923540cf7a806130178" - integrity sha512-A81F9pDwyS7yM//KwbCSDqy3Uj4NMIurtplxphWxoYtNPov7cJsDkAFNNyVlIZ3jwGycVsurZ+LtOA8gZ376iQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-arrow-functions@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.13.0.tgz#10a59bebad52d637a027afa692e8d5ceff5e3dae" - integrity sha512-96lgJagobeVmazXFaDrbmCLQxBysKu7U6Do3mLsx27gf5Dk85ezysrs2BZUpXD703U/Su1xTBDxxar2oa4jAGg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-async-to-generator@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.13.0.tgz#8e112bf6771b82bf1e974e5e26806c5c99aa516f" - integrity sha512-3j6E004Dx0K3eGmhxVJxwwI89CTJrce7lg3UrtFuDAVQ/2+SJ/h/aSFOeE6/n0WB1GsOffsJp6MnPQNQ8nmwhg== - dependencies: - "@babel/helper-module-imports" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-remap-async-to-generator" "^7.13.0" - -"@babel/plugin-transform-block-scoped-functions@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.13.tgz#a9bf1836f2a39b4eb6cf09967739de29ea4bf4c4" - integrity sha512-zNyFqbc3kI/fVpqwfqkg6RvBgFpC4J18aKKMmv7KdQ/1GgREapSJAykLMVNwfRGO3BtHj3YQZl8kxCXPcVMVeg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-block-scoping@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.4.tgz#caf140b0b2e2462c509553d140e6d0abefb61ed8" - integrity sha512-5KdpkGxsZlTk+fPleDtGKsA+pon28+ptYmMO8GBSa5fHERCJWAzj50uAfCKBqq42HO+Zot6JF1x37CRprwmN4g== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-classes@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.4.tgz#a83c15503fc71a0f99e876fdce7dadbc6575ec3a" - integrity sha512-p73t31SIj6y94RDVX57rafVjttNr8MvKEgs5YFatNB/xC68zM3pyosuOEcQmYsYlyQaGY9R7rAULVRcat5FKJQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.12.13" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-optimise-call-expression" "^7.12.13" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-replace-supers" "^7.14.4" - "@babel/helper-split-export-declaration" "^7.12.13" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.13.0.tgz#845c6e8b9bb55376b1fa0b92ef0bdc8ea06644ed" - integrity sha512-RRqTYTeZkZAz8WbieLTvKUEUxZlUTdmL5KGMyZj7FnMfLNKV4+r5549aORG/mgojRmFlQMJDUupwAMiF2Q7OUg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-destructuring@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.4.tgz#acbec502e9951f30f4441eaca1d2f29efade59ed" - integrity sha512-JyywKreTCGTUsL1OKu1A3ms/R1sTP0WxbpXlALeGzF53eB3bxtNkYdMj9SDgK7g6ImPy76J5oYYKoTtQImlhQA== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-dotall-regex@^7.12.13", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.13.tgz#3f1601cc29905bfcb67f53910f197aeafebb25ad" - integrity sha512-foDrozE65ZFdUC2OfgeOCrEPTxdB3yjqxpXh8CH+ipd9CHd4s/iq81kcUpyH8ACGNEPdFqbtzfgzbT/ZGlbDeQ== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-duplicate-keys@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.13.tgz#6f06b87a8b803fd928e54b81c258f0a0033904de" - integrity sha512-NfADJiiHdhLBW3pulJlJI2NB0t4cci4WTZ8FtdIuNc2+8pslXdPtRRAEWqUY+m9kNOk2eRYbTAOipAxlrOcwwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-exponentiation-operator@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.13.tgz#4d52390b9a273e651e4aba6aee49ef40e80cd0a1" - integrity sha512-fbUelkM1apvqez/yYx1/oICVnGo2KM5s63mhGylrmXUxK/IAXSIf87QIxVfZldWf4QsOafY6vV3bX8aMHSvNrA== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-for-of@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.13.0.tgz#c799f881a8091ac26b54867a845c3e97d2696062" - integrity sha512-IHKT00mwUVYE0zzbkDgNRP6SRzvfGCYsOxIRz8KsiaaHCcT9BWIkO+H9QRJseHBLOGBZkHUdHiqj6r0POsdytg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-function-name@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.13.tgz#bb024452f9aaed861d374c8e7a24252ce3a50051" - integrity sha512-6K7gZycG0cmIwwF7uMK/ZqeCikCGVBdyP2J5SKNCXO5EOHcqi+z7Jwf8AmyDNcBgxET8DrEtCt/mPKPyAzXyqQ== - dependencies: - "@babel/helper-function-name" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.13.tgz#2ca45bafe4a820197cf315794a4d26560fe4bdb9" - integrity sha512-FW+WPjSR7hiUxMcKqyNjP05tQ2kmBCdpEpZHY1ARm96tGQCCBvXKnpjILtDplUnJ/eHZ0lALLM+d2lMFSpYJrQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-member-expression-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.13.tgz#5ffa66cd59b9e191314c9f1f803b938e8c081e40" - integrity sha512-kxLkOsg8yir4YeEPHLuO2tXP9R/gTjpuTOjshqSpELUN3ZAg2jfDnKUvzzJxObun38sw3wm4Uu69sX/zA7iRvg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-modules-amd@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.2.tgz#6622806fe1a7c07a1388444222ef9535f2ca17b0" - integrity sha512-hPC6XBswt8P3G2D1tSV2HzdKvkqOpmbyoy+g73JG0qlF/qx2y3KaMmXb1fLrpmWGLZYA0ojCvaHdzFWjlmV+Pw== - dependencies: - "@babel/helper-module-transforms" "^7.14.2" - "@babel/helper-plugin-utils" "^7.13.0" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-commonjs@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.0.tgz#52bc199cb581e0992edba0f0f80356467587f161" - integrity sha512-EX4QePlsTaRZQmw9BsoPeyh5OCtRGIhwfLquhxGp5e32w+dyL8htOcDwamlitmNFK6xBZYlygjdye9dbd9rUlQ== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-simple-access" "^7.13.12" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-systemjs@^7.13.8": - version "7.13.8" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.13.8.tgz#6d066ee2bff3c7b3d60bf28dec169ad993831ae3" - integrity sha512-hwqctPYjhM6cWvVIlOIe27jCIBgHCsdH2xCJVAYQm7V5yTMoilbVMi9f6wKg0rpQAOn6ZG4AOyvCqFF/hUh6+A== - dependencies: - "@babel/helper-hoist-variables" "^7.13.0" - "@babel/helper-module-transforms" "^7.13.0" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-identifier" "^7.12.11" - babel-plugin-dynamic-import-node "^2.3.3" - -"@babel/plugin-transform-modules-umd@^7.14.0": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.0.tgz#2f8179d1bbc9263665ce4a65f305526b2ea8ac34" - integrity sha512-nPZdnWtXXeY7I87UZr9VlsWme3Y0cfFFE41Wbxz4bbaexAjNMInXPFUpRRUJ8NoMm0Cw+zxbqjdPmLhcjfazMw== - dependencies: - "@babel/helper-module-transforms" "^7.14.0" - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.13.tgz#2213725a5f5bbbe364b50c3ba5998c9599c5c9d9" - integrity sha512-Xsm8P2hr5hAxyYblrfACXpQKdQbx4m2df9/ZZSQ8MAhsadw06+jW7s9zsSw6he+mJZXRlVMyEnVktJo4zjk1WA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - -"@babel/plugin-transform-new-target@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.13.tgz#e22d8c3af24b150dd528cbd6e685e799bf1c351c" - integrity sha512-/KY2hbLxrG5GTQ9zzZSc3xWiOy379pIETEhbtzwZcw9rvuaVV4Fqy7BYGYOWZnaoXIQYbbJ0ziXLa/sKcGCYEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-object-super@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.13.tgz#b4416a2d63b8f7be314f3d349bd55a9c1b5171f7" - integrity sha512-JzYIcj3XtYspZDV8j9ulnoMPZZnF/Cj0LUxPOjR89BdBVx+zYJI9MdMIlUZjbXDX+6YVeS6I3e8op+qQ3BYBoQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - "@babel/helper-replace-supers" "^7.12.13" - -"@babel/plugin-transform-parameters@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.2.tgz#e4290f72e0e9e831000d066427c4667098decc31" - integrity sha512-NxoVmA3APNCC1JdMXkdYXuQS+EMdqy0vIwyDHeKHiJKRxmp1qGSdb0JLEIoPRhkx6H/8Qi3RJ3uqOCYw8giy9A== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-property-literals@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.13.tgz#4e6a9e37864d8f1b3bc0e2dce7bf8857db8b1a81" - integrity sha512-nqVigwVan+lR+g8Fj8Exl0UQX2kymtjcWfMOYM1vTYEKujeyv2SkMgazf2qNcK7l4SDiKyTA/nHCPqL4e2zo1A== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-regenerator@^7.13.15": - version "7.13.15" - resolved "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.13.15.tgz#e5eb28945bf8b6563e7f818945f966a8d2997f39" - integrity sha512-Bk9cOLSz8DiurcMETZ8E2YtIVJbFCPGW28DJWUakmyVWtQSm6Wsf0p4B4BfEr/eL2Nkhe/CICiUiMOCi1TPhuQ== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.13.tgz#7d9988d4f06e0fe697ea1d9803188aa18b472695" - integrity sha512-xhUPzDXxZN1QfiOy/I5tyye+TRz6lA7z6xaT4CLOjPRMVg1ldRf0LHw0TDBpYL4vG78556WuHdyO9oi5UmzZBg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-shorthand-properties@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.13.tgz#db755732b70c539d504c6390d9ce90fe64aff7ad" - integrity sha512-xpL49pqPnLtf0tVluuqvzWIgLEhuPpZzvs2yabUHSKRNlN7ScYU7aMlmavOeyXJZKgZKQRBlh8rHbKiJDraTSw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-spread@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.13.0.tgz#84887710e273c1815ace7ae459f6f42a5d31d5fd" - integrity sha512-V6vkiXijjzYeFmQTr3dBxPtZYLPcUfY34DebOU27jIl2M/Y8Egm52Hw82CSjjPqd54GTlJs5x+CR7HeNr24ckg== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" - -"@babel/plugin-transform-sticky-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.13.tgz#760ffd936face73f860ae646fb86ee82f3d06d1f" - integrity sha512-Jc3JSaaWT8+fr7GRvQP02fKDsYk4K/lYwWq38r/UGfaxo89ajud321NH28KRQ7xy1Ybc0VUE5Pz8psjNNDUglg== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-template-literals@^7.13.0": - version "7.13.0" - resolved "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.13.0.tgz#a36049127977ad94438dee7443598d1cefdf409d" - integrity sha512-d67umW6nlfmr1iehCcBv69eSUSySk1EsIS8aTDX4Xo9qajAh6mYtcl4kJrBkGXuxZPEgVr7RVfAvNW6YQkd4Mw== - dependencies: - "@babel/helper-plugin-utils" "^7.13.0" - -"@babel/plugin-transform-typeof-symbol@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.13.tgz#785dd67a1f2ea579d9c2be722de8c84cb85f5a7f" - integrity sha512-eKv/LmUJpMnu4npgfvs3LiHhJua5fo/CysENxa45YCQXZwKnGCQKAg87bvoqSW1fFT+HA32l03Qxsm8ouTY3ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-escapes@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.13.tgz#840ced3b816d3b5127dd1d12dcedc5dead1a5e74" - integrity sha512-0bHEkdwJ/sN/ikBHfSmOXPypN/beiGqjo+o4/5K+vxEFNPRPdImhviPakMKG4x96l85emoa0Z6cDflsdBusZbw== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-transform-unicode-regex@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.13.tgz#b52521685804e155b1202e83fc188d34bb70f5ac" - integrity sha512-mDRzSNY7/zopwisPZ5kM9XKCfhchqIYwAKRERtEnhYscZB79VRekuRSoYbN0+KVe3y8+q1h6A4svXtP7N+UoCA== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.12.13" - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/preset-env@^7.14.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.4.tgz#73fc3228c59727e5e974319156f304f0d6685a2d" - integrity sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA== - dependencies: - "@babel/compat-data" "^7.14.4" - "@babel/helper-compilation-targets" "^7.14.4" - "@babel/helper-plugin-utils" "^7.13.0" - "@babel/helper-validator-option" "^7.12.17" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.13.12" - "@babel/plugin-proposal-async-generator-functions" "^7.14.2" - "@babel/plugin-proposal-class-properties" "^7.13.0" - "@babel/plugin-proposal-class-static-block" "^7.14.3" - "@babel/plugin-proposal-dynamic-import" "^7.14.2" - "@babel/plugin-proposal-export-namespace-from" "^7.14.2" - "@babel/plugin-proposal-json-strings" "^7.14.2" - "@babel/plugin-proposal-logical-assignment-operators" "^7.14.2" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.2" - "@babel/plugin-proposal-numeric-separator" "^7.14.2" - "@babel/plugin-proposal-object-rest-spread" "^7.14.4" - "@babel/plugin-proposal-optional-catch-binding" "^7.14.2" - "@babel/plugin-proposal-optional-chaining" "^7.14.2" - "@babel/plugin-proposal-private-methods" "^7.13.0" - "@babel/plugin-proposal-private-property-in-object" "^7.14.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.12.13" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.12.13" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.0" - "@babel/plugin-syntax-top-level-await" "^7.12.13" - "@babel/plugin-transform-arrow-functions" "^7.13.0" - "@babel/plugin-transform-async-to-generator" "^7.13.0" - "@babel/plugin-transform-block-scoped-functions" "^7.12.13" - "@babel/plugin-transform-block-scoping" "^7.14.4" - "@babel/plugin-transform-classes" "^7.14.4" - "@babel/plugin-transform-computed-properties" "^7.13.0" - "@babel/plugin-transform-destructuring" "^7.14.4" - "@babel/plugin-transform-dotall-regex" "^7.12.13" - "@babel/plugin-transform-duplicate-keys" "^7.12.13" - "@babel/plugin-transform-exponentiation-operator" "^7.12.13" - "@babel/plugin-transform-for-of" "^7.13.0" - "@babel/plugin-transform-function-name" "^7.12.13" - "@babel/plugin-transform-literals" "^7.12.13" - "@babel/plugin-transform-member-expression-literals" "^7.12.13" - "@babel/plugin-transform-modules-amd" "^7.14.2" - "@babel/plugin-transform-modules-commonjs" "^7.14.0" - "@babel/plugin-transform-modules-systemjs" "^7.13.8" - "@babel/plugin-transform-modules-umd" "^7.14.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.13" - "@babel/plugin-transform-new-target" "^7.12.13" - "@babel/plugin-transform-object-super" "^7.12.13" - "@babel/plugin-transform-parameters" "^7.14.2" - "@babel/plugin-transform-property-literals" "^7.12.13" - "@babel/plugin-transform-regenerator" "^7.13.15" - "@babel/plugin-transform-reserved-words" "^7.12.13" - "@babel/plugin-transform-shorthand-properties" "^7.12.13" - "@babel/plugin-transform-spread" "^7.13.0" - "@babel/plugin-transform-sticky-regex" "^7.12.13" - "@babel/plugin-transform-template-literals" "^7.13.0" - "@babel/plugin-transform-typeof-symbol" "^7.12.13" - "@babel/plugin-transform-unicode-escapes" "^7.12.13" - "@babel/plugin-transform-unicode-regex" "^7.12.13" - "@babel/preset-modules" "^0.1.4" - "@babel/types" "^7.14.4" - babel-plugin-polyfill-corejs2 "^0.2.0" - babel-plugin-polyfill-corejs3 "^0.2.0" - babel-plugin-polyfill-regenerator "^0.2.0" - core-js-compat "^3.9.0" - semver "^6.3.0" - -"@babel/preset-modules@^0.1.4": - version "0.1.4" - resolved "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz#362f2b68c662842970fdb5e254ffc8fc1c2e415e" - integrity sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/runtime@^7.8.4": - version "7.14.0" - resolved "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6" - integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.12.13": - version "7.12.13" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.12.13.tgz#530265be8a2589dbb37523844c5bcb55947fb327" - integrity sha512-/7xxiGA57xMo/P2GVvdEumr8ONhFOhfgq2ihK3h1e6THqzTAkHbkXgB0xI9yeTfIUoH3+oAeHhqm/I43OTbbjA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/parser" "^7.12.13" - "@babel/types" "^7.12.13" - -"@babel/template@^7.14.5": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz#a9bc9d8b33354ff6e55a9c60d1109200a68974f4" - integrity sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/parser" "^7.14.5" - "@babel/types" "^7.14.5" - -"@babel/traverse@^7.13.0", "@babel/traverse@^7.13.15", "@babel/traverse@^7.14.2": - version "7.14.2" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.2.tgz#9201a8d912723a831c2679c7ebbf2fe1416d765b" - integrity sha512-TsdRgvBFHMyHOOzcP9S6QU0QQtjxlRpEYOy3mcCO5RgmC305ki42aSAmfZEMSSYBla2oZ9BMqYlncBaKmD/7iA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@babel/generator" "^7.14.2" - "@babel/helper-function-name" "^7.14.2" - "@babel/helper-split-export-declaration" "^7.12.13" - "@babel/parser" "^7.14.2" - "@babel/types" "^7.14.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/traverse@^7.14.5", "@babel/traverse@^7.7.0": - version "7.14.7" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz#64007c9774cfdc3abd23b0780bc18a3ce3631753" - integrity sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-function-name" "^7.14.5" - "@babel/helper-hoist-variables" "^7.14.5" - "@babel/helper-split-export-declaration" "^7.14.5" - "@babel/parser" "^7.14.7" - "@babel/types" "^7.14.5" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.12.1", "@babel/types@^7.12.13", "@babel/types@^7.13.0", "@babel/types@^7.13.12", "@babel/types@^7.13.16", "@babel/types@^7.14.2", "@babel/types@^7.14.4", "@babel/types@^7.4.4": - version "7.14.4" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.4.tgz#bfd6980108168593b38b3eb48a24aa026b919bc0" - integrity sha512-lCj4aIs0xUefJFQnwwQv2Bxg7Omd6bgquZ6LGC+gGMh6/s5qDVfjuCMlDmYQ15SLsWHd9n+X3E75lKIhl5Lkiw== - dependencies: - "@babel/helper-validator-identifier" "^7.14.0" - to-fast-properties "^2.0.0" - -"@babel/types@^7.14.5", "@babel/types@^7.7.0": - version "7.14.5" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz#3bb997ba829a2104cedb20689c4a5b8121d383ff" - integrity sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - to-fast-properties "^2.0.0" - -"@eslint/eslintrc@^0.4.2": - version "0.4.2" - resolved "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.2.tgz#f63d0ef06f5c0c57d76c4ab5f63d3835c51b0179" - integrity sha512-8nmGq/4ycLpIwzvhI4tNDmQztZ8sp+hI7cyG8i1nQDhkAbRzHpXPidRAHlNvCZQpJTKw5ItIpMw9RSToGF00mg== - dependencies: - ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" - globals "^13.9.0" - ignore "^4.0.6" - import-fresh "^3.2.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - strip-json-comments "^3.1.1" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.7" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.7.tgz#94c23db18ee4653e129abd26fb06f870ac9e1ee2" - integrity sha512-BTIhocbPBSrRmHxOAJFtR18oLhxTtAFDAvL8hY1S3iU8k+E60W/YFs4jrixGzQjMpF4qPXxIQHcjVD9dz1C2QA== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@rollup/plugin-babel@^5.3.0": - version "5.3.0" - resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz#9cb1c5146ddd6a4968ad96f209c50c62f92f9879" - integrity sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-multi-entry@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@rollup/plugin-multi-entry/-/plugin-multi-entry-4.0.0.tgz#8e105f16ec1bb26639eb3302c8db5665f44b9939" - integrity sha512-1Sw86rwFxrNS7ECY3iSZ7T940xKnruNGpmQDgSDVTp+VTa1g5cPXNzBgp+IoOer41CiVeGFLwYwvicVoJLHEDQ== - dependencies: - "@rollup/plugin-virtual" "^2.0.3" - matched "^5.0.0" - -"@rollup/plugin-replace@^2.4.2": - version "2.4.2" - resolved "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz#a2d539314fbc77c244858faa523012825068510a" - integrity sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg== - dependencies: - "@rollup/pluginutils" "^3.1.0" - magic-string "^0.25.7" - -"@rollup/plugin-virtual@^2.0.3": - version "2.0.3" - resolved "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz#0afc88d75c1e1378ab290b8e9898d4edb5be0d74" - integrity sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw== - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@types/estree@*": - version "0.0.48" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.48.tgz#18dc8091b285df90db2f25aa7d906cfc394b7f74" - integrity sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== - dependencies: - "@types/minimatch" "*" - "@types/node" "*" - -"@types/minimatch@*": - version "3.0.4" - resolved "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== - -"@types/node@*": - version "15.12.2" - resolved "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz#1f2b42c4be7156ff4a6f914b2fb03d05fa84e38d" - integrity sha512-zjQ69G564OCIWIOHSXyQEEDpdpGl+G348RAKY0XXy9Z5kU9Vzv1GMNnkar/ZJ8dzXB3COzD9Mo9NtRZ4xfgUww== - -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== - -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ajv@^6.10.0, ajv@^6.12.4: - version "6.12.6" - resolved "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" - integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -ajv@^8.0.1: - version "8.6.0" - resolved "https://registry.npmjs.org/ajv/-/ajv-8.6.0.tgz#60cc45d9c46a477d80d92c48076d972c342e5720" - integrity sha512-cnUG4NSBiM4YFBxgZIj/In3/6KX+rQ2l2YPRVcvAMQGWEPKuXoPIhxzwqh31jA3IPbI4qEOp/5ILI4ynioXsGQ== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - -ansi-colors@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" - integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -anymatch@~3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-find-index@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -babel-eslint@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-plugin-dynamic-import-node@^2.3.3: - version "2.3.3" - resolved "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" - integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== - dependencies: - object.assign "^4.1.0" - -babel-plugin-polyfill-corejs2@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz#e9124785e6fd94f94b618a7954e5693053bf5327" - integrity sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ== - dependencies: - "@babel/compat-data" "^7.13.11" - "@babel/helper-define-polyfill-provider" "^0.2.2" - semver "^6.1.1" - -babel-plugin-polyfill-corejs3@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.2.tgz#7424a1682ee44baec817327710b1b094e5f8f7f5" - integrity sha512-l1Cf8PKk12eEk5QP/NQ6TH8A1pee6wWDJ96WjxrMXFLHLOBFzYM4moG80HFgduVhTqAFez4alnZKEhP/bYHg0A== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - core-js-compat "^3.9.1" - -babel-plugin-polyfill-regenerator@^0.2.0: - version "0.2.2" - resolved "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz#b310c8d642acada348c1fa3b3e6ce0e851bee077" - integrity sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg== - dependencies: - "@babel/helper-define-polyfill-provider" "^0.2.2" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.1, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.16.6: - version "4.16.6" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz#d7901277a5a88e554ed305b183ec9b0c08f66fa2" - integrity sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ== - dependencies: - caniuse-lite "^1.0.30001219" - colorette "^1.2.2" - electron-to-chromium "^1.3.723" - escalade "^3.1.1" - node-releases "^1.1.71" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -caniuse-lite@^1.0.30001219: - version "1.0.30001236" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001236.tgz#0a80de4cdf62e1770bb46a30d884fc8d633e3958" - integrity sha512-o0PRQSrSCGJKCPZcgMzl5fUaj5xHe8qA2m4QRvnyY4e1lITqoNkr7q/Oh1NcpGSy0Th97UZ35yoKcINPoq7YOQ== - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chokidar@^3.5.0: - version "3.5.1" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.5.0" - optionalDependencies: - fsevents "~2.3.1" - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.4: - version "1.5.5" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz#65474a8f0e7439625f3d27a6a19d89fc45223014" - integrity sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/color/-/color-3.1.3.tgz#ca67fb4e7b97d611dcde39eceed422067d91596e" - integrity sha512-xgXAcTHa2HeFCGLE9Xs/R82hujGtu9Jd9x4NW3T34+OMs7VoPsjwzRczKHvTAHeJwWFwX5j15+MgAppE8ztObQ== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.4" - -colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commenting@1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/commenting/-/commenting-1.1.0.tgz#fae14345c6437b8554f30bc6aa6c1e1633033590" - integrity sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -core-js-compat@^3.9.0, core-js-compat@^3.9.1: - version "3.14.0" - resolved "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.14.0.tgz#b574dabf29184681d5b16357bd33d104df3d29a5" - integrity sha512-R4NS2eupxtiJU+VwgkF9WTpnSfZW4pogwKHd8bclWU2sp93Pr5S1uYJI84cMOubJRou7bcfL0vmwtLslWN5p3A== - dependencies: - browserslist "^4.16.6" - semver "7.0.0" - -core-js@^3.1.3: - version "3.14.0" - resolved "https://registry.npmjs.org/core-js/-/core-js-3.14.0.tgz#62322b98c71cc2018b027971a69419e2425c2a6c" - integrity sha512-3s+ed8er9ahK+zJpp9ZtuVcDoFzHNiZsPbNAAE4KXgrRHbjSqqNN6xGSXq6bq7TZIbKj4NLrLb6bJ5i+vSVjHA== - -cross-spawn@^7.0.2: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: - version "4.3.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -deep-is@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -del@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7" - integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA== - dependencies: - globby "^10.0.1" - graceful-fs "^4.2.2" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.1" - p-map "^3.0.0" - rimraf "^3.0.0" - slash "^3.0.0" - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -electron-to-chromium@^1.3.723: - version "1.3.750" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.750.tgz#7e5ef6f478316b0bd656af5942fe502610e97eaf" - integrity sha512-Eqy9eHNepZxJXT+Pc5++zvEi5nQ6AGikwFYDCYwXUFBr+ynJ6pDG7MzZmwGYCIuXShLJM0n4bq+aoKDmvSGJ8A== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -enquirer@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escape-string-regexp@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" - integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== - -eslint-config-google@^0.14.0: - version "0.14.0" - resolved "https://registry.npmjs.org/eslint-config-google/-/eslint-config-google-0.14.0.tgz#4f5f8759ba6e11b424294a219dbfa18c508bcc1a" - integrity sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw== - -eslint-config-prettier@^8.3.0: - version "8.3.0" - resolved "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" - integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== - -eslint-plugin-prettier@^3.4.0: - version "3.4.0" - resolved "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== - dependencies: - prettier-linter-helpers "^1.0.0" - -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== - dependencies: - esrecurse "^4.3.0" - estraverse "^4.1.1" - -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: - version "1.3.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" - integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== - -eslint-visitor-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" - integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== - -eslint@^7.29.0: - version "7.29.0" - resolved "https://registry.npmjs.org/eslint/-/eslint-7.29.0.tgz#ee2a7648f2e729485e4d0bd6383ec1deabc8b3c0" - integrity sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA== - dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.2" - ajv "^6.10.0" - chalk "^4.0.0" - cross-spawn "^7.0.2" - debug "^4.0.1" - doctrine "^3.0.0" - enquirer "^2.3.5" - escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" - esquery "^1.4.0" - esutils "^2.0.2" - fast-deep-equal "^3.1.3" - file-entry-cache "^6.0.1" - functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" - globals "^13.6.0" - ignore "^4.0.6" - import-fresh "^3.0.0" - imurmurhash "^0.1.4" - is-glob "^4.0.0" - js-yaml "^3.13.1" - json-stable-stringify-without-jsonify "^1.0.1" - levn "^0.4.1" - lodash.merge "^4.6.2" - minimatch "^3.0.4" - natural-compare "^1.4.0" - optionator "^0.9.1" - progress "^2.0.0" - regexpp "^3.1.0" - semver "^7.2.1" - strip-ansi "^6.0.0" - strip-json-comments "^3.1.0" - table "^6.0.9" - text-table "^0.2.0" - v8-compile-cache "^2.0.3" - -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== - dependencies: - acorn "^7.4.0" - acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -esquery@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" - integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w== - dependencies: - estraverse "^5.1.0" - -esrecurse@^4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" - integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== - dependencies: - estraverse "^5.2.0" - -estraverse@^4.1.1: - version "4.3.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: - version "3.1.3" - resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" - integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== - -fast-diff@^1.1.2: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.0.0, fast-glob@^3.0.3: - version "3.2.5" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" - merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== - dependencies: - reusify "^1.0.4" - -file-entry-cache@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" - integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== - dependencies: - flat-cache "^3.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -flat-cache@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" - integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== - dependencies: - flatted "^3.1.0" - rimraf "^3.0.2" - -flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.1: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-intrinsic@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" - integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - -glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@7.1.7, glob@^7.1.3, glob@^7.1.6: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globals@^13.6.0, globals@^13.9.0: - version "13.9.0" - resolved "https://registry.npmjs.org/globals/-/globals-13.9.0.tgz#4bf2bf635b334a173fb1daf7c5e6b218ecdc06cb" - integrity sha512-74/FduwI/JaIrr1H8e71UbDE+5x7pIPs1C2rrwC52SszOo043CsWOZEMW7o2Y58xwm9b+0RBKDxY5n2sUpEFxA== - dependencies: - type-fest "^0.20.2" - -globby@^10.0.1: - version "10.0.2" - resolved "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" - integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.0.3" - glob "^7.1.3" - ignore "^5.1.1" - merge2 "^1.2.3" - slash "^3.0.0" - -graceful-fs@^4.2.2: - version "4.2.6" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" - integrity sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== - -import-fresh@^3.0.0, import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-core-module@^2.2.0: - version "2.4.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1" - integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A== - dependencies: - has "^1.0.3" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-reference@^1.1.2: - version "1.2.1" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -jest-worker@^26.2.1: - version "26.6.2" - resolved "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" - integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json5@^2.1.2: - version "2.2.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - -levn@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" - integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== - dependencies: - prelude-ls "^1.2.1" - type-check "~0.4.0" - -livereload-js@^3.3.1: - version "3.3.2" - resolved "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.2.tgz#c88b009c6e466b15b91faa26fd7c99d620e12651" - integrity sha512-w677WnINxFkuixAoUEXOStewzLYGI76XVag+0JWMMEyjJQKs0ibWZMxkTlB96Lm3EjZ7IeOxVziBEbtxVQqQZA== - -livereload@^0.9.1: - version "0.9.3" - resolved "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz#a714816375ed52471408bede8b49b2ee6a0c55b1" - integrity sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw== - dependencies: - chokidar "^3.5.0" - livereload-js "^3.3.1" - opts ">= 1.2.0" - ws "^7.4.3" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" - integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= - -lodash.merge@^4.6.2: - version "4.6.2" - resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" - integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== - -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - -lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@0.25.7, magic-string@^0.25.2, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -matched@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/matched/-/matched-5.0.1.tgz#620606d9dac6b7f4e955354b82e02ef4e3a62dc3" - integrity sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw== - dependencies: - glob "^7.1.6" - picomatch "^2.2.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3, merge2@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.2: - version "4.0.4" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" - integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== - dependencies: - braces "^3.0.1" - picomatch "^2.2.3" - -mime@>=2.4.6: - version "2.5.2" - resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe" - integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== - -minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -moment@2.29.1: - version "2.29.1" - resolved "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" - integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -node-releases@^1.1.71: - version "1.1.73" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz#dd4e81ddd5277ff846b80b52bb40c49edf7a7b20" - integrity sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.0: - version "4.1.2" - resolved "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" - integrity sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ== - dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - has-symbols "^1.0.1" - object-keys "^1.1.1" - -once@^1.3.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -opener@1: - version "1.5.2" - resolved "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" - integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== - -optionator@^0.9.1: - version "0.9.1" - resolved "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" - integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw== - dependencies: - deep-is "^0.1.3" - fast-levenshtein "^2.0.6" - levn "^0.4.1" - prelude-ls "^1.2.1" - type-check "^0.4.0" - word-wrap "^1.2.3" - -"opts@>= 1.2.0": - version "2.0.2" - resolved "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz#a17e189fbbfee171da559edd8a42423bc5993ce1" - integrity sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg== - -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - -package-name-regex@2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/package-name-regex/-/package-name-regex-2.0.1.tgz#69e5e5412a7d5367d3cb965da6c4e480e5e9ffa4" - integrity sha512-U+K6/cuwHwr/8pUQrpNpKOIFSdS/EluTRSmtn92mug1UiPcff4t9AHs36e2xXJtpEtRfbg+JOj3Y/GLX+mzT6w== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.2.3: - version "2.3.0" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" - integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== - -prelude-ls@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" - integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== - -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== - -progress@^2.0.0: - version "2.0.3" - resolved "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -punycode@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -randombytes@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== - dependencies: - picomatch "^2.2.1" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.2" - resolved "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" - integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== - -regenerator-runtime@^0.13.4: - version "0.13.7" - resolved "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" - integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== - -regenerator-transform@^0.14.2: - version "0.14.5" - resolved "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" - integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== - dependencies: - "@babel/runtime" "^7.8.4" - -regexpp@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" - integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== - -regexpu-core@^4.7.1: - version "4.7.1" - resolved "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" - integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regjsgen@^0.5.1: - version "0.5.2" - resolved "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" - integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== - -regjsparser@^0.6.4: - version "0.6.9" - resolved "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz#b489eef7c9a2ce43727627011429cf833a7183e6" - integrity sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ== - dependencies: - jsesc "~0.5.0" - -require-from-string@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" - integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.14.2: - version "1.20.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" - integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== - dependencies: - is-core-module "^2.2.0" - path-parse "^1.0.6" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.0, rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-babel@^4.4.0: - version "4.4.0" - resolved "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz#d15bd259466a9d1accbdb2fe2fff17c52d030acb" - integrity sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw== - dependencies: - "@babel/helper-module-imports" "^7.0.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-commonjs@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" - integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== - dependencies: - estree-walker "^0.6.1" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-delete@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/rollup-plugin-delete/-/rollup-plugin-delete-2.0.0.tgz#262acf80660d48c3b167fb0baabd0c3ab985c153" - integrity sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA== - dependencies: - del "^5.1.0" - -rollup-plugin-license@^2.4.0: - version "2.5.0" - resolved "https://registry.npmjs.org/rollup-plugin-license/-/rollup-plugin-license-2.5.0.tgz#9c0ba9b3562564c555b48142c420af80a9909f32" - integrity sha512-HUjGV+i1tRxi/zL4WpeNCLJZfEJBbCcDmwGJCjKBvcLDIK6VNW1JmYKjSJJOqJjNqRIvKt6/BLSQB9RwNDLtQw== - dependencies: - commenting "1.1.0" - glob "7.1.7" - lodash "4.17.21" - magic-string "0.25.7" - mkdirp "1.0.4" - moment "2.29.1" - package-name-regex "2.0.1" - spdx-expression-validate "2.0.0" - spdx-satisfies "5.0.1" - -rollup-plugin-livereload@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.0.tgz#d3928d74e8cf2ae4286c5dd46b770fd3f3b82313" - integrity sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A== - dependencies: - livereload "^0.9.1" - -rollup-plugin-module-replacement@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/rollup-plugin-module-replacement/-/rollup-plugin-module-replacement-1.2.1.tgz#2c14115ca132cd2f95862c1ecd7325f96d987f3d" - integrity sha512-nFWmUGJGX6Fof9EAdyZqCabjniW7cGdm3w+O9/KZwphL30PG5S/tFAniwNEBm4eJA2fTEHj/kqFJEQJ+1bOq4w== - dependencies: - slash "^3.0.0" - -rollup-plugin-multi-input@^1.3.1: - version "1.3.1" - resolved "https://registry.npmjs.org/rollup-plugin-multi-input/-/rollup-plugin-multi-input-1.3.1.tgz#07b903b618c005871fea1bd0c4efae7d1aac4fa1" - integrity sha512-bPsxHR6dUney7zsCAAlfkq7lbuy5xph2CvUstSv88oqhtRiLWXwVjiA1Gb4HVjC6I9sJI2eZeQlozXa+GXJKDA== - dependencies: - core-js "^3.1.3" - fast-glob "^3.0.0" - lodash "^4.17.11" - -rollup-plugin-node-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" - integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.11.1" - rollup-pluginutils "^2.8.1" - -rollup-plugin-serve@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/rollup-plugin-serve/-/rollup-plugin-serve-1.1.0.tgz#0654a57021a21b903340c69940f7463706e8288d" - integrity sha512-pYkSsuA0/psKqhhictkJw1c2klya5b+LlCvipWqI9OE1aG2M97mRumZCbBlry5CMEOzYBBgSDgd1694sNbmyIw== - dependencies: - mime ">=2.4.6" - opener "1" - -rollup-plugin-terser@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" - integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== - dependencies: - "@babel/code-frame" "^7.10.4" - jest-worker "^26.2.1" - serialize-javascript "^4.0.0" - terser "^5.0.0" - -rollup-pluginutils@^2.8.1: - version "2.8.2" - resolved "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.50.5: - version "2.51.1" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.51.1.tgz#87bcd4095fe79b14c9bec0edc7ffa44e4827f793" - integrity sha512-8xfDbAtBleXotb6qKEHWuo/jkn94a9dVqGc7Rwl3sqspCVlnCfbRek7ldhCARSi7h32H0xR4QThm1t9zHN+3uw== - optionalDependencies: - fsevents "~2.3.1" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.1.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.1.1, semver@^6.1.2, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.2.1: - version "7.3.5" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" - integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== - dependencies: - lru-cache "^6.0.0" - -serialize-javascript@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" - integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== - dependencies: - randombytes "^2.1.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -source-map-support@~0.5.19: - version "0.5.19" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@~0.7.2: - version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -spdx-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/spdx-compare/-/spdx-compare-1.0.0.tgz#2c55f117362078d7409e6d7b08ce70a857cd3ed7" - integrity sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A== - dependencies: - array-find-index "^1.0.2" - spdx-expression-parse "^3.0.0" - spdx-ranges "^2.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-expression-validate@2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/spdx-expression-validate/-/spdx-expression-validate-2.0.0.tgz#25c9408e1c63fad94fff5517bb7101ffcd23350b" - integrity sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg== - dependencies: - spdx-expression-parse "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.9" - resolved "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f" - integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ== - -spdx-ranges@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/spdx-ranges/-/spdx-ranges-2.1.1.tgz#87573927ba51e92b3f4550ab60bfc83dd07bac20" - integrity sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA== - -spdx-satisfies@5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/spdx-satisfies/-/spdx-satisfies-5.0.1.tgz#9feeb2524686c08e5f7933c16248d4fdf07ed6a6" - integrity sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw== - dependencies: - spdx-compare "^1.0.0" - spdx-expression-parse "^3.0.0" - spdx-ranges "^2.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.0.0, supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -table@^6.0.9: - version "6.7.1" - resolved "https://registry.npmjs.org/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - -terser@^5.0.0: - version "5.7.0" - resolved "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz#a761eeec206bc87b605ab13029876ead938ae693" - integrity sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g== - dependencies: - commander "^2.20.0" - source-map "~0.7.2" - source-map-support "~0.5.19" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -type-check@^0.4.0, type-check@~0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" - integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== - dependencies: - prelude-ls "^1.2.1" - -type-fest@^0.20.2: - version "0.20.2" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" - integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -uri-js@^4.2.2: - version "4.4.1" - resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" - integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== - dependencies: - punycode "^2.1.0" - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache@^2.0.3: - version "2.3.0" - resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" - integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -ws@^7.4.3: - version "7.4.6" - resolved "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" - integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== From 1875c5e1d1cab3cc350fe5c6d9d359256f6dd542 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Tue, 30 Jan 2024 09:34:40 +0000 Subject: [PATCH 44/65] =?UTF-8?q?fix(random):=20=E4=BF=AE=E5=A4=8D=20rando?= =?UTF-8?q?m?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/mock.cjs.js | 51 ---- dist/mock.esm.js | 51 ---- dist/mock.min.js | 51 ---- src/mock/random/color.js | 5 +- src/mock/random/helper.js | 8 +- src/mock/random/image.js | 5 +- src/mock/random/misc/guid.js | 2 +- src/mock/random/text/text_en.js | 18 +- test/mock.test.js | 50 ++++ test/{test.mock.random.js => random.test.js} | 276 +++++++++---------- test/test.mock.mock.js | 62 ----- test/test.mock.schema.test.js | 6 - 12 files changed, 210 insertions(+), 375 deletions(-) delete mode 100644 dist/mock.cjs.js delete mode 100644 dist/mock.esm.js delete mode 100644 dist/mock.min.js create mode 100644 test/mock.test.js rename test/{test.mock.random.js => random.test.js} (59%) delete mode 100644 test/test.mock.mock.js diff --git a/dist/mock.cjs.js b/dist/mock.cjs.js deleted file mode 100644 index d47b596c..00000000 --- a/dist/mock.cjs.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i="[object Null]",h="[object Undefined]",s=r?r.toStringTag:void 0;function f(e){return null==e?void 0===e?h:i:s&&s in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function m(e){return null!=e&&"object"==typeof e}var d="[object Symbol]";function p(e){return"symbol"==typeof e||m(e)&&f(e)==d}function b(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++ne>=800)return arguments[0]}else ne=0;return ee.apply(void 0,arguments)}),ue=9007199254740991,le=/^(?:0|[1-9]\d*)$/;function ce(e,n){var t=typeof e;return!!(n=null==n?ue:n)&&("number"==t||"symbol"!=t&&le.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=pe}function xe(e){return null!=e&&be(e.length)&&!H(e)}function ge(e,n,t){if(!M(t))return!1;var r=typeof n;return!!("number"==r?xe(t)&&ce(n,t.length):"string"==r&&n in t)&&he(t[n],e)}var ve=Object.prototype;function ye(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ve)}function we(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=We.length>3&&"function"==typeof a?(r--,a):void 0,o&&ge(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function bn(e){return null==e?[]:function(e,n){return b(n,(function(n){return e[n]}))}(e,Ie(e))}var xn=qe&&qe.isRegExp,gn=xn?Fe(xn):function(e){return m(e)&&"[object RegExp]"==f(e)},vn=Math.floor,yn=Math.random;function wn(e,n){return e+vn(yn()*(n-e+1))}var kn=parseFloat,An=Math.min,Cn=Math.random;function Mn(e,n,t){if(t&&"boolean"!=typeof t&&ge(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=_(e),void 0===n?(n=e,e=0):n=_(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=Cn();return An(e+a*(n-e+kn("1e-"+((a+"").length-1))),n)}return wn(e,n)}var jn=Math.ceil,En=Math.max;var On,Sn=function(e,n,t){return t&&"number"!=typeof t&&ge(e,n,t)&&(n=t=void 0),e=_(e),void 0===n?(n=e,e=0):n=_(n),function(e,n,t,r){for(var a=-1,o=En(jn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?eLn)return[];var t,r=Hn,a=Nn(e,Hn);e-=Hn;for(var o=we(a,n="function"==typeof(t=n)?t:D);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=Mn(t,r,!1);return parseFloat(Mn(e,n,!0).toFixed(a))},nt=function(e,n,t=!1){return t?Mn(0,e+n)>e?!t:t:Mn(10,-10)>0},tt={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};tt.alpha=tt.lower+tt.upper,tt.default=tt.lower+tt.upper+tt.number+tt.symbol;const rt=function(e="default"){return tt.hasOwnProperty(e.toLocaleLowerCase())&&(e=tt[e.toLowerCase()]),Fn(e)},at=function(...e){let n,t,r,a;switch(e.length){case 0:n=Qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Qn(r,a));break;case 3:[t,r,a]=e,n=Qn(r,a)}return Bn(n,(()=>rt(t))).join("")};function ot(e,n){return e(n={exports:{}},n.exports),n.exports}var ut={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},lt=ot((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),ct=ot((function(e){var n=Object.hasOwnProperty,t=Object.create(null);for(var r in ut)n.call(ut,r)&&(t[ut[r]]=r);var a=e.exports={to:{},get:{}};function o(e,n,t){return Math.min(Math.max(n,e),t)}function u(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}a.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=a.get.hsl(e),t="hsl";break;case"hwb":n=a.get.hwb(e),t="hwb";break;default:n=a.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},a.get.rgb=function(e){if(!e)return null;var t,r,a,u=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(a=t[2],t=t[1],r=0;r<3;r++){var l=2*r;u[r]=parseInt(t.slice(l,l+2),16)}a&&(u[3]=parseInt(a,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(a=(t=t[1])[3],r=0;r<3;r++)u[r]=parseInt(t[r]+t[r],16);a&&(u[3]=parseInt(a+a,16)/255)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(r=0;r<3;r++)u[r]=parseInt(t[r+1],0);t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(t=e.match(/^(\w+)$/))?"transparent"===t[1]?[0,0,0,0]:n.call(ut,t[1])?((u=ut[t[1]])[3]=1,u):null:null;for(r=0;r<3;r++)u[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}for(r=0;r<3;r++)u[r]=o(u[r],0,255);return u[3]=o(u[3],0,1),u},a.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.to.hex=function(){var e=lt(arguments);return"#"+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(255*e[3])):"")},a.to.rgb=function(){var e=lt(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},a.to.rgb.percent=function(){var e=lt(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},a.to.hsl=function(){var e=lt(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},a.to.hwb=function(){var e=lt(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},a.to.keyword=function(e){return t[e.slice(0,3)]}}));ct.to,ct.get;var it={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ht=ot((function(e){var n={};for(var t in it)it.hasOwnProperty(t)&&(n[it[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in it)if(it.hasOwnProperty(l)){var c=it[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function st(e){var n=function(){for(var e={},n=Object.keys(ht),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var pt=dt,bt=[].slice,xt=["keyword","gray","hex"],gt={};Object.keys(pt).forEach((function(e){gt[bt.call(pt[e].labels).sort().join("")]=e}));var vt={};function yt(e,n){if(!(this instanceof yt))return new yt(e,n);if(n&&n in xt&&(n=null),n&&!(n in pt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof yt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=ct.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=pt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=pt[this.model].channels;var o=bt.call(e,0,r);this.color=At(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in gt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=gt[l];var c=pt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return yt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return yt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(pt).forEach((function(e){if(-1===xt.indexOf(e)){var n=pt[e].channels;yt.prototype[e]=function(){if(this.model===e)return new yt(this);if(arguments.length)return new yt(arguments,e);var t,r="number"==typeof arguments[n]?n:this.valpha;return new yt((t=pt[this.model][e].raw(this.color),Array.isArray(t)?t:[t]).concat(r),e)},yt[e]=function(t){return"number"==typeof t&&(t=At(bt.call(arguments),n)),new yt(t,e)}}}));var Ct=yt,Mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const jt=function(e,...n){let t,r,a;switch(n.length){case 0:return Fn(e);case 1:return[a]=n,qn(e,a);case 2:return[t,r]=n,qn(e,Mn(t,r))}},Et=function(e,n,t){const r=(x(a=e)?Pn:zn)(a);var a;switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},Ot={},St=function(...e){1===e.length&&(e=e[0]);const n=St.options.context.templatePath.join("."),t=Ot[n]=Ot[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let Tt;function Ft(e,n){return Tt=Tt||Math.random(),Tt+=.618033988749895,Tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Ct.hsv(360*Tt,100*e,100*n)}function _t(){return Ft().hex()}var $t={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:Dt,lastName:qt,cfirstName:Pt,clastName:zt}=$t;function Lt(){const e=Dt.male.concat();return jt(e)}function Ht(){return jt(qt)}function Nt(){return jt(Pt)}function Bt(){return jt(zt)}var It,Ut=new Uint8Array(16);function Gt(){if(!It&&!(It="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return It(Ut)}var Wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Jt=[],Kt=0;Kt<256;++Kt)Jt.push((Kt+256).toString(16).substr(1));function Yt(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Jt[e[n+0]]+Jt[e[n+1]]+Jt[e[n+2]]+Jt[e[n+3]]+"-"+Jt[e[n+4]]+Jt[e[n+5]]+"-"+Jt[e[n+6]]+Jt[e[n+7]]+"-"+Jt[e[n+8]]+Jt[e[n+9]]+"-"+Jt[e[n+10]]+Jt[e[n+11]]+Jt[e[n+12]]+Jt[e[n+13]]+Jt[e[n+14]]+Jt[e[n+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Wt.test(e)}(t))throw TypeError("Stringified UUID is invalid");return t}function Vt(e,n,t){var r=(e=e||{}).random||(e.rng||Gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return Yt(r)}var Xt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Zt=Object.keys(Xt),Qt=Object.entries(Xt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})),er=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Qt);var nr={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const tr=new RegExp(`(${Object.keys(nr).join("|")})`,"g");function rr(e="yyyy-MM-dd"){return ar(or(),e)}function ar(e,n){return n.replace(tr,(function n(t,r){const a=nr[r];return"function"==typeof a?a(e):a in nr?n(t,a):e[a]()}))}function or(e=new Date(0),n=new Date){return new Date(Zn(e.getTime(),n.getTime()))}let ur=0;const lr=function(e){return ur+=+e||1},cr=lr;function ir(e=12,n=18){return dn(Bn(Mn(e,n),(()=>hr())).join(" "))+"."}function hr(e=3,n=10){return Bn(Mn(e,n),(()=>rt("lower"))).join("")}function sr(e=12,n=18){return Bn(Mn(e,n),(()=>mr())).join("")+"。"}const fr="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";function mr(...e){let n,t,r=1,a=fr;switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Qn(n,t));break;case 3:[a,n,t]=e,r=Qn(n,t)}return qn(a,r).join("")}const dr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),pr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function br(){return jt(dr)}function xr(e){return`${hr()}.${e||gr()}`}function gr(){return jt(pr)}var vr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},yr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:wr,_screenSize:kr,_videoSize:Ar}=vr,Cr=Object.keys(yr);function Mr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=jt(wr)),r=(r||_t()).replace(/^#/,""),t=(t||_t()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const jr=["东北","华北","华东","华中","华南","西南","西北"];function Er(e){let n;if("array"===In(e))n=e;else n=[e];return n}var Or=Object.freeze({__proto__:null,integer:Zn,isNumber:Vn,random:Mn,natural:Qn,int:Zn,float:et,boolean:nt,bool:nt,character:rt,char:rt,string:at,str:at,range:Sn,color:function(e){return e||Mt[e]?Mt[e].nicer:jt(Rt).hex},hex:_t,rgb:function(){return Ft().hsv().string()},rgba:function(){return Ft().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return Ft().hsl().string()},_goldenRatioColor:Ft,first:Lt,last:Ht,name:function(e){return e=e?` ${Lt()} `:" ",`${Lt()}${e}${Ht()}`},cfirst:Nt,clast:Bt,cname:function(){return Nt()+Bt()},capitalize:dn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:jt,shuffle:Et,order:St,d4:function(){return Qn(1,4)},d6:function(){return Qn(1,6)},d8:function(){return Qn(1,8)},d12:function(){return Qn(1,12)},d20:function(){return Qn(1,20)},d100:function(){return Qn(1,100)},guid:function(){return Vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Vt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=jt(er).id+rr("yyyyMMdd")+at("number",3);for(let r=0;rir())).join("\n")},word:hr,sentence:ir,title:function(e=3,n=7){return Bn(Mn(e,n),(()=>dn(hr()))).join("")},ctitle:function(e=3,n=7){return Bn(Mn(e,n),(()=>mr())).join("")},csentence:sr,cparagraph:function(e=3,n=7){return Bn(Mn(e,n),(()=>sr())).join("\n")},cword:mr,protocol:br,domain:xr,tld:gr,email:function(e){return`${rt("lower")}.${hr()}@${e||hr()+"."+gr()}`},ip:function(){return[...Array(4)].map((()=>Qn(0,255))).join(".")},url:function(e,n){return`${e||br()}://${n||xr()}/${hr()}`},_patternLetters:nr,_rformat:tr,_formatDate:ar,_randomDate:or,time:function(e="HH:mm:ss"){return rr(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return rr(e)},date:rr,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}if("week"===e)t.setDate(t.getDate()-t.getDay());return ar(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?or(e,n).getTime():or().getTime()},_adSize:wr,_screenSize:kr,_videoSize:Ar,image:Mr,img:Mr,_brandColors:yr,_brandNames:Cr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=jt(wr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=yr[jt(Cr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return jt(jr)},province:function(){return jt(er).name},city:function(e){const n=jt(er),t=jt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=jt(er),t=jt(n.children),r=jt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Qn(0,9);return n},genFile:function(e){return new File(Er(e),hr())},genBlob:function(e){return new Blob(Er(e))}}),Sr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Rr(e=""){"string"!=typeof e&&(e+="");const n=e.match(Sr.RE_KEY),t=n&&n[3]&&n[3].match(Sr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Zn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Sr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Zn(l,c):void 0},h=Object.keys(i).some((e=>void 0!==e));return h?i:{}}function Tr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=jt(ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ga(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(ga(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function Fr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?nt(n,e,r):r}function _r(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function $r({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=et(n,t,r,a)})):u=n&&!a[2]?t:o,u}function Dr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=Et(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(Sr.RE_KEY);c&&c[2]&&"number"===In(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function qr(e){this.type=e,this.offset=qr.offset(),this.text=qr.text()}function Pr(e,n){qr.call(this,"alternate"),this.left=e,this.right=n}function zr(e){qr.call(this,"match"),this.body=e.filter(Boolean)}function Lr(e,n){qr.call(this,e),this.body=n}function Hr(e){Lr.call(this,"capture-group"),this.index=Qr[this.offset]||(Qr[this.offset]=Zr++),this.body=e}function Nr(e,n){qr.call(this,"quantified"),this.body=e,this.quantifier=n}function Br(e,n){qr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Ir(e,n){qr.call(this,"charset"),this.invert=e,this.body=n}function Ur(e,n){qr.call(this,"range"),this.start=e,this.end=n}function Gr(e){qr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Wr(e){qr.call(this,"unicode"),this.code=e.toUpperCase()}function Jr(e){qr.call(this,"hex"),this.code=e.toUpperCase()}function Kr(e){qr.call(this,"octal"),this.code=e.toUpperCase()}function Yr(e){qr.call(this,"back-reference"),this.code=e.toUpperCase()}function Vr(e){qr.call(this,"control-character"),this.code=e.toUpperCase()}var Xr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t,r;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return r=n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input","Expected "+t+" but "+r+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(e){return Et!==e&&(Et>e&&(Et=0,Ot={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ot,Et,e),Et=e),Ot}function r(e){St>Mt||(Mt>St&&(St=Mt,Rt=[]),Rt.push(e))}function a(){var e,t,h,s,f;return e=Mt,t=function(){var e,n,t,r,a;if(e=Mt,n=u(),null===n&&(n=X),null!==n)if(t=Mt,Tt++,r=i(),Tt--,null===r?t=X:(Mt=t,t=V),null!==t){for(r=[],null===(a=c())&&(a=o());null!==a;)r.push(a),null===(a=c())&&(a=o());null!==r?(null===(a=l())&&(a=X),null!==a?(jt=e,null===(n=ne(n,r,a))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return e}(),null!==t?(h=Mt,124===n.charCodeAt(Mt)?(s=Z,Mt++):(s=null,0===Tt&&r(Q)),null!==s?null!==(f=a())?h=s=[s,f]:(Mt=h,h=V):(Mt=h,h=V),null===h&&(h=X),null!==h?(jt=e,null===(t=ee(t,h))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function o(){var e;return null===(e=g())&&(null===(e=v())&&(e=function(){var e;return e=A(),null===e&&(e=function(){var e;return e=j(),null===e&&(e=E(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=H(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))))),e}(),null===e&&(e=C())),e}())),e}function u(){var e,t;return e=Mt,94===n.charCodeAt(Mt)?(t=te,Mt++):(t=null,0===Tt&&r(re)),null!==t&&(jt=e,t=ae()),null===t?(Mt=e,e=t):e=t,e}function l(){var e,t;return e=Mt,36===n.charCodeAt(Mt)?(t=oe,Mt++):(t=null,0===Tt&&r(ue)),null!==t&&(jt=e,t=le()),null===t?(Mt=e,e=t):e=t,e}function c(){var e,n,t;return e=Mt,null!==(n=o())?null!==(t=i())?(jt=e,null===(n=ce(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V):(Mt=e,e=V),e}function i(){var e,n,t;return Tt++,e=Mt,n=function(){var e;return e=h(),null===e&&(e=s(),null===e&&(e=f(),null===e&&(e=m(),null===e&&(e=d(),null===e&&(e=p()))))),e}(),null!==n?(null===(t=b())&&(t=X),null!==t?(jt=e,null===(n=he(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(n=null,0===Tt&&r(ie)),e}function h(){var e,t,a,o,u,l;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(44===n.charCodeAt(Mt)?(o=me,Mt++):(o=null,0===Tt&&r(de)),null!==o?null!==(u=x())?(125===n.charCodeAt(Mt)?(l=pe,Mt++):(l=null,0===Tt&&r(be)),null!==l?(jt=e,null===(t=xe(a,u))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function s(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(n.substr(Mt,2)===ge?(o=ge,Mt+=2):(o=null,0===Tt&&r(ve)),null!==o?(jt=e,null===(t=ye(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function f(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(125===n.charCodeAt(Mt)?(o=pe,Mt++):(o=null,0===Tt&&r(be)),null!==o?(jt=e,null===(t=we(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function m(){var e,t;return e=Mt,43===n.charCodeAt(Mt)?(t=ke,Mt++):(t=null,0===Tt&&r(Ae)),null!==t&&(jt=e,t=Ce()),null===t?(Mt=e,e=t):e=t,e}function d(){var e,t;return e=Mt,42===n.charCodeAt(Mt)?(t=Me,Mt++):(t=null,0===Tt&&r(je)),null!==t&&(jt=e,t=Ee()),null===t?(Mt=e,e=t):e=t,e}function p(){var e,t;return e=Mt,63===n.charCodeAt(Mt)?(t=Oe,Mt++):(t=null,0===Tt&&r(Se)),null!==t&&(jt=e,t=Re()),null===t?(Mt=e,e=t):e=t,e}function b(){var e;return 63===n.charCodeAt(Mt)?(e=Oe,Mt++):(e=null,0===Tt&&r(Se)),e}function x(){var e,t,a;if(e=Mt,t=[],Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe)),null!==a)for(;null!==a;)t.push(a),Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe));else t=V;return null!==t&&(jt=e,t=_e(t)),null===t?(Mt=e,e=t):e=t,e}function g(){var e,t,o,u;return e=Mt,40===n.charCodeAt(Mt)?(t=$e,Mt++):(t=null,0===Tt&&r(De)),null!==t?(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===Ie?(t=Ie,Mt+=2):(t=null,0===Tt&&r(Ue)),null!==t?(o=a(),null!==o?(jt=e,t=Ge(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===We?(t=We,Mt+=2):(t=null,0===Tt&&r(Je)),null!==t?(o=a(),null!==o?(jt=e,t=Ke(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===He?(t=He,Mt+=2):(t=null,0===Tt&&r(Ne)),null!==t?(o=a(),null!==o?(jt=e,t=Be(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,n;return e=Mt,n=a(),null!==n&&(jt=e,n=Le(n)),null===n?(Mt=e,e=n):e=n,e}()))),null!==o?(41===n.charCodeAt(Mt)?(u=qe,Mt++):(u=null,0===Tt&&r(Pe)),null!==u?(jt=e,null===(t=ze(o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)):(Mt=e,e=V),e}function v(){var e,t,a,o,u;if(Tt++,e=Mt,91===n.charCodeAt(Mt)?(t=Ve,Mt++):(t=null,0===Tt&&r(Xe)),null!==t)if(94===n.charCodeAt(Mt)?(a=te,Mt++):(a=null,0===Tt&&r(re)),null===a&&(a=X),null!==a){for(o=[],null===(u=y())&&(u=w());null!==u;)o.push(u),null===(u=y())&&(u=w());null!==o?(93===n.charCodeAt(Mt)?(u=Ze,Mt++):(u=null,0===Tt&&r(Qe)),null!==u?(jt=e,null===(t=en(a,o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return Tt--,null===e&&(t=null,0===Tt&&r(Ye)),e}function y(){var e,t,a,o;return Tt++,e=Mt,null!==(t=w())?(45===n.charCodeAt(Mt)?(a=tn,Mt++):(a=null,0===Tt&&r(rn)),null!==a?null!==(o=w())?(jt=e,null===(t=an(t,o))?(Mt=e,e=t):e=t):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(t=null,0===Tt&&r(nn)),e}function w(){var e;return Tt++,null===(e=function(){var e;return e=M(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))),e}())&&(e=k()),Tt--,null===e&&0===Tt&&r(on),e}function k(){var e,t;return e=Mt,un.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(ln)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,e}function A(){var e,t;return e=Mt,46===n.charCodeAt(Mt)?(t=hn,Mt++):(t=null,0===Tt&&r(sn)),null!==t&&(jt=e,t=fn()),null===t?(Mt=e,e=t):e=t,e}function C(){var e,t;return Tt++,e=Mt,dn.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(pn)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,Tt--,null===e&&(t=null,0===Tt&&r(mn)),e}function M(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=gn()),null===t?(Mt=e,e=t):e=t,e}function j(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=vn()),null===t?(Mt=e,e=t):e=t,e}function E(){var e,t;return e=Mt,n.substr(Mt,2)===yn?(t=yn,Mt+=2):(t=null,0===Tt&&r(wn)),null!==t&&(jt=e,t=kn()),null===t?(Mt=e,e=t):e=t,e}function O(){var e,t;return e=Mt,n.substr(Mt,2)===An?(t=An,Mt+=2):(t=null,0===Tt&&r(Cn)),null!==t&&(jt=e,t=Mn()),null===t?(Mt=e,e=t):e=t,e}function S(){var e,t;return e=Mt,n.substr(Mt,2)===jn?(t=jn,Mt+=2):(t=null,0===Tt&&r(En)),null!==t&&(jt=e,t=On()),null===t?(Mt=e,e=t):e=t,e}function R(){var e,t;return e=Mt,n.substr(Mt,2)===Sn?(t=Sn,Mt+=2):(t=null,0===Tt&&r(Rn)),null!==t&&(jt=e,t=Tn()),null===t?(Mt=e,e=t):e=t,e}function T(){var e,t;return e=Mt,n.substr(Mt,2)===Fn?(t=Fn,Mt+=2):(t=null,0===Tt&&r(_n)),null!==t&&(jt=e,t=$n()),null===t?(Mt=e,e=t):e=t,e}function F(){var e,t;return e=Mt,n.substr(Mt,2)===Dn?(t=Dn,Mt+=2):(t=null,0===Tt&&r(qn)),null!==t&&(jt=e,t=Pn()),null===t?(Mt=e,e=t):e=t,e}function _(){var e,t;return e=Mt,n.substr(Mt,2)===zn?(t=zn,Mt+=2):(t=null,0===Tt&&r(Ln)),null!==t&&(jt=e,t=Hn()),null===t?(Mt=e,e=t):e=t,e}function $(){var e,t;return e=Mt,n.substr(Mt,2)===Nn?(t=Nn,Mt+=2):(t=null,0===Tt&&r(Bn)),null!==t&&(jt=e,t=In()),null===t?(Mt=e,e=t):e=t,e}function D(){var e,t;return e=Mt,n.substr(Mt,2)===Un?(t=Un,Mt+=2):(t=null,0===Tt&&r(Gn)),null!==t&&(jt=e,t=Wn()),null===t?(Mt=e,e=t):e=t,e}function q(){var e,t;return e=Mt,n.substr(Mt,2)===Jn?(t=Jn,Mt+=2):(t=null,0===Tt&&r(Kn)),null!==t&&(jt=e,t=Yn()),null===t?(Mt=e,e=t):e=t,e}function P(){var e,t;return e=Mt,n.substr(Mt,2)===Vn?(t=Vn,Mt+=2):(t=null,0===Tt&&r(Xn)),null!==t&&(jt=e,t=Zn()),null===t?(Mt=e,e=t):e=t,e}function z(){var e,t;return e=Mt,n.substr(Mt,2)===Qn?(t=Qn,Mt+=2):(t=null,0===Tt&&r(et)),null!==t&&(jt=e,t=nt()),null===t?(Mt=e,e=t):e=t,e}function L(){var e,t,a;return e=Mt,n.substr(Mt,2)===tt?(t=tt,Mt+=2):(t=null,0===Tt&&r(rt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=ot(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function H(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(ct.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(it)),null!==a?(jt=e,null===(t=ht(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function N(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t){if(a=[],mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt)),null!==o)for(;null!==o;)a.push(o),mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt));else a=V;null!==a?(jt=e,null===(t=pt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function B(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===bt?(t=bt,Mt+=2):(t=null,0===Tt&&r(xt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=yt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function I(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===wt?(t=wt,Mt+=2):(t=null,0===Tt&&r(kt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=At(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function U(){var e,t;return e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t&&(jt=e,t=Ct()),null===t?(Mt=e,e=t):e=t,e}function G(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=cn(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}var W,J=arguments.length>1?arguments[1]:{},K={regexp:a},Y=a,V=null,X="",Z="|",Q='"|"',ee=function(e,n){return n?new Pr(e,n[1]):e},ne=function(e,n,t){return new zr([e].concat(n).concat([t]))},te="^",re='"^"',ae=function(){return new qr("start")},oe="$",ue='"$"',le=function(){return new qr("end")},ce=function(e,n){return new Nr(e,n)},ie="Quantifier",he=function(e,n){return n&&(e.greedy=!1),e},se="{",fe='"{"',me=",",de='","',pe="}",be='"}"',xe=function(e,n){return new Br(e,n)},ge=",}",ve='",}"',ye=function(e){return new Br(e,1/0)},we=function(e){return new Br(e,e)},ke="+",Ae='"+"',Ce=function(){return new Br(1,1/0)},Me="*",je='"*"',Ee=function(){return new Br(0,1/0)},Oe="?",Se='"?"',Re=function(){return new Br(0,1)},Te=/^[0-9]/,Fe="[0-9]",_e=function(e){return+e.join("")},$e="(",De='"("',qe=")",Pe='")"',ze=function(e){return e},Le=function(e){return new Hr(e)},He="?:",Ne='"?:"',Be=function(e){return new Lr("non-capture-group",e)},Ie="?=",Ue='"?="',Ge=function(e){return new Lr("positive-lookahead",e)},We="?!",Je='"?!"',Ke=function(e){return new Lr("negative-lookahead",e)},Ye="CharacterSet",Ve="[",Xe='"["',Ze="]",Qe='"]"',en=function(e,n){return new Ir(!!e,n)},nn="CharacterRange",tn="-",rn='"-"',an=function(e,n){return new Ur(e,n)},on="Character",un=/^[^\\\]]/,ln="[^\\\\\\]]",cn=function(e){return new Gr(e)},hn=".",sn='"."',fn=function(){return new qr("any-character")},mn="Literal",dn=/^[^|\\\/.[()?+*$\^]/,pn="[^|\\\\\\/.[()?+*$\\^]",bn="\\b",xn='"\\\\b"',gn=function(){return new qr("backspace")},vn=function(){return new qr("word-boundary")},yn="\\B",wn='"\\\\B"',kn=function(){return new qr("non-word-boundary")},An="\\d",Cn='"\\\\d"',Mn=function(){return new qr("digit")},jn="\\D",En='"\\\\D"',On=function(){return new qr("non-digit")},Sn="\\f",Rn='"\\\\f"',Tn=function(){return new qr("form-feed")},Fn="\\n",_n='"\\\\n"',$n=function(){return new qr("line-feed")},Dn="\\r",qn='"\\\\r"',Pn=function(){return new qr("carriage-return")},zn="\\s",Ln='"\\\\s"',Hn=function(){return new qr("white-space")},Nn="\\S",Bn='"\\\\S"',In=function(){return new qr("non-white-space")},Un="\\t",Gn='"\\\\t"',Wn=function(){return new qr("tab")},Jn="\\v",Kn='"\\\\v"',Yn=function(){return new qr("vertical-tab")},Vn="\\w",Xn='"\\\\w"',Zn=function(){return new qr("word")},Qn="\\W",et='"\\\\W"',nt=function(){return new qr("non-word")},tt="\\c",rt='"\\\\c"',at="any character",ot=function(e){return new Vr(e)},ut="\\",lt='"\\\\"',ct=/^[1-9]/,it="[1-9]",ht=function(e){return new Yr(e)},st="\\0",ft='"\\\\0"',mt=/^[0-7]/,dt="[0-7]",pt=function(e){return new Kr(e.join(""))},bt="\\x",xt='"\\\\x"',gt=/^[0-9a-fA-F]/,vt="[0-9a-fA-F]",yt=function(e){return new Jr(e.join(""))},wt="\\u",kt='"\\\\u"',At=function(e){return new Wr(e.join(""))},Ct=function(){return new qr("null-character")},Mt=0,jt=0,Et=0,Ot={line:1,column:1,seenCR:!1},St=0,Rt=[],Tt=0;if("startRule"in J){if(!(J.startRule in K))throw new Error("Can't start parsing from rule \""+J.startRule+'".');Y=K[J.startRule]}if(qr.offset=function(){return jt},qr.text=function(){return n.substring(jt,Mt)},null!==(W=Y())&&Mt===n.length)return W;throw function(e){var n=0;for(e.sort();nString.fromCharCode(n+e))).join("")}ea.gen=function(e,n,t){return t=t||{guid:1},ea[e.type]?ea[e.type](e,n,t):ea.token(e,n,t)},ea.extend({token:function(e,n,t){switch(e.type){case"start":case"end":case"backspace":case"word-boundary":return"";case"any-character":return rt();case"non-word-boundary":case"form-feed":case"carriage-return":case"tab":case"vertical-tab":break;case"digit":return jt(ra.split(""));case"non-digit":return jt((na+ta+aa).split(""));case"line-feed":return e.body||e.text;case"white-space":return jt(ua.split(""));case"non-white-space":case"word":return jt((na+ta+ra).split(""));case"non-word":return jt(aa.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(nt()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=fa(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return sa(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ga(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Or)&&!(u in Or))return e;o=o?o.split(/\s*,\s*/).map((e=>(Sr.RE_PLACEHOLDER.exec(""),Sr.RE_PLACEHOLDER.test(e)?da(e,n,t,r):e))):[];const c=Or[a]||Or[u];switch(In(c)){case"array":return jt(c);case"function":{c.options=r;const e=c.apply(Or,o)||"";return delete c.options,e}}}function pa(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(Sr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=da(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Un(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?at(t):o;return u}var ba=Object.freeze({__proto__:null,array:Tr,boolean:Fr,function:_r,number:$r,object:Dr,regexp:ha,string:pa});let xa=1;function ga(e,n="",t={}){const r={path:t.path||[xa],templatePath:t.templatePath||[xa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=In(e),o=ba[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Sr.RE_KEY,"$1"):n,rule:Rr(n),context:r}),r.root||(r.root=u),u):e}const va={gen:ga,extend:Gn};function ya(e,n,t=[]){const r={name:"string"==typeof n?n.replace(Sr.RE_KEY,"$1"):n,template:e,type:In(e),rule:Rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ya(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ya(e,n,r.path)))}return r}function wa(e,n){const t=ya(e),r=ka.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:da,getValueByKeyPath:sa,normalizePath:fa,splitPathToArray:ma});const ka={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return Aa.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Aa.equal("type",e.path,In(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return Aa.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return r.length===a}return Aa.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&Aa.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(Aa.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),Aa.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&Aa.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Aa.equal("properties length",e.path,u.length,o.min,r)):Aa.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1}};wa.Diff=ka,wa.Assert=Aa;const Ca={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Ma({url:e,type:n}){n=n.toLowerCase();for(const t in Ca){const r=Ca[t],{rurl:a,rtype:o}=r;if(ja(a,e)&&ja(o,n))return r}return!1}function ja(e,n){switch(In(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function Ea({template:e},n){return H(e)?e(n):ga(e)}const Oa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],Sa=Symbol("Body internals"),Ra=Symbol("Response internals");async function Ta(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class Fa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):Oa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[Sa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[Sa].body}get bodyUsed(){return this[Sa].disturbed}async arrayBuffer(){return(await Ta(this[Sa])).arrayBuffer()}async blob(){return Ta(this[Sa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await Ta(this[Sa])).text()}}Object.defineProperties(Fa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const _a=new Set([301,302,303,307,308]),$a=globalThis.window&&globalThis.window.Response||class{};class Da extends Fa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":Oa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[Sa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[Ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[Ra].type}get url(){return this[Ra].url||""}get status(){return this[Ra].status}get ok(){return this[Ra].status>=200&&this[Ra].status<300}get redirected(){return this[Ra].counter>0}get statusText(){return this[Ra].statusText}get headers(){return this[Ra].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new $a(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!_a.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new $a(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new $a(null,{status:0,statusText:""});return e[Ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties($a.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const qa=globalThis.window||{},Pa=qa.fetch;async function za(e,n={}){if(!0===qa.fetch.$mock){const t=Ma({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=Ea(t,{});return console.warn("mock代理中"),new Da(e,n)}}return console.warn("未使用 mockjs"),Pa(e,n)}var La="OK";const Ha=function(){},Na=globalThis.window||{},Ba=void 0!==Na?Na.XMLHttpRequest:class{},Ia=Ba.prototype.send||Ha,Ua=Ba.prototype.open||Ha;class Ga extends Ba{constructor(...e){super(...e)}_send=Ia;_open=Ua;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Ma({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=La;const e=Ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&qa.fetch&&!qa.fetch.hasOwnProperty("$mock")&&(qa.fetch=za,qa.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Wa=globalThis.window||{};const Ja={Handler:va,Random:Or,Util:Yn,XHR:Ga,RE:ia,toJSONSchema:ya,valid:wa,heredoc:Jn,setup:function(e){return Ga.setup(e)},_mocked:Ca,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,va.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Wa.XMLHttpRequest!==Ga&&(Wa.XMLHttpRequest=Ga),Ca.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};module.exports=Ja; diff --git a/dist/mock.esm.js b/dist/mock.esm.js deleted file mode 100644 index 0b9ad5a3..00000000 --- a/dist/mock.esm.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i="[object Null]",h="[object Undefined]",s=r?r.toStringTag:void 0;function f(e){return null==e?void 0===e?h:i:s&&s in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function m(e){return null!=e&&"object"==typeof e}var d="[object Symbol]";function p(e){return"symbol"==typeof e||m(e)&&f(e)==d}function b(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++ne>=800)return arguments[0]}else ne=0;return ee.apply(void 0,arguments)}),ue=9007199254740991,le=/^(?:0|[1-9]\d*)$/;function ce(e,n){var t=typeof e;return!!(n=null==n?ue:n)&&("number"==t||"symbol"!=t&&le.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=pe}function xe(e){return null!=e&&be(e.length)&&!H(e)}function ge(e,n,t){if(!M(t))return!1;var r=typeof n;return!!("number"==r?xe(t)&&ce(n,t.length):"string"==r&&n in t)&&he(t[n],e)}var ve=Object.prototype;function ye(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ve)}function we(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=We.length>3&&"function"==typeof a?(r--,a):void 0,o&&ge(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function bn(e){return null==e?[]:function(e,n){return b(n,(function(n){return e[n]}))}(e,Ie(e))}var xn=qe&&qe.isRegExp,gn=xn?Fe(xn):function(e){return m(e)&&"[object RegExp]"==f(e)},vn=Math.floor,yn=Math.random;function wn(e,n){return e+vn(yn()*(n-e+1))}var kn=parseFloat,An=Math.min,Cn=Math.random;function Mn(e,n,t){if(t&&"boolean"!=typeof t&&ge(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=_(e),void 0===n?(n=e,e=0):n=_(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=Cn();return An(e+a*(n-e+kn("1e-"+((a+"").length-1))),n)}return wn(e,n)}var jn=Math.ceil,En=Math.max;var On,Sn=function(e,n,t){return t&&"number"!=typeof t&&ge(e,n,t)&&(n=t=void 0),e=_(e),void 0===n?(n=e,e=0):n=_(n),function(e,n,t,r){for(var a=-1,o=En(jn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?eLn)return[];var t,r=Hn,a=Nn(e,Hn);e-=Hn;for(var o=we(a,n="function"==typeof(t=n)?t:D);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=Mn(t,r,!1);return parseFloat(Mn(e,n,!0).toFixed(a))},nt=function(e,n,t=!1){return t?Mn(0,e+n)>e?!t:t:Mn(10,-10)>0},tt={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};tt.alpha=tt.lower+tt.upper,tt.default=tt.lower+tt.upper+tt.number+tt.symbol;const rt=function(e="default"){return tt.hasOwnProperty(e.toLocaleLowerCase())&&(e=tt[e.toLowerCase()]),Fn(e)},at=function(...e){let n,t,r,a;switch(e.length){case 0:n=Qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Qn(r,a));break;case 3:[t,r,a]=e,n=Qn(r,a)}return Bn(n,(()=>rt(t))).join("")};function ot(e,n){return e(n={exports:{}},n.exports),n.exports}var ut={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},lt=ot((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),ct=ot((function(e){var n=Object.hasOwnProperty,t=Object.create(null);for(var r in ut)n.call(ut,r)&&(t[ut[r]]=r);var a=e.exports={to:{},get:{}};function o(e,n,t){return Math.min(Math.max(n,e),t)}function u(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}a.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=a.get.hsl(e),t="hsl";break;case"hwb":n=a.get.hwb(e),t="hwb";break;default:n=a.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},a.get.rgb=function(e){if(!e)return null;var t,r,a,u=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(a=t[2],t=t[1],r=0;r<3;r++){var l=2*r;u[r]=parseInt(t.slice(l,l+2),16)}a&&(u[3]=parseInt(a,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(a=(t=t[1])[3],r=0;r<3;r++)u[r]=parseInt(t[r]+t[r],16);a&&(u[3]=parseInt(a+a,16)/255)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(r=0;r<3;r++)u[r]=parseInt(t[r+1],0);t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(t=e.match(/^(\w+)$/))?"transparent"===t[1]?[0,0,0,0]:n.call(ut,t[1])?((u=ut[t[1]])[3]=1,u):null:null;for(r=0;r<3;r++)u[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}for(r=0;r<3;r++)u[r]=o(u[r],0,255);return u[3]=o(u[3],0,1),u},a.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.to.hex=function(){var e=lt(arguments);return"#"+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(255*e[3])):"")},a.to.rgb=function(){var e=lt(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},a.to.rgb.percent=function(){var e=lt(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},a.to.hsl=function(){var e=lt(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},a.to.hwb=function(){var e=lt(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},a.to.keyword=function(e){return t[e.slice(0,3)]}}));ct.to,ct.get;var it={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ht=ot((function(e){var n={};for(var t in it)it.hasOwnProperty(t)&&(n[it[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in it)if(it.hasOwnProperty(l)){var c=it[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function st(e){var n=function(){for(var e={},n=Object.keys(ht),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var pt=dt,bt=[].slice,xt=["keyword","gray","hex"],gt={};Object.keys(pt).forEach((function(e){gt[bt.call(pt[e].labels).sort().join("")]=e}));var vt={};function yt(e,n){if(!(this instanceof yt))return new yt(e,n);if(n&&n in xt&&(n=null),n&&!(n in pt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof yt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=ct.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=pt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=pt[this.model].channels;var o=bt.call(e,0,r);this.color=At(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in gt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=gt[l];var c=pt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return yt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return yt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(pt).forEach((function(e){if(-1===xt.indexOf(e)){var n=pt[e].channels;yt.prototype[e]=function(){if(this.model===e)return new yt(this);if(arguments.length)return new yt(arguments,e);var t,r="number"==typeof arguments[n]?n:this.valpha;return new yt((t=pt[this.model][e].raw(this.color),Array.isArray(t)?t:[t]).concat(r),e)},yt[e]=function(t){return"number"==typeof t&&(t=At(bt.call(arguments),n)),new yt(t,e)}}}));var Ct=yt,Mt={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const jt=function(e,...n){let t,r,a;switch(n.length){case 0:return Fn(e);case 1:return[a]=n,qn(e,a);case 2:return[t,r]=n,qn(e,Mn(t,r))}},Et=function(e,n,t){const r=(x(a=e)?Pn:zn)(a);var a;switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},Ot={},St=function(...e){1===e.length&&(e=e[0]);const n=St.options.context.templatePath.join("."),t=Ot[n]=Ot[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let Tt;function Ft(e,n){return Tt=Tt||Math.random(),Tt+=.618033988749895,Tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Ct.hsv(360*Tt,100*e,100*n)}function _t(){return Ft().hex()}var $t={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:Dt,lastName:qt,cfirstName:Pt,clastName:zt}=$t;function Lt(){const e=Dt.male.concat();return jt(e)}function Ht(){return jt(qt)}function Nt(){return jt(Pt)}function Bt(){return jt(zt)}var It,Ut=new Uint8Array(16);function Gt(){if(!It&&!(It="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return It(Ut)}var Wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Jt=[],Kt=0;Kt<256;++Kt)Jt.push((Kt+256).toString(16).substr(1));function Yt(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Jt[e[n+0]]+Jt[e[n+1]]+Jt[e[n+2]]+Jt[e[n+3]]+"-"+Jt[e[n+4]]+Jt[e[n+5]]+"-"+Jt[e[n+6]]+Jt[e[n+7]]+"-"+Jt[e[n+8]]+Jt[e[n+9]]+"-"+Jt[e[n+10]]+Jt[e[n+11]]+Jt[e[n+12]]+Jt[e[n+13]]+Jt[e[n+14]]+Jt[e[n+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Wt.test(e)}(t))throw TypeError("Stringified UUID is invalid");return t}function Vt(e,n,t){var r=(e=e||{}).random||(e.rng||Gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return Yt(r)}var Xt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Zt=Object.keys(Xt),Qt=Object.entries(Xt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})),er=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Qt);var nr={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const tr=new RegExp(`(${Object.keys(nr).join("|")})`,"g");function rr(e="yyyy-MM-dd"){return ar(or(),e)}function ar(e,n){return n.replace(tr,(function n(t,r){const a=nr[r];return"function"==typeof a?a(e):a in nr?n(t,a):e[a]()}))}function or(e=new Date(0),n=new Date){return new Date(Zn(e.getTime(),n.getTime()))}let ur=0;const lr=function(e){return ur+=+e||1},cr=lr;function ir(e=12,n=18){return dn(Bn(Mn(e,n),(()=>hr())).join(" "))+"."}function hr(e=3,n=10){return Bn(Mn(e,n),(()=>rt("lower"))).join("")}function sr(e=12,n=18){return Bn(Mn(e,n),(()=>mr())).join("")+"。"}const fr="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";function mr(...e){let n,t,r=1,a=fr;switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Qn(n,t));break;case 3:[a,n,t]=e,r=Qn(n,t)}return qn(a,r).join("")}const dr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),pr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function br(){return jt(dr)}function xr(e){return`${hr()}.${e||gr()}`}function gr(){return jt(pr)}var vr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},yr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:wr,_screenSize:kr,_videoSize:Ar}=vr,Cr=Object.keys(yr);function Mr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=jt(wr)),r=(r||_t()).replace(/^#/,""),t=(t||_t()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const jr=["东北","华北","华东","华中","华南","西南","西北"];function Er(e){let n;if("array"===In(e))n=e;else n=[e];return n}var Or=Object.freeze({__proto__:null,integer:Zn,isNumber:Vn,random:Mn,natural:Qn,int:Zn,float:et,boolean:nt,bool:nt,character:rt,char:rt,string:at,str:at,range:Sn,color:function(e){return e||Mt[e]?Mt[e].nicer:jt(Rt).hex},hex:_t,rgb:function(){return Ft().hsv().string()},rgba:function(){return Ft().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return Ft().hsl().string()},_goldenRatioColor:Ft,first:Lt,last:Ht,name:function(e){return e=e?` ${Lt()} `:" ",`${Lt()}${e}${Ht()}`},cfirst:Nt,clast:Bt,cname:function(){return Nt()+Bt()},capitalize:dn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:jt,shuffle:Et,order:St,d4:function(){return Qn(1,4)},d6:function(){return Qn(1,6)},d8:function(){return Qn(1,8)},d12:function(){return Qn(1,12)},d20:function(){return Qn(1,20)},d100:function(){return Qn(1,100)},guid:function(){return Vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Vt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=jt(er).id+rr("yyyyMMdd")+at("number",3);for(let r=0;rir())).join("\n")},word:hr,sentence:ir,title:function(e=3,n=7){return Bn(Mn(e,n),(()=>dn(hr()))).join("")},ctitle:function(e=3,n=7){return Bn(Mn(e,n),(()=>mr())).join("")},csentence:sr,cparagraph:function(e=3,n=7){return Bn(Mn(e,n),(()=>sr())).join("\n")},cword:mr,protocol:br,domain:xr,tld:gr,email:function(e){return`${rt("lower")}.${hr()}@${e||hr()+"."+gr()}`},ip:function(){return[...Array(4)].map((()=>Qn(0,255))).join(".")},url:function(e,n){return`${e||br()}://${n||xr()}/${hr()}`},_patternLetters:nr,_rformat:tr,_formatDate:ar,_randomDate:or,time:function(e="HH:mm:ss"){return rr(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return rr(e)},date:rr,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}if("week"===e)t.setDate(t.getDate()-t.getDay());return ar(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?or(e,n).getTime():or().getTime()},_adSize:wr,_screenSize:kr,_videoSize:Ar,image:Mr,img:Mr,_brandColors:yr,_brandNames:Cr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=jt(wr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=yr[jt(Cr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return jt(jr)},province:function(){return jt(er).name},city:function(e){const n=jt(er),t=jt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=jt(er),t=jt(n.children),r=jt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Qn(0,9);return n},genFile:function(e){return new File(Er(e),hr())},genBlob:function(e){return new Blob(Er(e))}}),Sr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Rr(e=""){"string"!=typeof e&&(e+="");const n=e.match(Sr.RE_KEY),t=n&&n[3]&&n[3].match(Sr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Zn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Sr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Zn(l,c):void 0},h=Object.keys(i).some((e=>void 0!==e));return h?i:{}}function Tr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=jt(ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ga(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(ga(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function Fr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?nt(n,e,r):r}function _r(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function $r({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=et(n,t,r,a)})):u=n&&!a[2]?t:o,u}function Dr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=Et(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(Sr.RE_KEY);c&&c[2]&&"number"===In(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function qr(e){this.type=e,this.offset=qr.offset(),this.text=qr.text()}function Pr(e,n){qr.call(this,"alternate"),this.left=e,this.right=n}function zr(e){qr.call(this,"match"),this.body=e.filter(Boolean)}function Lr(e,n){qr.call(this,e),this.body=n}function Hr(e){Lr.call(this,"capture-group"),this.index=Qr[this.offset]||(Qr[this.offset]=Zr++),this.body=e}function Nr(e,n){qr.call(this,"quantified"),this.body=e,this.quantifier=n}function Br(e,n){qr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Ir(e,n){qr.call(this,"charset"),this.invert=e,this.body=n}function Ur(e,n){qr.call(this,"range"),this.start=e,this.end=n}function Gr(e){qr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Wr(e){qr.call(this,"unicode"),this.code=e.toUpperCase()}function Jr(e){qr.call(this,"hex"),this.code=e.toUpperCase()}function Kr(e){qr.call(this,"octal"),this.code=e.toUpperCase()}function Yr(e){qr.call(this,"back-reference"),this.code=e.toUpperCase()}function Vr(e){qr.call(this,"control-character"),this.code=e.toUpperCase()}var Xr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t,r;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return r=n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input","Expected "+t+" but "+r+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(e){return Et!==e&&(Et>e&&(Et=0,Ot={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ot,Et,e),Et=e),Ot}function r(e){St>Mt||(Mt>St&&(St=Mt,Rt=[]),Rt.push(e))}function a(){var e,t,h,s,f;return e=Mt,t=function(){var e,n,t,r,a;if(e=Mt,n=u(),null===n&&(n=X),null!==n)if(t=Mt,Tt++,r=i(),Tt--,null===r?t=X:(Mt=t,t=V),null!==t){for(r=[],null===(a=c())&&(a=o());null!==a;)r.push(a),null===(a=c())&&(a=o());null!==r?(null===(a=l())&&(a=X),null!==a?(jt=e,null===(n=ne(n,r,a))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return e}(),null!==t?(h=Mt,124===n.charCodeAt(Mt)?(s=Z,Mt++):(s=null,0===Tt&&r(Q)),null!==s?null!==(f=a())?h=s=[s,f]:(Mt=h,h=V):(Mt=h,h=V),null===h&&(h=X),null!==h?(jt=e,null===(t=ee(t,h))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function o(){var e;return null===(e=g())&&(null===(e=v())&&(e=function(){var e;return e=A(),null===e&&(e=function(){var e;return e=j(),null===e&&(e=E(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=H(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))))),e}(),null===e&&(e=C())),e}())),e}function u(){var e,t;return e=Mt,94===n.charCodeAt(Mt)?(t=te,Mt++):(t=null,0===Tt&&r(re)),null!==t&&(jt=e,t=ae()),null===t?(Mt=e,e=t):e=t,e}function l(){var e,t;return e=Mt,36===n.charCodeAt(Mt)?(t=oe,Mt++):(t=null,0===Tt&&r(ue)),null!==t&&(jt=e,t=le()),null===t?(Mt=e,e=t):e=t,e}function c(){var e,n,t;return e=Mt,null!==(n=o())?null!==(t=i())?(jt=e,null===(n=ce(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V):(Mt=e,e=V),e}function i(){var e,n,t;return Tt++,e=Mt,n=function(){var e;return e=h(),null===e&&(e=s(),null===e&&(e=f(),null===e&&(e=m(),null===e&&(e=d(),null===e&&(e=p()))))),e}(),null!==n?(null===(t=b())&&(t=X),null!==t?(jt=e,null===(n=he(n,t))?(Mt=e,e=n):e=n):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(n=null,0===Tt&&r(ie)),e}function h(){var e,t,a,o,u,l;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(44===n.charCodeAt(Mt)?(o=me,Mt++):(o=null,0===Tt&&r(de)),null!==o?null!==(u=x())?(125===n.charCodeAt(Mt)?(l=pe,Mt++):(l=null,0===Tt&&r(be)),null!==l?(jt=e,null===(t=xe(a,u))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function s(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(n.substr(Mt,2)===ge?(o=ge,Mt+=2):(o=null,0===Tt&&r(ve)),null!==o?(jt=e,null===(t=ye(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function f(){var e,t,a,o;return e=Mt,123===n.charCodeAt(Mt)?(t=se,Mt++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(125===n.charCodeAt(Mt)?(o=pe,Mt++):(o=null,0===Tt&&r(be)),null!==o?(jt=e,null===(t=we(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V):(Mt=e,e=V),e}function m(){var e,t;return e=Mt,43===n.charCodeAt(Mt)?(t=ke,Mt++):(t=null,0===Tt&&r(Ae)),null!==t&&(jt=e,t=Ce()),null===t?(Mt=e,e=t):e=t,e}function d(){var e,t;return e=Mt,42===n.charCodeAt(Mt)?(t=Me,Mt++):(t=null,0===Tt&&r(je)),null!==t&&(jt=e,t=Ee()),null===t?(Mt=e,e=t):e=t,e}function p(){var e,t;return e=Mt,63===n.charCodeAt(Mt)?(t=Oe,Mt++):(t=null,0===Tt&&r(Se)),null!==t&&(jt=e,t=Re()),null===t?(Mt=e,e=t):e=t,e}function b(){var e;return 63===n.charCodeAt(Mt)?(e=Oe,Mt++):(e=null,0===Tt&&r(Se)),e}function x(){var e,t,a;if(e=Mt,t=[],Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe)),null!==a)for(;null!==a;)t.push(a),Te.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(Fe));else t=V;return null!==t&&(jt=e,t=_e(t)),null===t?(Mt=e,e=t):e=t,e}function g(){var e,t,o,u;return e=Mt,40===n.charCodeAt(Mt)?(t=$e,Mt++):(t=null,0===Tt&&r(De)),null!==t?(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===Ie?(t=Ie,Mt+=2):(t=null,0===Tt&&r(Ue)),null!==t?(o=a(),null!==o?(jt=e,t=Ge(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===We?(t=We,Mt+=2):(t=null,0===Tt&&r(Je)),null!==t?(o=a(),null!==o?(jt=e,t=Ke(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Mt,n.substr(Mt,2)===He?(t=He,Mt+=2):(t=null,0===Tt&&r(Ne)),null!==t?(o=a(),null!==o?(jt=e,t=Be(o),null===t?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}(),null===o&&(o=function(){var e,n;return e=Mt,n=a(),null!==n&&(jt=e,n=Le(n)),null===n?(Mt=e,e=n):e=n,e}()))),null!==o?(41===n.charCodeAt(Mt)?(u=qe,Mt++):(u=null,0===Tt&&r(Pe)),null!==u?(jt=e,null===(t=ze(o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)):(Mt=e,e=V),e}function v(){var e,t,a,o,u;if(Tt++,e=Mt,91===n.charCodeAt(Mt)?(t=Ve,Mt++):(t=null,0===Tt&&r(Xe)),null!==t)if(94===n.charCodeAt(Mt)?(a=te,Mt++):(a=null,0===Tt&&r(re)),null===a&&(a=X),null!==a){for(o=[],null===(u=y())&&(u=w());null!==u;)o.push(u),null===(u=y())&&(u=w());null!==o?(93===n.charCodeAt(Mt)?(u=Ze,Mt++):(u=null,0===Tt&&r(Qe)),null!==u?(jt=e,null===(t=en(a,o))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V)}else Mt=e,e=V;else Mt=e,e=V;return Tt--,null===e&&(t=null,0===Tt&&r(Ye)),e}function y(){var e,t,a,o;return Tt++,e=Mt,null!==(t=w())?(45===n.charCodeAt(Mt)?(a=tn,Mt++):(a=null,0===Tt&&r(rn)),null!==a?null!==(o=w())?(jt=e,null===(t=an(t,o))?(Mt=e,e=t):e=t):(Mt=e,e=V):(Mt=e,e=V)):(Mt=e,e=V),Tt--,null===e&&(t=null,0===Tt&&r(nn)),e}function w(){var e;return Tt++,null===(e=function(){var e;return e=M(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))),e}())&&(e=k()),Tt--,null===e&&0===Tt&&r(on),e}function k(){var e,t;return e=Mt,un.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(ln)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,e}function A(){var e,t;return e=Mt,46===n.charCodeAt(Mt)?(t=hn,Mt++):(t=null,0===Tt&&r(sn)),null!==t&&(jt=e,t=fn()),null===t?(Mt=e,e=t):e=t,e}function C(){var e,t;return Tt++,e=Mt,dn.test(n.charAt(Mt))?(t=n.charAt(Mt),Mt++):(t=null,0===Tt&&r(pn)),null!==t&&(jt=e,t=cn(t)),null===t?(Mt=e,e=t):e=t,Tt--,null===e&&(t=null,0===Tt&&r(mn)),e}function M(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=gn()),null===t?(Mt=e,e=t):e=t,e}function j(){var e,t;return e=Mt,n.substr(Mt,2)===bn?(t=bn,Mt+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=vn()),null===t?(Mt=e,e=t):e=t,e}function E(){var e,t;return e=Mt,n.substr(Mt,2)===yn?(t=yn,Mt+=2):(t=null,0===Tt&&r(wn)),null!==t&&(jt=e,t=kn()),null===t?(Mt=e,e=t):e=t,e}function O(){var e,t;return e=Mt,n.substr(Mt,2)===An?(t=An,Mt+=2):(t=null,0===Tt&&r(Cn)),null!==t&&(jt=e,t=Mn()),null===t?(Mt=e,e=t):e=t,e}function S(){var e,t;return e=Mt,n.substr(Mt,2)===jn?(t=jn,Mt+=2):(t=null,0===Tt&&r(En)),null!==t&&(jt=e,t=On()),null===t?(Mt=e,e=t):e=t,e}function R(){var e,t;return e=Mt,n.substr(Mt,2)===Sn?(t=Sn,Mt+=2):(t=null,0===Tt&&r(Rn)),null!==t&&(jt=e,t=Tn()),null===t?(Mt=e,e=t):e=t,e}function T(){var e,t;return e=Mt,n.substr(Mt,2)===Fn?(t=Fn,Mt+=2):(t=null,0===Tt&&r(_n)),null!==t&&(jt=e,t=$n()),null===t?(Mt=e,e=t):e=t,e}function F(){var e,t;return e=Mt,n.substr(Mt,2)===Dn?(t=Dn,Mt+=2):(t=null,0===Tt&&r(qn)),null!==t&&(jt=e,t=Pn()),null===t?(Mt=e,e=t):e=t,e}function _(){var e,t;return e=Mt,n.substr(Mt,2)===zn?(t=zn,Mt+=2):(t=null,0===Tt&&r(Ln)),null!==t&&(jt=e,t=Hn()),null===t?(Mt=e,e=t):e=t,e}function $(){var e,t;return e=Mt,n.substr(Mt,2)===Nn?(t=Nn,Mt+=2):(t=null,0===Tt&&r(Bn)),null!==t&&(jt=e,t=In()),null===t?(Mt=e,e=t):e=t,e}function D(){var e,t;return e=Mt,n.substr(Mt,2)===Un?(t=Un,Mt+=2):(t=null,0===Tt&&r(Gn)),null!==t&&(jt=e,t=Wn()),null===t?(Mt=e,e=t):e=t,e}function q(){var e,t;return e=Mt,n.substr(Mt,2)===Jn?(t=Jn,Mt+=2):(t=null,0===Tt&&r(Kn)),null!==t&&(jt=e,t=Yn()),null===t?(Mt=e,e=t):e=t,e}function P(){var e,t;return e=Mt,n.substr(Mt,2)===Vn?(t=Vn,Mt+=2):(t=null,0===Tt&&r(Xn)),null!==t&&(jt=e,t=Zn()),null===t?(Mt=e,e=t):e=t,e}function z(){var e,t;return e=Mt,n.substr(Mt,2)===Qn?(t=Qn,Mt+=2):(t=null,0===Tt&&r(et)),null!==t&&(jt=e,t=nt()),null===t?(Mt=e,e=t):e=t,e}function L(){var e,t,a;return e=Mt,n.substr(Mt,2)===tt?(t=tt,Mt+=2):(t=null,0===Tt&&r(rt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=ot(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function H(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(ct.test(n.charAt(Mt))?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(it)),null!==a?(jt=e,null===(t=ht(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}function N(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t){if(a=[],mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt)),null!==o)for(;null!==o;)a.push(o),mt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(dt));else a=V;null!==a?(jt=e,null===(t=pt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function B(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===bt?(t=bt,Mt+=2):(t=null,0===Tt&&r(xt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=yt(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function I(){var e,t,a,o;if(e=Mt,n.substr(Mt,2)===wt?(t=wt,Mt+=2):(t=null,0===Tt&&r(kt)),null!==t){if(a=[],gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Mt))?(o=n.charAt(Mt),Mt++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=At(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)}else Mt=e,e=V;return e}function U(){var e,t;return e=Mt,n.substr(Mt,2)===st?(t=st,Mt+=2):(t=null,0===Tt&&r(ft)),null!==t&&(jt=e,t=Ct()),null===t?(Mt=e,e=t):e=t,e}function G(){var e,t,a;return e=Mt,92===n.charCodeAt(Mt)?(t=ut,Mt++):(t=null,0===Tt&&r(lt)),null!==t?(n.length>Mt?(a=n.charAt(Mt),Mt++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=cn(a))?(Mt=e,e=t):e=t):(Mt=e,e=V)):(Mt=e,e=V),e}var W,J=arguments.length>1?arguments[1]:{},K={regexp:a},Y=a,V=null,X="",Z="|",Q='"|"',ee=function(e,n){return n?new Pr(e,n[1]):e},ne=function(e,n,t){return new zr([e].concat(n).concat([t]))},te="^",re='"^"',ae=function(){return new qr("start")},oe="$",ue='"$"',le=function(){return new qr("end")},ce=function(e,n){return new Nr(e,n)},ie="Quantifier",he=function(e,n){return n&&(e.greedy=!1),e},se="{",fe='"{"',me=",",de='","',pe="}",be='"}"',xe=function(e,n){return new Br(e,n)},ge=",}",ve='",}"',ye=function(e){return new Br(e,1/0)},we=function(e){return new Br(e,e)},ke="+",Ae='"+"',Ce=function(){return new Br(1,1/0)},Me="*",je='"*"',Ee=function(){return new Br(0,1/0)},Oe="?",Se='"?"',Re=function(){return new Br(0,1)},Te=/^[0-9]/,Fe="[0-9]",_e=function(e){return+e.join("")},$e="(",De='"("',qe=")",Pe='")"',ze=function(e){return e},Le=function(e){return new Hr(e)},He="?:",Ne='"?:"',Be=function(e){return new Lr("non-capture-group",e)},Ie="?=",Ue='"?="',Ge=function(e){return new Lr("positive-lookahead",e)},We="?!",Je='"?!"',Ke=function(e){return new Lr("negative-lookahead",e)},Ye="CharacterSet",Ve="[",Xe='"["',Ze="]",Qe='"]"',en=function(e,n){return new Ir(!!e,n)},nn="CharacterRange",tn="-",rn='"-"',an=function(e,n){return new Ur(e,n)},on="Character",un=/^[^\\\]]/,ln="[^\\\\\\]]",cn=function(e){return new Gr(e)},hn=".",sn='"."',fn=function(){return new qr("any-character")},mn="Literal",dn=/^[^|\\\/.[()?+*$\^]/,pn="[^|\\\\\\/.[()?+*$\\^]",bn="\\b",xn='"\\\\b"',gn=function(){return new qr("backspace")},vn=function(){return new qr("word-boundary")},yn="\\B",wn='"\\\\B"',kn=function(){return new qr("non-word-boundary")},An="\\d",Cn='"\\\\d"',Mn=function(){return new qr("digit")},jn="\\D",En='"\\\\D"',On=function(){return new qr("non-digit")},Sn="\\f",Rn='"\\\\f"',Tn=function(){return new qr("form-feed")},Fn="\\n",_n='"\\\\n"',$n=function(){return new qr("line-feed")},Dn="\\r",qn='"\\\\r"',Pn=function(){return new qr("carriage-return")},zn="\\s",Ln='"\\\\s"',Hn=function(){return new qr("white-space")},Nn="\\S",Bn='"\\\\S"',In=function(){return new qr("non-white-space")},Un="\\t",Gn='"\\\\t"',Wn=function(){return new qr("tab")},Jn="\\v",Kn='"\\\\v"',Yn=function(){return new qr("vertical-tab")},Vn="\\w",Xn='"\\\\w"',Zn=function(){return new qr("word")},Qn="\\W",et='"\\\\W"',nt=function(){return new qr("non-word")},tt="\\c",rt='"\\\\c"',at="any character",ot=function(e){return new Vr(e)},ut="\\",lt='"\\\\"',ct=/^[1-9]/,it="[1-9]",ht=function(e){return new Yr(e)},st="\\0",ft='"\\\\0"',mt=/^[0-7]/,dt="[0-7]",pt=function(e){return new Kr(e.join(""))},bt="\\x",xt='"\\\\x"',gt=/^[0-9a-fA-F]/,vt="[0-9a-fA-F]",yt=function(e){return new Jr(e.join(""))},wt="\\u",kt='"\\\\u"',At=function(e){return new Wr(e.join(""))},Ct=function(){return new qr("null-character")},Mt=0,jt=0,Et=0,Ot={line:1,column:1,seenCR:!1},St=0,Rt=[],Tt=0;if("startRule"in J){if(!(J.startRule in K))throw new Error("Can't start parsing from rule \""+J.startRule+'".');Y=K[J.startRule]}if(qr.offset=function(){return jt},qr.text=function(){return n.substring(jt,Mt)},null!==(W=Y())&&Mt===n.length)return W;throw function(e){var n=0;for(e.sort();nString.fromCharCode(n+e))).join("")}ea.gen=function(e,n,t){return t=t||{guid:1},ea[e.type]?ea[e.type](e,n,t):ea.token(e,n,t)},ea.extend({token:function(e,n,t){switch(e.type){case"start":case"end":case"backspace":case"word-boundary":return"";case"any-character":return rt();case"non-word-boundary":case"form-feed":case"carriage-return":case"tab":case"vertical-tab":break;case"digit":return jt(ra.split(""));case"non-digit":return jt((na+ta+aa).split(""));case"line-feed":return e.body||e.text;case"white-space":return jt(ua.split(""));case"non-white-space":case"word":return jt((na+ta+ra).split(""));case"non-word":return jt(aa.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(nt()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=fa(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return sa(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ga(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Or)&&!(u in Or))return e;o=o?o.split(/\s*,\s*/).map((e=>(Sr.RE_PLACEHOLDER.exec(""),Sr.RE_PLACEHOLDER.test(e)?da(e,n,t,r):e))):[];const c=Or[a]||Or[u];switch(In(c)){case"array":return jt(c);case"function":{c.options=r;const e=c.apply(Or,o)||"";return delete c.options,e}}}function pa(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(Sr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=da(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Un(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?at(t):o;return u}var ba=Object.freeze({__proto__:null,array:Tr,boolean:Fr,function:_r,number:$r,object:Dr,regexp:ha,string:pa});let xa=1;function ga(e,n="",t={}){const r={path:t.path||[xa],templatePath:t.templatePath||[xa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=In(e),o=ba[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Sr.RE_KEY,"$1"):n,rule:Rr(n),context:r}),r.root||(r.root=u),u):e}const va={gen:ga,extend:Gn};function ya(e,n,t=[]){const r={name:"string"==typeof n?n.replace(Sr.RE_KEY,"$1"):n,template:e,type:In(e),rule:Rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ya(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ya(e,n,r.path)))}return r}function wa(e,n){const t=ya(e),r=ka.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:da,getValueByKeyPath:sa,normalizePath:fa,splitPathToArray:ma});const ka={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return Aa.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Aa.equal("type",e.path,In(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return Aa.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return r.length===a}return Aa.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&Aa.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(Aa.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),Aa.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&Aa.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Aa.equal("properties length",e.path,u.length,o.min,r)):Aa.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1}};wa.Diff=ka,wa.Assert=Aa;const Ca={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Ma({url:e,type:n}){n=n.toLowerCase();for(const t in Ca){const r=Ca[t],{rurl:a,rtype:o}=r;if(ja(a,e)&&ja(o,n))return r}return!1}function ja(e,n){switch(In(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function Ea({template:e},n){return H(e)?e(n):ga(e)}const Oa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],Sa=Symbol("Body internals"),Ra=Symbol("Response internals");async function Ta(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class Fa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):Oa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[Sa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[Sa].body}get bodyUsed(){return this[Sa].disturbed}async arrayBuffer(){return(await Ta(this[Sa])).arrayBuffer()}async blob(){return Ta(this[Sa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await Ta(this[Sa])).text()}}Object.defineProperties(Fa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const _a=new Set([301,302,303,307,308]),$a=globalThis.window&&globalThis.window.Response||class{};class Da extends Fa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":Oa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[Sa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[Ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[Ra].type}get url(){return this[Ra].url||""}get status(){return this[Ra].status}get ok(){return this[Ra].status>=200&&this[Ra].status<300}get redirected(){return this[Ra].counter>0}get statusText(){return this[Ra].statusText}get headers(){return this[Ra].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new $a(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!_a.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new $a(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new $a(null,{status:0,statusText:""});return e[Ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties($a.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const qa=globalThis.window||{},Pa=qa.fetch;async function za(e,n={}){if(!0===qa.fetch.$mock){const t=Ma({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=Ea(t,{});return console.warn("mock代理中"),new Da(e,n)}}return console.warn("未使用 mockjs"),Pa(e,n)}var La="OK";const Ha=function(){},Na=globalThis.window||{},Ba=void 0!==Na?Na.XMLHttpRequest:class{},Ia=Ba.prototype.send||Ha,Ua=Ba.prototype.open||Ha;class Ga extends Ba{constructor(...e){super(...e)}_send=Ia;_open=Ua;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Ma({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=La;const e=Ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&qa.fetch&&!qa.fetch.hasOwnProperty("$mock")&&(qa.fetch=za,qa.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Wa=globalThis.window||{};const Ja={Handler:va,Random:Or,Util:Yn,XHR:Ga,RE:ia,toJSONSchema:ya,valid:wa,heredoc:Jn,setup:function(e){return Ga.setup(e)},_mocked:Ca,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,va.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Wa.XMLHttpRequest!==Ga&&(Wa.XMLHttpRequest=Ga),Ca.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};export default Ja; diff --git a/dist/mock.min.js b/dist/mock.min.js deleted file mode 100644 index c87704a0..00000000 --- a/dist/mock.min.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * // esm 版本编写人 - * - * MIT License - * - * Copyright (c) 2020 动中之动 - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - * - * // 原始代码编写人 - * - * The MIT License (MIT) - * - * Copyright (c) 2015 nuysoft - * http://mockjs.com/ - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of - * this software and associated documentation files (the "Software"), to deal in - * the Software without restriction, including without limitation the rights to - * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of - * the Software, and to permit persons to whom the Software is furnished to do so, - * subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS - * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR - * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER - * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - */ - -var Mock=function(){"use strict";var e="object"==typeof global&&global&&global.Object===Object&&global,n="object"==typeof self&&self&&self.Object===Object&&self,t=e||n||Function("return this")(),r=t.Symbol,a=Object.prototype,o=a.hasOwnProperty,u=a.toString,l=r?r.toStringTag:void 0;var c=Object.prototype.toString;var i="[object Null]",h="[object Undefined]",s=r?r.toStringTag:void 0;function f(e){return null==e?void 0===e?h:i:s&&s in Object(e)?function(e){var n=o.call(e,l),t=e[l];try{e[l]=void 0;var r=!0}catch(e){}var a=u.call(e);return r&&(n?e[l]=t:delete e[l]),a}(e):function(e){return c.call(e)}(e)}function m(e){return null!=e&&"object"==typeof e}var d="[object Symbol]";function p(e){return"symbol"==typeof e||m(e)&&f(e)==d}function b(e,n){for(var t=-1,r=null==e?0:e.length,a=Array(r);++t0){if(++ne>=800)return arguments[0]}else ne=0;return ee.apply(void 0,arguments)}),ue=9007199254740991,le=/^(?:0|[1-9]\d*)$/;function ce(e,n){var t=typeof e;return!!(n=null==n?ue:n)&&("number"==t||"symbol"!=t&&le.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=pe}function xe(e){return null!=e&&be(e.length)&&!H(e)}function ge(e,n,t){if(!C(t))return!1;var r=typeof n;return!!("number"==r?xe(t)&&ce(n,t.length):"string"==r&&n in t)&&he(t[n],e)}var ve=Object.prototype;function ye(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||ve)}function we(e,n){for(var t=-1,r=Array(e);++t1?n[r-1]:void 0,o=r>2?n[2]:void 0;for(a=We.length>3&&"function"==typeof a?(r--,a):void 0,o&&ge(n[0],n[1],o)&&(a=r<3?void 0:a,r=1),e=Object(e);++t=r?e:function(e,n,t){var r=-1,a=e.length;n<0&&(n=-n>a?0:a+n),(t=t>a?a:t)<0&&(t+=a),a=n>t?0:t-n>>>0,n>>>=0;for(var o=Array(a);++r=n?e:n)),e}function bn(e){return null==e?[]:function(e,n){return b(n,(function(n){return e[n]}))}(e,Ie(e))}var xn=qe&&qe.isRegExp,gn=xn?Fe(xn):function(e){return m(e)&&"[object RegExp]"==f(e)},vn=Math.floor,yn=Math.random;function wn(e,n){return e+vn(yn()*(n-e+1))}var kn=parseFloat,An=Math.min,Mn=Math.random;function Cn(e,n,t){if(t&&"boolean"!=typeof t&&ge(e,n,t)&&(n=t=void 0),void 0===t&&("boolean"==typeof n?(t=n,n=void 0):"boolean"==typeof e&&(t=e,e=void 0)),void 0===e&&void 0===n?(e=0,n=1):(e=_(e),void 0===n?(n=e,e=0):n=_(n)),e>n){var r=e;e=n,n=r}if(t||e%1||n%1){var a=Mn();return An(e+a*(n-e+kn("1e-"+((a+"").length-1))),n)}return wn(e,n)}var jn=Math.ceil,En=Math.max;var On,Sn=function(e,n,t){return t&&"number"!=typeof t&&ge(e,n,t)&&(n=t=void 0),e=_(e),void 0===n?(n=e,e=0):n=_(n),function(e,n,t,r){for(var a=-1,o=En(jn((n-e)/(t||1)),0),u=Array(o);o--;)u[r?o:++a]=e,e+=t;return u}(e,n,t=void 0===t?eLn)return[];var t,r=Hn,a=Nn(e,Hn);e-=Hn;for(var o=we(a,n="function"==typeof(t=n)?t:D);++rn(e,e)));else if(e.length===+e.length)for(r=0;r17&&(r=17);const a=Cn(t,r,!1);return parseFloat(Cn(e,n,!0).toFixed(a))},nt=function(e,n,t=!1){return t?Cn(0,e+n)>e?!t:t:Cn(10,-10)>0},tt={lower:"abcdefghijklmnopqrstuvwxyz",upper:"ABCDEFGHIJKLMNOPQRSTUVWXYZ",number:"0123456789",symbol:"!@#$%^&*()[]"};tt.alpha=tt.lower+tt.upper,tt.default=tt.lower+tt.upper+tt.number+tt.symbol;const rt=function(e="default"){return tt.hasOwnProperty(e.toLocaleLowerCase())&&(e=tt[e.toLowerCase()]),Fn(e)},at=function(...e){let n,t,r,a;switch(e.length){case 0:n=Qn(3,7);break;case 1:[n]=e;break;case 2:"string"==typeof e[0]?[t,n]=e:([r,a]=e,n=Qn(r,a));break;case 3:[t,r,a]=e,n=Qn(r,a)}return Bn(n,(()=>rt(t))).join("")};function ot(e,n){return e(n={exports:{}},n.exports),n.exports}var ut={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},lt=ot((function(e){var n=Array.prototype.concat,t=Array.prototype.slice,r=e.exports=function(e){for(var r,a=[],o=0,u=e.length;o=0&&(r.splice instanceof Function||Object.getOwnPropertyDescriptor(r,r.length-1)&&"String"!==r.constructor.name))?a=n.call(a,t.call(l)):a.push(l)}return a};r.wrap=function(e){return function(){return e(r(arguments))}}})),ct=ot((function(e){var n=Object.hasOwnProperty,t=Object.create(null);for(var r in ut)n.call(ut,r)&&(t[ut[r]]=r);var a=e.exports={to:{},get:{}};function o(e,n,t){return Math.min(Math.max(n,e),t)}function u(e){var n=Math.round(e).toString(16).toUpperCase();return n.length<2?"0"+n:n}a.get=function(e){var n,t;switch(e.substring(0,3).toLowerCase()){case"hsl":n=a.get.hsl(e),t="hsl";break;case"hwb":n=a.get.hwb(e),t="hwb";break;default:n=a.get.rgb(e),t="rgb"}return n?{model:t,value:n}:null},a.get.rgb=function(e){if(!e)return null;var t,r,a,u=[0,0,0,1];if(t=e.match(/^#([a-f0-9]{6})([a-f0-9]{2})?$/i)){for(a=t[2],t=t[1],r=0;r<3;r++){var l=2*r;u[r]=parseInt(t.slice(l,l+2),16)}a&&(u[3]=parseInt(a,16)/255)}else if(t=e.match(/^#([a-f0-9]{3,4})$/i)){for(a=(t=t[1])[3],r=0;r<3;r++)u[r]=parseInt(t[r]+t[r],16);a&&(u[3]=parseInt(a+a,16)/255)}else if(t=e.match(/^rgba?\(\s*([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)(?=[\s,])\s*(?:,\s*)?([+-]?\d+)\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)){for(r=0;r<3;r++)u[r]=parseInt(t[r+1],0);t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}else{if(!(t=e.match(/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*,?\s*([+-]?[\d\.]+)\%\s*(?:[,|\/]\s*([+-]?[\d\.]+)(%?)\s*)?\)$/)))return(t=e.match(/^(\w+)$/))?"transparent"===t[1]?[0,0,0,0]:n.call(ut,t[1])?((u=ut[t[1]])[3]=1,u):null:null;for(r=0;r<3;r++)u[r]=Math.round(2.55*parseFloat(t[r+1]));t[4]&&(t[5]?u[3]=.01*parseFloat(t[4]):u[3]=parseFloat(t[4]))}for(r=0;r<3;r++)u[r]=o(u[r],0,255);return u[3]=o(u[3],0,1),u},a.get.hsl=function(e){if(!e)return null;var n=e.match(/^hsla?\(\s*([+-]?(?:\d{0,3}\.)?\d+)(?:deg)?\s*,?\s*([+-]?[\d\.]+)%\s*,?\s*([+-]?[\d\.]+)%\s*(?:[,|\/]\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.get.hwb=function(e){if(!e)return null;var n=e.match(/^hwb\(\s*([+-]?\d{0,3}(?:\.\d+)?)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?(?=\.\d|\d)(?:0|[1-9]\d*)?(?:\.\d*)?(?:[eE][+-]?\d+)?)\s*)?\)$/);if(n){var t=parseFloat(n[4]);return[(parseFloat(n[1])%360+360)%360,o(parseFloat(n[2]),0,100),o(parseFloat(n[3]),0,100),o(isNaN(t)?1:t,0,1)]}return null},a.to.hex=function(){var e=lt(arguments);return"#"+u(e[0])+u(e[1])+u(e[2])+(e[3]<1?u(Math.round(255*e[3])):"")},a.to.rgb=function(){var e=lt(arguments);return e.length<4||1===e[3]?"rgb("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+")":"rgba("+Math.round(e[0])+", "+Math.round(e[1])+", "+Math.round(e[2])+", "+e[3]+")"},a.to.rgb.percent=function(){var e=lt(arguments),n=Math.round(e[0]/255*100),t=Math.round(e[1]/255*100),r=Math.round(e[2]/255*100);return e.length<4||1===e[3]?"rgb("+n+"%, "+t+"%, "+r+"%)":"rgba("+n+"%, "+t+"%, "+r+"%, "+e[3]+")"},a.to.hsl=function(){var e=lt(arguments);return e.length<4||1===e[3]?"hsl("+e[0]+", "+e[1]+"%, "+e[2]+"%)":"hsla("+e[0]+", "+e[1]+"%, "+e[2]+"%, "+e[3]+")"},a.to.hwb=function(){var e=lt(arguments),n="";return e.length>=4&&1!==e[3]&&(n=", "+e[3]),"hwb("+e[0]+", "+e[1]+"%, "+e[2]+"%"+n+")"},a.to.keyword=function(e){return t[e.slice(0,3)]}}));ct.to,ct.get;var it={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]},ht=ot((function(e){var n={};for(var t in it)it.hasOwnProperty(t)&&(n[it[t]]=t);var r=e.exports={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};for(var a in r)if(r.hasOwnProperty(a)){if(!("channels"in r[a]))throw new Error("missing channels property: "+a);if(!("labels"in r[a]))throw new Error("missing channel labels property: "+a);if(r[a].labels.length!==r[a].channels)throw new Error("channel and label counts mismatch: "+a);var o=r[a].channels,u=r[a].labels;delete r[a].channels,delete r[a].labels,Object.defineProperty(r[a],"channels",{value:o}),Object.defineProperty(r[a],"labels",{value:u})}r.rgb.hsl=function(e){var n,t,r=e[0]/255,a=e[1]/255,o=e[2]/255,u=Math.min(r,a,o),l=Math.max(r,a,o),c=l-u;return l===u?n=0:r===l?n=(a-o)/c:a===l?n=2+(o-r)/c:o===l&&(n=4+(r-a)/c),(n=Math.min(60*n,360))<0&&(n+=360),t=(u+l)/2,[n,100*(l===u?0:t<=.5?c/(l+u):c/(2-l-u)),100*t]},r.rgb.hsv=function(e){var n,t,r,a,o,u=e[0]/255,l=e[1]/255,c=e[2]/255,i=Math.max(u,l,c),h=i-Math.min(u,l,c),s=function(e){return(i-e)/6/h+.5};return 0===h?a=o=0:(o=h/i,n=s(u),t=s(l),r=s(c),u===i?a=r-t:l===i?a=1/3+n-r:c===i&&(a=2/3+t-n),a<0?a+=1:a>1&&(a-=1)),[360*a,100*o,100*i]},r.rgb.hwb=function(e){var n=e[0],t=e[1],a=e[2];return[r.rgb.hsl(e)[0],100*(1/255*Math.min(n,Math.min(t,a))),100*(a=1-1/255*Math.max(n,Math.max(t,a)))]},r.rgb.cmyk=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255;return[100*((1-t-(n=Math.min(1-t,1-r,1-a)))/(1-n)||0),100*((1-r-n)/(1-n)||0),100*((1-a-n)/(1-n)||0),100*n]},r.rgb.keyword=function(e){var t=n[e];if(t)return t;var r,a,o,u=1/0;for(var l in it)if(it.hasOwnProperty(l)){var c=it[l],i=(a=e,o=c,Math.pow(a[0]-o[0],2)+Math.pow(a[1]-o[1],2)+Math.pow(a[2]-o[2],2));i.04045?Math.pow((n+.055)/1.055,2.4):n/12.92)+.3576*(t=t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92)+.1805*(r=r>.04045?Math.pow((r+.055)/1.055,2.4):r/12.92)),100*(.2126*n+.7152*t+.0722*r),100*(.0193*n+.1192*t+.9505*r)]},r.rgb.lab=function(e){var n=r.rgb.xyz(e),t=n[0],a=n[1],o=n[2];return a/=100,o/=108.883,t=(t/=95.047)>.008856?Math.pow(t,1/3):7.787*t+16/116,[116*(a=a>.008856?Math.pow(a,1/3):7.787*a+16/116)-16,500*(t-a),200*(a-(o=o>.008856?Math.pow(o,1/3):7.787*o+16/116))]},r.hsl.rgb=function(e){var n,t,r,a,o,u=e[0]/360,l=e[1]/100,c=e[2]/100;if(0===l)return[o=255*c,o,o];n=2*c-(t=c<.5?c*(1+l):c+l-c*l),a=[0,0,0];for(var i=0;i<3;i++)(r=u+1/3*-(i-1))<0&&r++,r>1&&r--,o=6*r<1?n+6*(t-n)*r:2*r<1?t:3*r<2?n+(t-n)*(2/3-r)*6:n,a[i]=255*o;return a},r.hsl.hsv=function(e){var n=e[0],t=e[1]/100,r=e[2]/100,a=t,o=Math.max(r,.01);return t*=(r*=2)<=1?r:2-r,a*=o<=1?o:2-o,[n,100*(0===r?2*a/(o+a):2*t/(r+t)),100*((r+t)/2)]},r.hsv.rgb=function(e){var n=e[0]/60,t=e[1]/100,r=e[2]/100,a=Math.floor(n)%6,o=n-Math.floor(n),u=255*r*(1-t),l=255*r*(1-t*o),c=255*r*(1-t*(1-o));switch(r*=255,a){case 0:return[r,c,u];case 1:return[l,r,u];case 2:return[u,r,c];case 3:return[u,l,r];case 4:return[c,u,r];case 5:return[r,u,l]}},r.hsv.hsl=function(e){var n,t,r,a=e[0],o=e[1]/100,u=e[2]/100,l=Math.max(u,.01);return r=(2-o)*u,t=o*l,[a,100*(t=(t/=(n=(2-o)*l)<=1?n:2-n)||0),100*(r/=2)]},r.hwb.rgb=function(e){var n,t,r,a,o,u,l,c=e[0]/360,i=e[1]/100,h=e[2]/100,s=i+h;switch(s>1&&(i/=s,h/=s),r=6*c-(n=Math.floor(6*c)),0!=(1&n)&&(r=1-r),a=i+r*((t=1-h)-i),n){default:case 6:case 0:o=t,u=a,l=i;break;case 1:o=a,u=t,l=i;break;case 2:o=i,u=t,l=a;break;case 3:o=i,u=a,l=t;break;case 4:o=a,u=i,l=t;break;case 5:o=t,u=i,l=a}return[255*o,255*u,255*l]},r.cmyk.rgb=function(e){var n=e[0]/100,t=e[1]/100,r=e[2]/100,a=e[3]/100;return[255*(1-Math.min(1,n*(1-a)+a)),255*(1-Math.min(1,t*(1-a)+a)),255*(1-Math.min(1,r*(1-a)+a))]},r.xyz.rgb=function(e){var n,t,r,a=e[0]/100,o=e[1]/100,u=e[2]/100;return t=-.9689*a+1.8758*o+.0415*u,r=.0557*a+-.204*o+1.057*u,n=(n=3.2406*a+-1.5372*o+-.4986*u)>.0031308?1.055*Math.pow(n,1/2.4)-.055:12.92*n,t=t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t,r=r>.0031308?1.055*Math.pow(r,1/2.4)-.055:12.92*r,[255*(n=Math.min(Math.max(0,n),1)),255*(t=Math.min(Math.max(0,t),1)),255*(r=Math.min(Math.max(0,r),1))]},r.xyz.lab=function(e){var n=e[0],t=e[1],r=e[2];return t/=100,r/=108.883,n=(n/=95.047)>.008856?Math.pow(n,1/3):7.787*n+16/116,[116*(t=t>.008856?Math.pow(t,1/3):7.787*t+16/116)-16,500*(n-t),200*(t-(r=r>.008856?Math.pow(r,1/3):7.787*r+16/116))]},r.lab.xyz=function(e){var n,t,r,a=e[0];n=e[1]/500+(t=(a+16)/116),r=t-e[2]/200;var o=Math.pow(t,3),u=Math.pow(n,3),l=Math.pow(r,3);return t=o>.008856?o:(t-16/116)/7.787,n=u>.008856?u:(n-16/116)/7.787,r=l>.008856?l:(r-16/116)/7.787,[n*=95.047,t*=100,r*=108.883]},r.lab.lch=function(e){var n,t=e[0],r=e[1],a=e[2];return(n=360*Math.atan2(a,r)/2/Math.PI)<0&&(n+=360),[t,Math.sqrt(r*r+a*a),n]},r.lch.lab=function(e){var n,t=e[0],r=e[1];return n=e[2]/360*2*Math.PI,[t,r*Math.cos(n),r*Math.sin(n)]},r.rgb.ansi16=function(e){var n=e[0],t=e[1],a=e[2],o=1 in arguments?arguments[1]:r.rgb.hsv(e)[2];if(0===(o=Math.round(o/50)))return 30;var u=30+(Math.round(a/255)<<2|Math.round(t/255)<<1|Math.round(n/255));return 2===o&&(u+=60),u},r.hsv.ansi16=function(e){return r.rgb.ansi16(r.hsv.rgb(e),e[2])},r.rgb.ansi256=function(e){var n=e[0],t=e[1],r=e[2];return n===t&&t===r?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5)},r.ansi16.rgb=function(e){var n=e%10;if(0===n||7===n)return e>50&&(n+=3.5),[n=n/10.5*255,n,n];var t=.5*(1+~~(e>50));return[(1&n)*t*255,(n>>1&1)*t*255,(n>>2&1)*t*255]},r.ansi256.rgb=function(e){if(e>=232){var n=10*(e-232)+8;return[n,n,n]}var t;return e-=16,[Math.floor(e/36)/5*255,Math.floor((t=e%36)/6)/5*255,t%6/5*255]},r.rgb.hex=function(e){var n=(((255&Math.round(e[0]))<<16)+((255&Math.round(e[1]))<<8)+(255&Math.round(e[2]))).toString(16).toUpperCase();return"000000".substring(n.length)+n},r.hex.rgb=function(e){var n=e.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!n)return[0,0,0];var t=n[0];3===n[0].length&&(t=t.split("").map((function(e){return e+e})).join(""));var r=parseInt(t,16);return[r>>16&255,r>>8&255,255&r]},r.rgb.hcg=function(e){var n,t=e[0]/255,r=e[1]/255,a=e[2]/255,o=Math.max(Math.max(t,r),a),u=Math.min(Math.min(t,r),a),l=o-u;return n=l<=0?0:o===t?(r-a)/l%6:o===r?2+(a-t)/l:4+(t-r)/l+4,n/=6,[360*(n%=1),100*l,100*(l<1?u/(1-l):0)]},r.hsl.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=1,a=0;return(r=t<.5?2*n*t:2*n*(1-t))<1&&(a=(t-.5*r)/(1-r)),[e[0],100*r,100*a]},r.hsv.hcg=function(e){var n=e[1]/100,t=e[2]/100,r=n*t,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.hcg.rgb=function(e){var n=e[0]/360,t=e[1]/100,r=e[2]/100;if(0===t)return[255*r,255*r,255*r];var a,o=[0,0,0],u=n%1*6,l=u%1,c=1-l;switch(Math.floor(u)){case 0:o[0]=1,o[1]=l,o[2]=0;break;case 1:o[0]=c,o[1]=1,o[2]=0;break;case 2:o[0]=0,o[1]=1,o[2]=l;break;case 3:o[0]=0,o[1]=c,o[2]=1;break;case 4:o[0]=l,o[1]=0,o[2]=1;break;default:o[0]=1,o[1]=0,o[2]=c}return a=(1-t)*r,[255*(t*o[0]+a),255*(t*o[1]+a),255*(t*o[2]+a)]},r.hcg.hsv=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n),r=0;return t>0&&(r=n/t),[e[0],100*r,100*t]},r.hcg.hsl=function(e){var n=e[1]/100,t=e[2]/100*(1-n)+.5*n,r=0;return t>0&&t<.5?r=n/(2*t):t>=.5&&t<1&&(r=n/(2*(1-t))),[e[0],100*r,100*t]},r.hcg.hwb=function(e){var n=e[1]/100,t=n+e[2]/100*(1-n);return[e[0],100*(t-n),100*(1-t)]},r.hwb.hcg=function(e){var n=e[1]/100,t=1-e[2]/100,r=t-n,a=0;return r<1&&(a=(t-r)/(1-r)),[e[0],100*r,100*a]},r.apple.rgb=function(e){return[e[0]/65535*255,e[1]/65535*255,e[2]/65535*255]},r.rgb.apple=function(e){return[e[0]/255*65535,e[1]/255*65535,e[2]/255*65535]},r.gray.rgb=function(e){return[e[0]/100*255,e[0]/100*255,e[0]/100*255]},r.gray.hsl=r.gray.hsv=function(e){return[0,0,e[0]]},r.gray.hwb=function(e){return[0,100,e[0]]},r.gray.cmyk=function(e){return[0,0,0,e[0]]},r.gray.lab=function(e){return[e[0],0,0]},r.gray.hex=function(e){var n=255&Math.round(e[0]/100*255),t=((n<<16)+(n<<8)+n).toString(16).toUpperCase();return"000000".substring(t.length)+t},r.rgb.gray=function(e){return[(e[0]+e[1]+e[2])/3/255*100]}}));function st(e){var n=function(){for(var e={},n=Object.keys(ht),t=n.length,r=0;r1&&(n=Array.prototype.slice.call(arguments));var t=e(n);if("object"==typeof t)for(var r=t.length,a=0;a1&&(n=Array.prototype.slice.call(arguments)),e(n))};return"conversion"in e&&(n.conversion=e.conversion),n}(r)}))}));var pt=dt,bt=[].slice,xt=["keyword","gray","hex"],gt={};Object.keys(pt).forEach((function(e){gt[bt.call(pt[e].labels).sort().join("")]=e}));var vt={};function yt(e,n){if(!(this instanceof yt))return new yt(e,n);if(n&&n in xt&&(n=null),n&&!(n in pt))throw new Error("Unknown model: "+n);var t,r;if(null==e)this.model="rgb",this.color=[0,0,0],this.valpha=1;else if(e instanceof yt)this.model=e.model,this.color=e.color.slice(),this.valpha=e.valpha;else if("string"==typeof e){var a=ct.get(e);if(null===a)throw new Error("Unable to parse color from string: "+e);this.model=a.model,r=pt[this.model].channels,this.color=a.value.slice(0,r),this.valpha="number"==typeof a.value[r]?a.value[r]:1}else if(e.length){this.model=n||"rgb",r=pt[this.model].channels;var o=bt.call(e,0,r);this.color=At(o,r),this.valpha="number"==typeof e[r]?e[r]:1}else if("number"==typeof e)e&=16777215,this.model="rgb",this.color=[e>>16&255,e>>8&255,255&e],this.valpha=1;else{this.valpha=1;var u=Object.keys(e);"alpha"in e&&(u.splice(u.indexOf("alpha"),1),this.valpha="number"==typeof e.alpha?e.alpha:0);var l=u.sort().join("");if(!(l in gt))throw new Error("Unable to parse color from object: "+JSON.stringify(e));this.model=gt[l];var c=pt[this.model].labels,i=[];for(t=0;tt?(n+.05)/(t+.05):(t+.05)/(n+.05)},level:function(e){var n=this.contrast(e);return n>=7.1?"AAA":n>=4.5?"AA":""},isDark:function(){var e=this.rgb().color;return(299*e[0]+587*e[1]+114*e[2])/1e3<128},isLight:function(){return!this.isDark()},negate:function(){for(var e=this.rgb(),n=0;n<3;n++)e.color[n]=255-e.color[n];return e},lighten:function(e){var n=this.hsl();return n.color[2]+=n.color[2]*e,n},darken:function(e){var n=this.hsl();return n.color[2]-=n.color[2]*e,n},saturate:function(e){var n=this.hsl();return n.color[1]+=n.color[1]*e,n},desaturate:function(e){var n=this.hsl();return n.color[1]-=n.color[1]*e,n},whiten:function(e){var n=this.hwb();return n.color[1]+=n.color[1]*e,n},blacken:function(e){var n=this.hwb();return n.color[2]+=n.color[2]*e,n},grayscale:function(){var e=this.rgb().color,n=.3*e[0]+.59*e[1]+.11*e[2];return yt.rgb(n,n,n)},fade:function(e){return this.alpha(this.valpha-this.valpha*e)},opaquer:function(e){return this.alpha(this.valpha+this.valpha*e)},rotate:function(e){var n=this.hsl(),t=n.color[0];return t=(t=(t+e)%360)<0?360+t:t,n.color[0]=t,n},mix:function(e,n){if(!e||!e.rgb)throw new Error('Argument to "mix" was not a Color instance, but rather an instance of '+typeof e);var t=e.rgb(),r=this.rgb(),a=void 0===n?.5:n,o=2*a-1,u=t.alpha()-r.alpha(),l=((o*u==-1?o:(o+u)/(1+o*u))+1)/2,c=1-l;return yt.rgb(l*t.red()+c*r.red(),l*t.green()+c*r.green(),l*t.blue()+c*r.blue(),t.alpha()*a+r.alpha()*(1-a))}},Object.keys(pt).forEach((function(e){if(-1===xt.indexOf(e)){var n=pt[e].channels;yt.prototype[e]=function(){if(this.model===e)return new yt(this);if(arguments.length)return new yt(arguments,e);var t,r="number"==typeof arguments[n]?n:this.valpha;return new yt((t=pt[this.model][e].raw(this.color),Array.isArray(t)?t:[t]).concat(r),e)},yt[e]=function(t){return"number"==typeof t&&(t=At(bt.call(arguments),n)),new yt(t,e)}}}));var Mt=yt,Ct={navy:{value:"#000080",nicer:"#001F3F"},blue:{value:"#0000ff",nicer:"#0074D9"},aqua:{value:"#00ffff",nicer:"#7FDBFF"},teal:{value:"#008080",nicer:"#39CCCC"},olive:{value:"#008000",nicer:"#3D9970"},green:{value:"#008000",nicer:"#2ECC40"},lime:{value:"#00ff00",nicer:"#01FF70"},yellow:{value:"#ffff00",nicer:"#FFDC00"},orange:{value:"#ffa500",nicer:"#FF851B"},red:{value:"#ff0000",nicer:"#FF4136"},maroon:{value:"#800000",nicer:"#85144B"},fuchsia:{value:"#ff00ff",nicer:"#F012BE"},purple:{value:"#800080",nicer:"#B10DC9"},silver:{value:"#c0c0c0",nicer:"#DDDDDD"},gray:{value:"#808080",nicer:"#AAAAAA"},black:{value:"#000000",nicer:"#111111"},white:{value:"#FFFFFF",nicer:"#FFFFFF"}};const jt=function(e,...n){let t,r,a;switch(n.length){case 0:return Fn(e);case 1:return[a]=n,qn(e,a);case 2:return[t,r]=n,qn(e,Cn(t,r))}},Et=function(e,n,t){const r=(x(a=e)?Pn:zn)(a);var a;switch(arguments.length){case 0:case 1:return r;case 2:t=n;case 3:return r.slice(n,t)}},Ot={},St=function(...e){1===e.length&&(e=e[0]);const n=St.options.context.templatePath.join("."),t=Ot[n]=Ot[n]||{index:0,array:e};return t.array[t.index++%t.array.length]};var Rt=[{hex:"#5c2223",name:"暗玉紫"},{hex:"#eea2a4",name:"牡丹粉红"},{hex:"#5a191b",name:"栗紫"},{hex:"#f07c82",name:"香叶红"},{hex:"#5a1216",name:"葡萄酱紫"},{hex:"#ed5a65",name:"艳红"},{hex:"#c04851",name:"玉红"},{hex:"#ee3f4d",name:"茶花红"},{hex:"#c02c38",name:"高粱红"},{hex:"#a7535a",name:"满江红"},{hex:"#e3b4b8",name:"鼠鼻红"},{hex:"#f0a1a8",name:"合欢红"},{hex:"#f1939c",name:"春梅红"},{hex:"#a61b29",name:"苋菜红"},{hex:"#894e54",name:"烟红"},{hex:"#c45a65",name:"莓红"},{hex:"#d11a2d",name:"鹅冠红"},{hex:"#c21f30",name:"枫叶红"},{hex:"#de1c31",name:"唐菖蒲红"},{hex:"#7c1823",name:"枣红"},{hex:"#541e24",name:"猪肝紫"},{hex:"#4c1f24",name:"葡萄紫"},{hex:"#82202b",name:"暗紫苑红"},{hex:"#82111f",name:"殷红"},{hex:"#ef475d",name:"草茉莉红"},{hex:"#4d1018",name:"酱紫"},{hex:"#ed556a",name:"山茶红"},{hex:"#7a7374",name:"锌灰"},{hex:"#f03752",name:"海棠红"},{hex:"#e6d2d5",name:"蓟粉红"},{hex:"#f0c9cf",name:"石蕊红"},{hex:"#ee2746",name:"淡曙红"},{hex:"#2b1216",name:"李紫"},{hex:"#ee4863",name:"石竹红"},{hex:"#e77c8e",name:"淡茜红"},{hex:"#500a16",name:"金鱼紫"},{hex:"#c27c88",name:"山黎豆红"},{hex:"#73575c",name:"鼠背灰"},{hex:"#ee4866",name:"淡蕊香红"},{hex:"#621624",name:"甘蔗紫"},{hex:"#ce5777",name:"月季红"},{hex:"#cc163a",name:"尖晶玉红"},{hex:"#f1c4cd",name:"水红"},{hex:"#eeb8c3",name:"姜红"},{hex:"#856d72",name:"芦灰"},{hex:"#2d0c13",name:"茄皮紫"},{hex:"#36282b",name:"苍蝇灰"},{hex:"#bf3553",name:"锦葵红"},{hex:"#ec9bad",name:"粉团花红"},{hex:"#63071c",name:"石竹紫"},{hex:"#30161c",name:"卵石紫"},{hex:"#eea6b7",name:"晶红"},{hex:"#e9ccd3",name:"芝兰紫"},{hex:"#eba0b3",name:"芍药耕红"},{hex:"#4f383e",name:"暮云灰"},{hex:"#ed9db2",name:"豇豆红"},{hex:"#ec8aa4",name:"报春红"},{hex:"#ec7696",name:"淡绛红"},{hex:"#ea7293",name:"凤仙花红"},{hex:"#ef82a0",name:"霞光红"},{hex:"#ec2c64",name:"喜蛋红"},{hex:"#eb507e",name:"夹竹桃红"},{hex:"#eb3c70",name:"松叶牡丹红"},{hex:"#ea517f",name:"莲瓣红"},{hex:"#de7897",name:"白芨红"},{hex:"#b598a1",name:"隐红灰"},{hex:"#ed2f6a",name:"榲桲红"},{hex:"#c5708b",name:"酢酱草红"},{hex:"#33141e",name:"火鹅紫"},{hex:"#621d34",name:"鹞冠紫"},{hex:"#ef3473",name:"品红"},{hex:"#382129",name:"磨石紫"},{hex:"#310f1b",name:"墨紫"},{hex:"#381924",name:"檀紫"},{hex:"#e16c96",name:"初荷红"},{hex:"#951c48",name:"菜头紫"},{hex:"#62102e",name:"葡萄酒红"},{hex:"#e0c8d1",name:"淡青紫"},{hex:"#d13c74",name:"菠根红"},{hex:"#4b1e2f",name:"海象紫"},{hex:"#ec4e8a",name:"兔眼红"},{hex:"#de3f7c",name:"嫩菱红"},{hex:"#a8456b",name:"洋葱紫"},{hex:"#ce5e8a",name:"吊钟花红"},{hex:"#461629",name:"绀紫"},{hex:"#ee2c79",name:"紫荆红"},{hex:"#ef498b",name:"扁豆花红"},{hex:"#ede3e7",name:"马鞭草紫"},{hex:"#ec2d7a",name:"藏花红"},{hex:"#482936",name:"斑鸠灰"},{hex:"#440e25",name:"古铜紫"},{hex:"#d2568c",name:"丹紫红"},{hex:"#e9d7df",name:"丁香淡紫"},{hex:"#d2357d",name:"玫瑰红"},{hex:"#36292f",name:"古鼎灰"},{hex:"#d276a3",name:"菱锰红"},{hex:"#c06f98",name:"樱草紫"},{hex:"#cc5595",name:"龙须红"},{hex:"#c35691",name:"电气石红"},{hex:"#ba2f7b",name:"玫瑰紫"},{hex:"#9b1e64",name:"苋菜紫"},{hex:"#5d3f51",name:"紫灰"},{hex:"#4e2a40",name:"龙睛鱼紫"},{hex:"#bc84a8",name:"青蛤壳紫"},{hex:"#c08eaf",name:"萝兰紫"},{hex:"#411c35",name:"荸荠紫"},{hex:"#ad6598",name:"豆蔻紫"},{hex:"#a35c8f",name:"扁豆紫"},{hex:"#681752",name:"牵牛紫"},{hex:"#894276",name:"芓紫"},{hex:"#7e2065",name:"葛巾紫"},{hex:"#8b2671",name:"青莲"},{hex:"#983680",name:"芥花紫"},{hex:"#c8adc4",name:"凤信紫"},{hex:"#1c0d1a",name:"深牵牛紫"},{hex:"#7e1671",name:"魏紫"},{hex:"#1e131d",name:"乌梅紫"},{hex:"#813c85",name:"桔梗紫"},{hex:"#d1c2d3",name:"淡牵牛紫"},{hex:"#3e3841",name:"剑锋紫"},{hex:"#815c94",name:"蕈紫"},{hex:"#806d9e",name:"槿紫"},{hex:"#e2e1e4",name:"芡食白"},{hex:"#322f3b",name:"龙葵紫"},{hex:"#8076a3",name:"藤萝紫"},{hex:"#35333c",name:"沙鱼灰"},{hex:"#22202e",name:"暗龙胆紫"},{hex:"#131124",name:"暗蓝紫"},{hex:"#302f4b",name:"野葡萄紫"},{hex:"#525288",name:"野菊紫"},{hex:"#2f2f35",name:"水牛灰"},{hex:"#ccccd6",name:"远山紫"},{hex:"#74759b",name:"螺甸紫"},{hex:"#1f2040",name:"晶石紫"},{hex:"#2e317c",name:"满天星紫"},{hex:"#a7a8bd",name:"淡蓝紫"},{hex:"#61649f",name:"山梗紫"},{hex:"#2d2e36",name:"牛角灰"},{hex:"#5e616d",name:"鱼尾灰"},{hex:"#47484c",name:"瓦罐灰"},{hex:"#0f1423",name:"钢蓝"},{hex:"#131824",name:"燕颔蓝"},{hex:"#475164",name:"鲸鱼灰"},{hex:"#2b333e",name:"青灰"},{hex:"#1c2938",name:"鸽蓝"},{hex:"#101f30",name:"暗蓝"},{hex:"#142334",name:"钢青"},{hex:"#15559a",name:"海涛蓝"},{hex:"#0f59a4",name:"飞燕草蓝"},{hex:"#1661ab",name:"靛青"},{hex:"#3170a7",name:"安安蓝"},{hex:"#346c9c",name:"海军蓝"},{hex:"#2775b6",name:"景泰蓝"},{hex:"#2b73af",name:"品蓝"},{hex:"#2474b5",name:"尼罗蓝"},{hex:"#4e7ca1",name:"蝶翅蓝"},{hex:"#2376b7",name:"花青"},{hex:"#144a74",name:"鷃蓝"},{hex:"#93b5cf",name:"星蓝"},{hex:"#2177b8",name:"虹蓝"},{hex:"#126bae",name:"柏林蓝"},{hex:"#1772b4",name:"群青"},{hex:"#baccd9",name:"云水蓝"},{hex:"#619ac3",name:"羽扇豆蓝"},{hex:"#495c69",name:"战舰灰"},{hex:"#8fb2c9",name:"晴山蓝"},{hex:"#5698c3",name:"睛蓝"},{hex:"#11659a",name:"搪磁蓝"},{hex:"#2983bb",name:"潮蓝"},{hex:"#1677b3",name:"天蓝"},{hex:"#c4cbcf",name:"大理石灰"},{hex:"#1177b0",name:"牵牛花蓝"},{hex:"#2486b9",name:"宝石蓝"},{hex:"#5e7987",name:"淡蓝灰"},{hex:"#74787a",name:"嫩灰"},{hex:"#cdd1d3",name:"银鱼白"},{hex:"#1781b5",name:"釉蓝"},{hex:"#66a9c9",name:"涧石蓝"},{hex:"#d0dfe6",name:"远天蓝"},{hex:"#2f90b9",name:"云山蓝"},{hex:"#8abcd1",name:"秋波蓝"},{hex:"#c3d7df",name:"井天蓝"},{hex:"#158bb8",name:"鸢尾蓝"},{hex:"#d8e3e7",name:"云峰白"},{hex:"#b2bbbe",name:"星灰"},{hex:"#1a94bc",name:"钴蓝"},{hex:"#5cb3cc",name:"碧青"},{hex:"#134857",name:"苍蓝"},{hex:"#132c33",name:"深灰蓝"},{hex:"#21373d",name:"灰蓝"},{hex:"#b0d5df",name:"湖水蓝"},{hex:"#22a2c3",name:"海青"},{hex:"#474b4c",name:"黄昏灰"},{hex:"#63bbd0",name:"霁青"},{hex:"#126e82",name:"玉鈫蓝"},{hex:"#0f95b0",name:"胆矾蓝"},{hex:"#1491a8",name:"樫鸟蓝"},{hex:"#c7d2d4",name:"鸥蓝"},{hex:"#1e9eb3",name:"翠蓝"},{hex:"#3b818c",name:"蜻蜓蓝"},{hex:"#0eb0c9",name:"孔雀蓝"},{hex:"#29b7cb",name:"蔚蓝"},{hex:"#51c4d3",name:"瀑布蓝"},{hex:"#7cabb1",name:"闪蓝"},{hex:"#10aec2",name:"甸子蓝"},{hex:"#648e93",name:"晚波蓝"},{hex:"#93d5dc",name:"清水蓝"},{hex:"#617172",name:"夏云灰"},{hex:"#c6e6e8",name:"海天蓝"},{hex:"#869d9d",name:"虾壳青"},{hex:"#57c3c2",name:"石绿"},{hex:"#c4d7d6",name:"穹灰"},{hex:"#12aa9c",name:"美蝶绿"},{hex:"#737c7b",name:"垩灰"},{hex:"#12a182",name:"蓝绿"},{hex:"#1ba784",name:"竹绿"},{hex:"#428675",name:"亚丁绿"},{hex:"#c0c4c3",name:"月影白"},{hex:"#248067",name:"海王绿"},{hex:"#1a3b32",name:"深海绿"},{hex:"#314a43",name:"绿灰"},{hex:"#2c9678",name:"青矾绿"},{hex:"#223e36",name:"苍绿"},{hex:"#497568",name:"飞泉绿"},{hex:"#141e1b",name:"莽丛绿"},{hex:"#69a794",name:"梧枝绿"},{hex:"#2bae85",name:"铜绿"},{hex:"#9abeaf",name:"草原远绿"},{hex:"#45b787",name:"蛙绿"},{hex:"#92b3a5",name:"浪花绿"},{hex:"#1f2623",name:"苷蓝绿"},{hex:"#83cbac",name:"粉绿"},{hex:"#70887d",name:"淡绿灰"},{hex:"#55bb8a",name:"麦苗绿"},{hex:"#20a162",name:"翠绿"},{hex:"#40a070",name:"葱绿"},{hex:"#1a6840",name:"荷叶绿"},{hex:"#61ac85",name:"淡绿"},{hex:"#68b88e",name:"田园绿"},{hex:"#a4cab6",name:"玉簪绿"},{hex:"#3c9566",name:"蟾绿"},{hex:"#5dbe8a",name:"蔻梢绿"},{hex:"#207f4c",name:"薄荷绿"},{hex:"#eef7f2",name:"月白"},{hex:"#579572",name:"蛋白石绿"},{hex:"#b9dec9",name:"竹篁绿"},{hex:"#229453",name:"孔雀绿"},{hex:"#20894d",name:"宫殿绿"},{hex:"#15231b",name:"云杉绿"},{hex:"#66c18c",name:"毛绿"},{hex:"#a4aca7",name:"冰山蓝"},{hex:"#8a988e",name:"明灰"},{hex:"#9eccab",name:"明绿"},{hex:"#83a78d",name:"松霜绿"},{hex:"#485b4d",name:"白屈菜绿"},{hex:"#5d655f",name:"狼烟灰"},{hex:"#6e8b74",name:"瓦松绿"},{hex:"#2b312c",name:"槲寄生绿"},{hex:"#c6dfc8",name:"淡翠绿"},{hex:"#41b349",name:"玉髓绿"},{hex:"#43b244",name:"鲜绿"},{hex:"#253d24",name:"油绿"},{hex:"#41ae3c",name:"宝石绿"},{hex:"#add5a2",name:"嘉陵水绿"},{hex:"#5e665b",name:"田螺绿"},{hex:"#8cc269",name:"水绿"},{hex:"#5bae23",name:"鹦鹉绿"},{hex:"#dfecd5",name:"艾背绿"},{hex:"#cad3c3",name:"艾绿"},{hex:"#9fa39a",name:"镍灰"},{hex:"#b2cf87",name:"橄榄石绿"},{hex:"#96c24e",name:"芽绿"},{hex:"#f0f5e5",name:"嫩菊绿"},{hex:"#b7d07a",name:"芦苇绿"},{hex:"#d0deaa",name:"姚黄"},{hex:"#373834",name:"蒽油绿"},{hex:"#bacf65",name:"苹果绿"},{hex:"#e2e7bf",name:"海沬绿"},{hex:"#bec936",name:"橄榄黄绿"},{hex:"#d2d97a",name:"槐花黄绿"},{hex:"#e2d849",name:"蝶黄"},{hex:"#fffef8",name:"象牙白"},{hex:"#5e5314",name:"橄榄绿"},{hex:"#fffef9",name:"雪白"},{hex:"#ad9e5f",name:"淡灰绿"},{hex:"#fed71a",name:"佛手黄"},{hex:"#f9f4dc",name:"乳白"},{hex:"#e4bf11",name:"香蕉黄"},{hex:"#d2b116",name:"新禾绿"},{hex:"#fbda41",name:"油菜花黄"},{hex:"#eed045",name:"秋葵黄"},{hex:"#f1ca17",name:"柚黄"},{hex:"#d2b42c",name:"草黄"},{hex:"#f2ce2b",name:"硫华黄"},{hex:"#e2c027",name:"姜黄"},{hex:"#645822",name:"潭水绿"},{hex:"#fcd217",name:"金瓜黄"},{hex:"#f8df70",name:"麦秆黄"},{hex:"#dfc243",name:"蒿黄"},{hex:"#f8df72",name:"茉莉黄"},{hex:"#ffd111",name:"藤黄"},{hex:"#ddc871",name:"芒果黄"},{hex:"#fffefa",name:"海参灰"},{hex:"#867018",name:"碧螺春绿"},{hex:"#887322",name:"苔绿"},{hex:"#fcd337",name:"柠檬黄"},{hex:"#8e804b",name:"草灰绿"},{hex:"#fecc11",name:"向日葵黄"},{hex:"#fccb16",name:"素馨黄"},{hex:"#ffc90c",name:"乳鸭黄"},{hex:"#b7ae8f",name:"月灰"},{hex:"#f8d86a",name:"葵扇黄"},{hex:"#fbcd31",name:"大豆黄"},{hex:"#fcc307",name:"金盏黄"},{hex:"#e9ddb6",name:"菊蕾白"},{hex:"#fcc515",name:"黄连黄"},{hex:"#f7e8aa",name:"杏仁黄"},{hex:"#e8b004",name:"谷黄"},{hex:"#f9c116",name:"木瓜黄"},{hex:"#f9d770",name:"淡茧黄"},{hex:"#fbc82f",name:"雅梨黄"},{hex:"#f1f0ed",name:"银白"},{hex:"#5b4913",name:"棕榈绿"},{hex:"#f6c430",name:"鹦鹉冠黄"},{hex:"#b78d12",name:"枯绿"},{hex:"#f9bd10",name:"浅烙黄"},{hex:"#f9d367",name:"淡密黄"},{hex:"#d9a40e",name:"芥黄"},{hex:"#ebb10d",name:"栀子黄"},{hex:"#584717",name:"暗海水绿"},{hex:"#f7de98",name:"篾黄"},{hex:"#f9f1db",name:"蚌肉白"},{hex:"#f4ce69",name:"炒米黄"},{hex:"#feba07",name:"琥珀黄"},{hex:"#8a6913",name:"灰绿"},{hex:"#876818",name:"粽叶绿"},{hex:"#b6a476",name:"尘灰"},{hex:"#fcb70a",name:"鼬黄"},{hex:"#f0d695",name:"象牙黄"},{hex:"#87723e",name:"鲛青"},{hex:"#f8e8c1",name:"豆汁黄"},{hex:"#d6a01d",name:"土黄"},{hex:"#f7da94",name:"香水玫瑰黄"},{hex:"#eaad1a",name:"虎皮黄"},{hex:"#fbb612",name:"鸡蛋黄"},{hex:"#b5aa90",name:"银鼠灰"},{hex:"#f7f4ed",name:"鱼肚白"},{hex:"#f8bc31",name:"初熟杏黄"},{hex:"#b78b26",name:"山鸡黄"},{hex:"#e5d3aa",name:"莲子白"},{hex:"#695e45",name:"蟹壳灰"},{hex:"#e5b751",name:"沙石黄"},{hex:"#f3bf4c",name:"甘草黄"},{hex:"#685e48",name:"燕羽灰"},{hex:"#fbb929",name:"鹅掌黄"},{hex:"#f9d27d",name:"麦芽糖黄"},{hex:"#e2c17c",name:"浅驼色"},{hex:"#b4a992",name:"百灵鸟灰"},{hex:"#f6dead",name:"酪黄"},{hex:"#f2e6ce",name:"荔肉白"},{hex:"#f8e0b0",name:"淡肉色"},{hex:"#393733",name:"河豚灰"},{hex:"#835e1d",name:"蜴蜊绿"},{hex:"#f8f4ed",name:"汉白玉"},{hex:"#fca104",name:"橙皮黄"},{hex:"#815f25",name:"莱阳梨黄"},{hex:"#fca106",name:"枇杷黄"},{hex:"#ffa60f",name:"金叶黄"},{hex:"#806332",name:"苍黄"},{hex:"#fbf2e3",name:"粉白"},{hex:"#fba414",name:"淡橘橙"},{hex:"#e4dfd7",name:"珍珠灰"},{hex:"#826b48",name:"龟背黄"},{hex:"#dad4cb",name:"浅灰"},{hex:"#bbb5ac",name:"铅灰"},{hex:"#bbb5ac",name:"中灰"},{hex:"#ff9900",name:"雄黄"},{hex:"#fbb957",name:"蜜黄"},{hex:"#dc9123",name:"风帆黄"},{hex:"#c09351",name:"桂皮淡棕"},{hex:"#f4a83a",name:"金莺黄"},{hex:"#f7c173",name:"肉色"},{hex:"#e7a23f",name:"凋叶棕"},{hex:"#533c1b",name:"古铜绿"},{hex:"#f9e8d0",name:"落英淡粉"},{hex:"#de9e44",name:"软木黄"},{hex:"#f9cb8b",name:"瓜瓤粉"},{hex:"#f9a633",name:"榴萼黄"},{hex:"#daa45a",name:"玳瑁黄"},{hex:"#553b18",name:"焦茶绿"},{hex:"#513c20",name:"蟹壳绿"},{hex:"#986524",name:"山鸡褐"},{hex:"#97846c",name:"猴毛灰"},{hex:"#e3bd8d",name:"鹿角棕"},{hex:"#4d4030",name:"淡松烟"},{hex:"#fb8b05",name:"万寿菊黄"},{hex:"#f8c387",name:"蛋壳黄"},{hex:"#f28e16",name:"杏黄"},{hex:"#503e2a",name:"橄榄灰"},{hex:"#4a4035",name:"鹤灰"},{hex:"#cfccc9",name:"玛瑙灰"},{hex:"#c1b2a3",name:"淡银灰"},{hex:"#867e76",name:"瓦灰"},{hex:"#847c74",name:"夜灰"},{hex:"#fc8c23",name:"北瓜黄"},{hex:"#fbecde",name:"荷花白"},{hex:"#4f4032",name:"松鼠灰"},{hex:"#fbeee2",name:"淡米粉"},{hex:"#81776e",name:"深灰"},{hex:"#9a8878",name:"海鸥灰"},{hex:"#5d3d21",name:"茶褐"},{hex:"#66462a",name:"驼色"},{hex:"#918072",name:"银灰"},{hex:"#d99156",name:"鹿皮褐"},{hex:"#c1651a",name:"槟榔综"},{hex:"#d4c4b7",name:"晓灰"},{hex:"#be7e4a",name:"淡赭"},{hex:"#5c3719",name:"古铜褐"},{hex:"#de7622",name:"麂棕"},{hex:"#db8540",name:"醉瓜肉"},{hex:"#80766e",name:"雁灰"},{hex:"#f09c5a",name:"鲑鱼红"},{hex:"#f97d1c",name:"橘橙"},{hex:"#f26b1f",name:"金黄"},{hex:"#f8b37f",name:"玫瑰粉"},{hex:"#fa7e23",name:"美人焦橙"},{hex:"#f9e9cd",name:"米色"},{hex:"#b7a091",name:"蛛网灰"},{hex:"#945833",name:"淡咖啡"},{hex:"#f0945d",name:"海螺橙"},{hex:"#964d22",name:"岩石棕"},{hex:"#954416",name:"芒果棕"},{hex:"#e16723",name:"陶瓷红"},{hex:"#fc7930",name:"菠萝红"},{hex:"#cf7543",name:"余烬红"},{hex:"#f86b1d",name:"金莲花橙"},{hex:"#cd6227",name:"火砖红"},{hex:"#f6dcce",name:"初桃粉红"},{hex:"#d85916",name:"铁棕"},{hex:"#f7cfba",name:"介壳淡粉红"},{hex:"#f27635",name:"蟹壳红"},{hex:"#e46828",name:"金驼"},{hex:"#fc6315",name:"燕颔红"},{hex:"#b7511d",name:"淡可可棕"},{hex:"#ea8958",name:"晨曦红"},{hex:"#e8b49a",name:"玉粉红"},{hex:"#fb9968",name:"野蔷薇红"},{hex:"#edc3ae",name:"藕荷"},{hex:"#363433",name:"长石灰"},{hex:"#8b614d",name:"中红灰"},{hex:"#aa6a4c",name:"火泥棕"},{hex:"#a6522c",name:"绀红"},{hex:"#fa5d19",name:"莓酱红"},{hex:"#71361d",name:"丁香棕"},{hex:"#b89485",name:"淡玫瑰灰"},{hex:"#f68c60",name:"瓜瓤红"},{hex:"#f6ad8f",name:"淡藏花红"},{hex:"#732e12",name:"筍皮棕"},{hex:"#f7cdbc",name:"润红"},{hex:"#ef632b",name:"龙睛鱼红"},{hex:"#8c4b31",name:"淡土黄"},{hex:"#64483d",name:"珠母灰"},{hex:"#f9723d",name:"芙蓉红"},{hex:"#cf4813",name:"落霞红"},{hex:"#ee8055",name:"法螺红"},{hex:"#f8ebe6",name:"草珠红"},{hex:"#753117",name:"咖啡"},{hex:"#603d30",name:"中灰驼"},{hex:"#883a1e",name:"椰壳棕"},{hex:"#b14b28",name:"蟹蝥红"},{hex:"#873d24",name:"淡豆沙"},{hex:"#f6cec1",name:"淡桃红"},{hex:"#5b423a",name:"淡铁灰"},{hex:"#624941",name:"石板灰"},{hex:"#673424",name:"淡栗棕"},{hex:"#f43e06",name:"银朱"},{hex:"#ef6f48",name:"草莓红"},{hex:"#f4c7ba",name:"洋水仙红"},{hex:"#ed5126",name:"朱红"},{hex:"#f34718",name:"榴花红"},{hex:"#f2481b",name:"柿红"},{hex:"#652b1c",name:"可可棕"},{hex:"#eea08c",name:"淡罂粟红"},{hex:"#f04b22",name:"大红"},{hex:"#692a1b",name:"柞叶棕"},{hex:"#f1441d",name:"蜻蜓红"},{hex:"#773d31",name:"橡树棕"},{hex:"#eeaa9c",name:"颊红"},{hex:"#f0ada0",name:"桃红"},{hex:"#863020",name:"火岩棕"},{hex:"#f2e7e5",name:"淡藤萝紫"},{hex:"#862617",name:"赭石"},{hex:"#f5391c",name:"铁水红"},{hex:"#f03f24",name:"胭脂红"},{hex:"#f33b1f",name:"极光红"},{hex:"#f23e23",name:"红汞红"},{hex:"#f13c22",name:"萝卜红"},{hex:"#f05a46",name:"曲红"},{hex:"#f17666",name:"谷鞘红"},{hex:"#f15642",name:"苹果红"},{hex:"#f25a47",name:"桂红"},{hex:"#f2b9b2",name:"粉红"},{hex:"#592620",name:"暗驼棕"},{hex:"#de2a18",name:"夕阳红"},{hex:"#ed3321",name:"樱桃红"},{hex:"#f04a3a",name:"珊瑚红"},{hex:"#482522",name:"火山棕"},{hex:"#5c1e19",name:"栗棕"},{hex:"#d42517",name:"鹤顶红"},{hex:"#f19790",name:"舌红"},{hex:"#ab372f",name:"鹅血石红"},{hex:"#5a1f1b",name:"酱棕"},{hex:"#ed3b2f",name:"鱼鳃红"},{hex:"#bdaead",name:"芦穗灰"},{hex:"#eb261a",name:"丽春红"},{hex:"#ac1f18",name:"覆盆子红"},{hex:"#483332",name:"海报灰"},{hex:"#481e1c",name:"豆沙"},{hex:"#f1908c",name:"榴子红"},{hex:"#ec2b24",name:"秋海棠红"},{hex:"#efafad",name:"无花果红"},{hex:"#f2cac9",name:"淡绯"},{hex:"#4b2e2b",name:"玫瑰灰"},{hex:"#ed4845",name:"淡菽红"},{hex:"#ed3333",name:"枸枢红"},{hex:"#5d3131",name:"貂紫"}];let Tt;function Ft(e,n){return Tt=Tt||Math.random(),Tt+=.618033988749895,Tt%=1,"number"!=typeof e&&(e=.5),"number"!=typeof n&&(n=.95),Mt.hsv(360*Tt,100*e,100*n)}function _t(){return Ft().hex()}var $t={firstName:{male:["James","John","Robert","Michael","William","David","Richard","Charles","Joseph","Thomas","Christopher","Daniel","Paul","Mark","Donald","George","Kenneth","Steven","Edward","Brian","Ronald","Anthony","Kevin","Jason","Matthew","Gary","Timothy","Jose","Larry","Jeffrey","Frank","Scott","Eric"],female:["Mary","Patricia","Linda","Barbara","Elizabeth","Jennifer","Maria","Susan","Margaret","Dorothy","Lisa","Nancy","Karen","Betty","Helen","Sandra","Donna","Carol","Ruth","Sharon","Michelle","Laura","Sarah","Kimberly","Deborah","Jessica","Shirley","Cynthia","Angela","Melissa","Brenda","Amy","Anna"]},lastName:["Smith","Johnson","Williams","Brown","Jones","Miller","Davis","Garcia","Rodriguez","Wilson","Martinez","Anderson","Taylor","Thomas","Hernandez","Moore","Martin","Jackson","Thompson","White","Lopez","Lee","Gonzalez","Harris","Clark","Lewis","Robinson","Walker","Perez","Hall","Young","Allen"],cfirstName:["王","李","张","刘","陈","杨","赵","黄","周","吴","徐","孙","胡","朱","高","林","何","郭","马","罗","梁","宋","郑","谢","韩","唐","冯","于","董","萧","程","曹","袁","邓","许","傅","沈","曾","彭","吕","苏","卢","蒋","蔡","贾","丁","魏","薛","叶","阎","余","潘","杜","戴","夏","锺","汪","田","任","姜","范","方","石","姚","谭","廖","邹","熊","金","陆","郝","孔","白","崔","康","毛","邱","秦","江","史","顾","侯","邵","孟","龙","万","段","雷","钱","汤","尹","黎","易","常","武","乔","贺","赖","龚","文"],clastName:["伟","芳","娜","秀英","敏","静","丽","强","磊","军","洋","勇","艳","杰","娟","涛","明","超","秀兰","霞","平","刚","桂英"]};const{firstName:Dt,lastName:qt,cfirstName:Pt,clastName:zt}=$t;function Lt(){const e=Dt.male.concat();return jt(e)}function Ht(){return jt(qt)}function Nt(){return jt(Pt)}function Bt(){return jt(zt)}var It,Ut=new Uint8Array(16);function Gt(){if(!It&&!(It="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||"undefined"!=typeof msCrypto&&"function"==typeof msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto)))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return It(Ut)}var Wt=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i;for(var Jt=[],Kt=0;Kt<256;++Kt)Jt.push((Kt+256).toString(16).substr(1));function Yt(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,t=(Jt[e[n+0]]+Jt[e[n+1]]+Jt[e[n+2]]+Jt[e[n+3]]+"-"+Jt[e[n+4]]+Jt[e[n+5]]+"-"+Jt[e[n+6]]+Jt[e[n+7]]+"-"+Jt[e[n+8]]+Jt[e[n+9]]+"-"+Jt[e[n+10]]+Jt[e[n+11]]+Jt[e[n+12]]+Jt[e[n+13]]+Jt[e[n+14]]+Jt[e[n+15]]).toLowerCase();if(!function(e){return"string"==typeof e&&Wt.test(e)}(t))throw TypeError("Stringified UUID is invalid");return t}function Vt(e,n,t){var r=(e=e||{}).random||(e.rng||Gt)();if(r[6]=15&r[6]|64,r[8]=63&r[8]|128,n){t=t||0;for(var a=0;a<16;++a)n[t+a]=r[a];return n}return Yt(r)}var Xt={11e4:"北京",110100:"北京市",110101:"东城区",110102:"西城区",110105:"朝阳区",110106:"丰台区",110107:"石景山区",110108:"海淀区",110109:"门头沟区",110111:"房山区",110112:"通州区",110113:"顺义区",110114:"昌平区",110115:"大兴区",110116:"怀柔区",110117:"平谷区",110228:"密云县",110229:"延庆县",110230:"其它区",12e4:"天津",120100:"天津市",120101:"和平区",120102:"河东区",120103:"河西区",120104:"南开区",120105:"河北区",120106:"红桥区",120110:"东丽区",120111:"西青区",120112:"津南区",120113:"北辰区",120114:"武清区",120115:"宝坻区",120116:"滨海新区",120221:"宁河县",120223:"静海县",120225:"蓟县",120226:"其它区",13e4:"河北省",130100:"石家庄市",130102:"长安区",130103:"桥东区",130104:"桥西区",130105:"新华区",130107:"井陉矿区",130108:"裕华区",130121:"井陉县",130123:"正定县",130124:"栾城县",130125:"行唐县",130126:"灵寿县",130127:"高邑县",130128:"深泽县",130129:"赞皇县",130130:"无极县",130131:"平山县",130132:"元氏县",130133:"赵县",130181:"辛集市",130182:"藁城市",130183:"晋州市",130184:"新乐市",130185:"鹿泉市",130186:"其它区",130200:"唐山市",130202:"路南区",130203:"路北区",130204:"古冶区",130205:"开平区",130207:"丰南区",130208:"丰润区",130223:"滦县",130224:"滦南县",130225:"乐亭县",130227:"迁西县",130229:"玉田县",130230:"曹妃甸区",130281:"遵化市",130283:"迁安市",130284:"其它区",130300:"秦皇岛市",130302:"海港区",130303:"山海关区",130304:"北戴河区",130321:"青龙满族自治县",130322:"昌黎县",130323:"抚宁县",130324:"卢龙县",130398:"其它区",130400:"邯郸市",130402:"邯山区",130403:"丛台区",130404:"复兴区",130406:"峰峰矿区",130421:"邯郸县",130423:"临漳县",130424:"成安县",130425:"大名县",130426:"涉县",130427:"磁县",130428:"肥乡县",130429:"永年县",130430:"邱县",130431:"鸡泽县",130432:"广平县",130433:"馆陶县",130434:"魏县",130435:"曲周县",130481:"武安市",130482:"其它区",130500:"邢台市",130502:"桥东区",130503:"桥西区",130521:"邢台县",130522:"临城县",130523:"内丘县",130524:"柏乡县",130525:"隆尧县",130526:"任县",130527:"南和县",130528:"宁晋县",130529:"巨鹿县",130530:"新河县",130531:"广宗县",130532:"平乡县",130533:"威县",130534:"清河县",130535:"临西县",130581:"南宫市",130582:"沙河市",130583:"其它区",130600:"保定市",130602:"新市区",130603:"北市区",130604:"南市区",130621:"满城县",130622:"清苑县",130623:"涞水县",130624:"阜平县",130625:"徐水县",130626:"定兴县",130627:"唐县",130628:"高阳县",130629:"容城县",130630:"涞源县",130631:"望都县",130632:"安新县",130633:"易县",130634:"曲阳县",130635:"蠡县",130636:"顺平县",130637:"博野县",130638:"雄县",130681:"涿州市",130682:"定州市",130683:"安国市",130684:"高碑店市",130699:"其它区",130700:"张家口市",130702:"桥东区",130703:"桥西区",130705:"宣化区",130706:"下花园区",130721:"宣化县",130722:"张北县",130723:"康保县",130724:"沽源县",130725:"尚义县",130726:"蔚县",130727:"阳原县",130728:"怀安县",130729:"万全县",130730:"怀来县",130731:"涿鹿县",130732:"赤城县",130733:"崇礼县",130734:"其它区",130800:"承德市",130802:"双桥区",130803:"双滦区",130804:"鹰手营子矿区",130821:"承德县",130822:"兴隆县",130823:"平泉县",130824:"滦平县",130825:"隆化县",130826:"丰宁满族自治县",130827:"宽城满族自治县",130828:"围场满族蒙古族自治县",130829:"其它区",130900:"沧州市",130902:"新华区",130903:"运河区",130921:"沧县",130922:"青县",130923:"东光县",130924:"海兴县",130925:"盐山县",130926:"肃宁县",130927:"南皮县",130928:"吴桥县",130929:"献县",130930:"孟村回族自治县",130981:"泊头市",130982:"任丘市",130983:"黄骅市",130984:"河间市",130985:"其它区",131e3:"廊坊市",131002:"安次区",131003:"广阳区",131022:"固安县",131023:"永清县",131024:"香河县",131025:"大城县",131026:"文安县",131028:"大厂回族自治县",131081:"霸州市",131082:"三河市",131083:"其它区",131100:"衡水市",131102:"桃城区",131121:"枣强县",131122:"武邑县",131123:"武强县",131124:"饶阳县",131125:"安平县",131126:"故城县",131127:"景县",131128:"阜城县",131181:"冀州市",131182:"深州市",131183:"其它区",14e4:"山西省",140100:"太原市",140105:"小店区",140106:"迎泽区",140107:"杏花岭区",140108:"尖草坪区",140109:"万柏林区",140110:"晋源区",140121:"清徐县",140122:"阳曲县",140123:"娄烦县",140181:"古交市",140182:"其它区",140200:"大同市",140202:"城区",140203:"矿区",140211:"南郊区",140212:"新荣区",140221:"阳高县",140222:"天镇县",140223:"广灵县",140224:"灵丘县",140225:"浑源县",140226:"左云县",140227:"大同县",140228:"其它区",140300:"阳泉市",140302:"城区",140303:"矿区",140311:"郊区",140321:"平定县",140322:"盂县",140323:"其它区",140400:"长治市",140421:"长治县",140423:"襄垣县",140424:"屯留县",140425:"平顺县",140426:"黎城县",140427:"壶关县",140428:"长子县",140429:"武乡县",140430:"沁县",140431:"沁源县",140481:"潞城市",140482:"城区",140483:"郊区",140485:"其它区",140500:"晋城市",140502:"城区",140521:"沁水县",140522:"阳城县",140524:"陵川县",140525:"泽州县",140581:"高平市",140582:"其它区",140600:"朔州市",140602:"朔城区",140603:"平鲁区",140621:"山阴县",140622:"应县",140623:"右玉县",140624:"怀仁县",140625:"其它区",140700:"晋中市",140702:"榆次区",140721:"榆社县",140722:"左权县",140723:"和顺县",140724:"昔阳县",140725:"寿阳县",140726:"太谷县",140727:"祁县",140728:"平遥县",140729:"灵石县",140781:"介休市",140782:"其它区",140800:"运城市",140802:"盐湖区",140821:"临猗县",140822:"万荣县",140823:"闻喜县",140824:"稷山县",140825:"新绛县",140826:"绛县",140827:"垣曲县",140828:"夏县",140829:"平陆县",140830:"芮城县",140881:"永济市",140882:"河津市",140883:"其它区",140900:"忻州市",140902:"忻府区",140921:"定襄县",140922:"五台县",140923:"代县",140924:"繁峙县",140925:"宁武县",140926:"静乐县",140927:"神池县",140928:"五寨县",140929:"岢岚县",140930:"河曲县",140931:"保德县",140932:"偏关县",140981:"原平市",140982:"其它区",141e3:"临汾市",141002:"尧都区",141021:"曲沃县",141022:"翼城县",141023:"襄汾县",141024:"洪洞县",141025:"古县",141026:"安泽县",141027:"浮山县",141028:"吉县",141029:"乡宁县",141030:"大宁县",141031:"隰县",141032:"永和县",141033:"蒲县",141034:"汾西县",141081:"侯马市",141082:"霍州市",141083:"其它区",141100:"吕梁市",141102:"离石区",141121:"文水县",141122:"交城县",141123:"兴县",141124:"临县",141125:"柳林县",141126:"石楼县",141127:"岚县",141128:"方山县",141129:"中阳县",141130:"交口县",141181:"孝义市",141182:"汾阳市",141183:"其它区",15e4:"内蒙古自治区",150100:"呼和浩特市",150102:"新城区",150103:"回民区",150104:"玉泉区",150105:"赛罕区",150121:"土默特左旗",150122:"托克托县",150123:"和林格尔县",150124:"清水河县",150125:"武川县",150126:"其它区",150200:"包头市",150202:"东河区",150203:"昆都仑区",150204:"青山区",150205:"石拐区",150206:"白云鄂博矿区",150207:"九原区",150221:"土默特右旗",150222:"固阳县",150223:"达尔罕茂明安联合旗",150224:"其它区",150300:"乌海市",150302:"海勃湾区",150303:"海南区",150304:"乌达区",150305:"其它区",150400:"赤峰市",150402:"红山区",150403:"元宝山区",150404:"松山区",150421:"阿鲁科尔沁旗",150422:"巴林左旗",150423:"巴林右旗",150424:"林西县",150425:"克什克腾旗",150426:"翁牛特旗",150428:"喀喇沁旗",150429:"宁城县",150430:"敖汉旗",150431:"其它区",150500:"通辽市",150502:"科尔沁区",150521:"科尔沁左翼中旗",150522:"科尔沁左翼后旗",150523:"开鲁县",150524:"库伦旗",150525:"奈曼旗",150526:"扎鲁特旗",150581:"霍林郭勒市",150582:"其它区",150600:"鄂尔多斯市",150602:"东胜区",150621:"达拉特旗",150622:"准格尔旗",150623:"鄂托克前旗",150624:"鄂托克旗",150625:"杭锦旗",150626:"乌审旗",150627:"伊金霍洛旗",150628:"其它区",150700:"呼伦贝尔市",150702:"海拉尔区",150703:"扎赉诺尔区",150721:"阿荣旗",150722:"莫力达瓦达斡尔族自治旗",150723:"鄂伦春自治旗",150724:"鄂温克族自治旗",150725:"陈巴尔虎旗",150726:"新巴尔虎左旗",150727:"新巴尔虎右旗",150781:"满洲里市",150782:"牙克石市",150783:"扎兰屯市",150784:"额尔古纳市",150785:"根河市",150786:"其它区",150800:"巴彦淖尔市",150802:"临河区",150821:"五原县",150822:"磴口县",150823:"乌拉特前旗",150824:"乌拉特中旗",150825:"乌拉特后旗",150826:"杭锦后旗",150827:"其它区",150900:"乌兰察布市",150902:"集宁区",150921:"卓资县",150922:"化德县",150923:"商都县",150924:"兴和县",150925:"凉城县",150926:"察哈尔右翼前旗",150927:"察哈尔右翼中旗",150928:"察哈尔右翼后旗",150929:"四子王旗",150981:"丰镇市",150982:"其它区",152200:"兴安盟",152201:"乌兰浩特市",152202:"阿尔山市",152221:"科尔沁右翼前旗",152222:"科尔沁右翼中旗",152223:"扎赉特旗",152224:"突泉县",152225:"其它区",152500:"锡林郭勒盟",152501:"二连浩特市",152502:"锡林浩特市",152522:"阿巴嘎旗",152523:"苏尼特左旗",152524:"苏尼特右旗",152525:"东乌珠穆沁旗",152526:"西乌珠穆沁旗",152527:"太仆寺旗",152528:"镶黄旗",152529:"正镶白旗",152530:"正蓝旗",152531:"多伦县",152532:"其它区",152900:"阿拉善盟",152921:"阿拉善左旗",152922:"阿拉善右旗",152923:"额济纳旗",152924:"其它区",21e4:"辽宁省",210100:"沈阳市",210102:"和平区",210103:"沈河区",210104:"大东区",210105:"皇姑区",210106:"铁西区",210111:"苏家屯区",210112:"东陵区",210113:"新城子区",210114:"于洪区",210122:"辽中县",210123:"康平县",210124:"法库县",210181:"新民市",210184:"沈北新区",210185:"其它区",210200:"大连市",210202:"中山区",210203:"西岗区",210204:"沙河口区",210211:"甘井子区",210212:"旅顺口区",210213:"金州区",210224:"长海县",210281:"瓦房店市",210282:"普兰店市",210283:"庄河市",210298:"其它区",210300:"鞍山市",210302:"铁东区",210303:"铁西区",210304:"立山区",210311:"千山区",210321:"台安县",210323:"岫岩满族自治县",210381:"海城市",210382:"其它区",210400:"抚顺市",210402:"新抚区",210403:"东洲区",210404:"望花区",210411:"顺城区",210421:"抚顺县",210422:"新宾满族自治县",210423:"清原满族自治县",210424:"其它区",210500:"本溪市",210502:"平山区",210503:"溪湖区",210504:"明山区",210505:"南芬区",210521:"本溪满族自治县",210522:"桓仁满族自治县",210523:"其它区",210600:"丹东市",210602:"元宝区",210603:"振兴区",210604:"振安区",210624:"宽甸满族自治县",210681:"东港市",210682:"凤城市",210683:"其它区",210700:"锦州市",210702:"古塔区",210703:"凌河区",210711:"太和区",210726:"黑山县",210727:"义县",210781:"凌海市",210782:"北镇市",210783:"其它区",210800:"营口市",210802:"站前区",210803:"西市区",210804:"鲅鱼圈区",210811:"老边区",210881:"盖州市",210882:"大石桥市",210883:"其它区",210900:"阜新市",210902:"海州区",210903:"新邱区",210904:"太平区",210905:"清河门区",210911:"细河区",210921:"阜新蒙古族自治县",210922:"彰武县",210923:"其它区",211e3:"辽阳市",211002:"白塔区",211003:"文圣区",211004:"宏伟区",211005:"弓长岭区",211011:"太子河区",211021:"辽阳县",211081:"灯塔市",211082:"其它区",211100:"盘锦市",211102:"双台子区",211103:"兴隆台区",211121:"大洼县",211122:"盘山县",211123:"其它区",211200:"铁岭市",211202:"银州区",211204:"清河区",211221:"铁岭县",211223:"西丰县",211224:"昌图县",211281:"调兵山市",211282:"开原市",211283:"其它区",211300:"朝阳市",211302:"双塔区",211303:"龙城区",211321:"朝阳县",211322:"建平县",211324:"喀喇沁左翼蒙古族自治县",211381:"北票市",211382:"凌源市",211383:"其它区",211400:"葫芦岛市",211402:"连山区",211403:"龙港区",211404:"南票区",211421:"绥中县",211422:"建昌县",211481:"兴城市",211482:"其它区",22e4:"吉林省",220100:"长春市",220102:"南关区",220103:"宽城区",220104:"朝阳区",220105:"二道区",220106:"绿园区",220112:"双阳区",220122:"农安县",220181:"九台市",220182:"榆树市",220183:"德惠市",220188:"其它区",220200:"吉林市",220202:"昌邑区",220203:"龙潭区",220204:"船营区",220211:"丰满区",220221:"永吉县",220281:"蛟河市",220282:"桦甸市",220283:"舒兰市",220284:"磐石市",220285:"其它区",220300:"四平市",220302:"铁西区",220303:"铁东区",220322:"梨树县",220323:"伊通满族自治县",220381:"公主岭市",220382:"双辽市",220383:"其它区",220400:"辽源市",220402:"龙山区",220403:"西安区",220421:"东丰县",220422:"东辽县",220423:"其它区",220500:"通化市",220502:"东昌区",220503:"二道江区",220521:"通化县",220523:"辉南县",220524:"柳河县",220581:"梅河口市",220582:"集安市",220583:"其它区",220600:"白山市",220602:"浑江区",220621:"抚松县",220622:"靖宇县",220623:"长白朝鲜族自治县",220625:"江源区",220681:"临江市",220682:"其它区",220700:"松原市",220702:"宁江区",220721:"前郭尔罗斯蒙古族自治县",220722:"长岭县",220723:"乾安县",220724:"扶余市",220725:"其它区",220800:"白城市",220802:"洮北区",220821:"镇赉县",220822:"通榆县",220881:"洮南市",220882:"大安市",220883:"其它区",222400:"延边朝鲜族自治州",222401:"延吉市",222402:"图们市",222403:"敦化市",222404:"珲春市",222405:"龙井市",222406:"和龙市",222424:"汪清县",222426:"安图县",222427:"其它区",23e4:"黑龙江省",230100:"哈尔滨市",230102:"道里区",230103:"南岗区",230104:"道外区",230106:"香坊区",230108:"平房区",230109:"松北区",230111:"呼兰区",230123:"依兰县",230124:"方正县",230125:"宾县",230126:"巴彦县",230127:"木兰县",230128:"通河县",230129:"延寿县",230181:"阿城区",230182:"双城市",230183:"尚志市",230184:"五常市",230186:"其它区",230200:"齐齐哈尔市",230202:"龙沙区",230203:"建华区",230204:"铁锋区",230205:"昂昂溪区",230206:"富拉尔基区",230207:"碾子山区",230208:"梅里斯达斡尔族区",230221:"龙江县",230223:"依安县",230224:"泰来县",230225:"甘南县",230227:"富裕县",230229:"克山县",230230:"克东县",230231:"拜泉县",230281:"讷河市",230282:"其它区",230300:"鸡西市",230302:"鸡冠区",230303:"恒山区",230304:"滴道区",230305:"梨树区",230306:"城子河区",230307:"麻山区",230321:"鸡东县",230381:"虎林市",230382:"密山市",230383:"其它区",230400:"鹤岗市",230402:"向阳区",230403:"工农区",230404:"南山区",230405:"兴安区",230406:"东山区",230407:"兴山区",230421:"萝北县",230422:"绥滨县",230423:"其它区",230500:"双鸭山市",230502:"尖山区",230503:"岭东区",230505:"四方台区",230506:"宝山区",230521:"集贤县",230522:"友谊县",230523:"宝清县",230524:"饶河县",230525:"其它区",230600:"大庆市",230602:"萨尔图区",230603:"龙凤区",230604:"让胡路区",230605:"红岗区",230606:"大同区",230621:"肇州县",230622:"肇源县",230623:"林甸县",230624:"杜尔伯特蒙古族自治县",230625:"其它区",230700:"伊春市",230702:"伊春区",230703:"南岔区",230704:"友好区",230705:"西林区",230706:"翠峦区",230707:"新青区",230708:"美溪区",230709:"金山屯区",230710:"五营区",230711:"乌马河区",230712:"汤旺河区",230713:"带岭区",230714:"乌伊岭区",230715:"红星区",230716:"上甘岭区",230722:"嘉荫县",230781:"铁力市",230782:"其它区",230800:"佳木斯市",230803:"向阳区",230804:"前进区",230805:"东风区",230811:"郊区",230822:"桦南县",230826:"桦川县",230828:"汤原县",230833:"抚远县",230881:"同江市",230882:"富锦市",230883:"其它区",230900:"七台河市",230902:"新兴区",230903:"桃山区",230904:"茄子河区",230921:"勃利县",230922:"其它区",231e3:"牡丹江市",231002:"东安区",231003:"阳明区",231004:"爱民区",231005:"西安区",231024:"东宁县",231025:"林口县",231081:"绥芬河市",231083:"海林市",231084:"宁安市",231085:"穆棱市",231086:"其它区",231100:"黑河市",231102:"爱辉区",231121:"嫩江县",231123:"逊克县",231124:"孙吴县",231181:"北安市",231182:"五大连池市",231183:"其它区",231200:"绥化市",231202:"北林区",231221:"望奎县",231222:"兰西县",231223:"青冈县",231224:"庆安县",231225:"明水县",231226:"绥棱县",231281:"安达市",231282:"肇东市",231283:"海伦市",231284:"其它区",232700:"大兴安岭地区",232702:"松岭区",232703:"新林区",232704:"呼中区",232721:"呼玛县",232722:"塔河县",232723:"漠河县",232724:"加格达奇区",232725:"其它区",31e4:"上海",310100:"上海市",310101:"黄浦区",310104:"徐汇区",310105:"长宁区",310106:"静安区",310107:"普陀区",310108:"闸北区",310109:"虹口区",310110:"杨浦区",310112:"闵行区",310113:"宝山区",310114:"嘉定区",310115:"浦东新区",310116:"金山区",310117:"松江区",310118:"青浦区",310120:"奉贤区",310230:"崇明县",310231:"其它区",32e4:"江苏省",320100:"南京市",320102:"玄武区",320104:"秦淮区",320105:"建邺区",320106:"鼓楼区",320111:"浦口区",320113:"栖霞区",320114:"雨花台区",320115:"江宁区",320116:"六合区",320124:"溧水区",320125:"高淳区",320126:"其它区",320200:"无锡市",320202:"崇安区",320203:"南长区",320204:"北塘区",320205:"锡山区",320206:"惠山区",320211:"滨湖区",320281:"江阴市",320282:"宜兴市",320297:"其它区",320300:"徐州市",320302:"鼓楼区",320303:"云龙区",320305:"贾汪区",320311:"泉山区",320321:"丰县",320322:"沛县",320323:"铜山区",320324:"睢宁县",320381:"新沂市",320382:"邳州市",320383:"其它区",320400:"常州市",320402:"天宁区",320404:"钟楼区",320405:"戚墅堰区",320411:"新北区",320412:"武进区",320481:"溧阳市",320482:"金坛市",320483:"其它区",320500:"苏州市",320505:"虎丘区",320506:"吴中区",320507:"相城区",320508:"姑苏区",320581:"常熟市",320582:"张家港市",320583:"昆山市",320584:"吴江区",320585:"太仓市",320596:"其它区",320600:"南通市",320602:"崇川区",320611:"港闸区",320612:"通州区",320621:"海安县",320623:"如东县",320681:"启东市",320682:"如皋市",320684:"海门市",320694:"其它区",320700:"连云港市",320703:"连云区",320705:"新浦区",320706:"海州区",320721:"赣榆县",320722:"东海县",320723:"灌云县",320724:"灌南县",320725:"其它区",320800:"淮安市",320802:"清河区",320803:"淮安区",320804:"淮阴区",320811:"清浦区",320826:"涟水县",320829:"洪泽县",320830:"盱眙县",320831:"金湖县",320832:"其它区",320900:"盐城市",320902:"亭湖区",320903:"盐都区",320921:"响水县",320922:"滨海县",320923:"阜宁县",320924:"射阳县",320925:"建湖县",320981:"东台市",320982:"大丰市",320983:"其它区",321e3:"扬州市",321002:"广陵区",321003:"邗江区",321023:"宝应县",321081:"仪征市",321084:"高邮市",321088:"江都区",321093:"其它区",321100:"镇江市",321102:"京口区",321111:"润州区",321112:"丹徒区",321181:"丹阳市",321182:"扬中市",321183:"句容市",321184:"其它区",321200:"泰州市",321202:"海陵区",321203:"高港区",321281:"兴化市",321282:"靖江市",321283:"泰兴市",321284:"姜堰区",321285:"其它区",321300:"宿迁市",321302:"宿城区",321311:"宿豫区",321322:"沭阳县",321323:"泗阳县",321324:"泗洪县",321325:"其它区",33e4:"浙江省",330100:"杭州市",330102:"上城区",330103:"下城区",330104:"江干区",330105:"拱墅区",330106:"西湖区",330108:"滨江区",330109:"萧山区",330110:"余杭区",330122:"桐庐县",330127:"淳安县",330182:"建德市",330183:"富阳市",330185:"临安市",330186:"其它区",330200:"宁波市",330203:"海曙区",330204:"江东区",330205:"江北区",330206:"北仑区",330211:"镇海区",330212:"鄞州区",330225:"象山县",330226:"宁海县",330281:"余姚市",330282:"慈溪市",330283:"奉化市",330284:"其它区",330300:"温州市",330302:"鹿城区",330303:"龙湾区",330304:"瓯海区",330322:"洞头县",330324:"永嘉县",330326:"平阳县",330327:"苍南县",330328:"文成县",330329:"泰顺县",330381:"瑞安市",330382:"乐清市",330383:"其它区",330400:"嘉兴市",330402:"南湖区",330411:"秀洲区",330421:"嘉善县",330424:"海盐县",330481:"海宁市",330482:"平湖市",330483:"桐乡市",330484:"其它区",330500:"湖州市",330502:"吴兴区",330503:"南浔区",330521:"德清县",330522:"长兴县",330523:"安吉县",330524:"其它区",330600:"绍兴市",330602:"越城区",330621:"绍兴县",330624:"新昌县",330681:"诸暨市",330682:"上虞市",330683:"嵊州市",330684:"其它区",330700:"金华市",330702:"婺城区",330703:"金东区",330723:"武义县",330726:"浦江县",330727:"磐安县",330781:"兰溪市",330782:"义乌市",330783:"东阳市",330784:"永康市",330785:"其它区",330800:"衢州市",330802:"柯城区",330803:"衢江区",330822:"常山县",330824:"开化县",330825:"龙游县",330881:"江山市",330882:"其它区",330900:"舟山市",330902:"定海区",330903:"普陀区",330921:"岱山县",330922:"嵊泗县",330923:"其它区",331e3:"台州市",331002:"椒江区",331003:"黄岩区",331004:"路桥区",331021:"玉环县",331022:"三门县",331023:"天台县",331024:"仙居县",331081:"温岭市",331082:"临海市",331083:"其它区",331100:"丽水市",331102:"莲都区",331121:"青田县",331122:"缙云县",331123:"遂昌县",331124:"松阳县",331125:"云和县",331126:"庆元县",331127:"景宁畲族自治县",331181:"龙泉市",331182:"其它区",34e4:"安徽省",340100:"合肥市",340102:"瑶海区",340103:"庐阳区",340104:"蜀山区",340111:"包河区",340121:"长丰县",340122:"肥东县",340123:"肥西县",340192:"其它区",340200:"芜湖市",340202:"镜湖区",340203:"弋江区",340207:"鸠江区",340208:"三山区",340221:"芜湖县",340222:"繁昌县",340223:"南陵县",340224:"其它区",340300:"蚌埠市",340302:"龙子湖区",340303:"蚌山区",340304:"禹会区",340311:"淮上区",340321:"怀远县",340322:"五河县",340323:"固镇县",340324:"其它区",340400:"淮南市",340402:"大通区",340403:"田家庵区",340404:"谢家集区",340405:"八公山区",340406:"潘集区",340421:"凤台县",340422:"其它区",340500:"马鞍山市",340503:"花山区",340504:"雨山区",340506:"博望区",340521:"当涂县",340522:"其它区",340600:"淮北市",340602:"杜集区",340603:"相山区",340604:"烈山区",340621:"濉溪县",340622:"其它区",340700:"铜陵市",340702:"铜官山区",340703:"狮子山区",340711:"郊区",340721:"铜陵县",340722:"其它区",340800:"安庆市",340802:"迎江区",340803:"大观区",340811:"宜秀区",340822:"怀宁县",340823:"枞阳县",340824:"潜山县",340825:"太湖县",340826:"宿松县",340827:"望江县",340828:"岳西县",340881:"桐城市",340882:"其它区",341e3:"黄山市",341002:"屯溪区",341003:"黄山区",341004:"徽州区",341021:"歙县",341022:"休宁县",341023:"黟县",341024:"祁门县",341025:"其它区",341100:"滁州市",341102:"琅琊区",341103:"南谯区",341122:"来安县",341124:"全椒县",341125:"定远县",341126:"凤阳县",341181:"天长市",341182:"明光市",341183:"其它区",341200:"阜阳市",341202:"颍州区",341203:"颍东区",341204:"颍泉区",341221:"临泉县",341222:"太和县",341225:"阜南县",341226:"颍上县",341282:"界首市",341283:"其它区",341300:"宿州市",341302:"埇桥区",341321:"砀山县",341322:"萧县",341323:"灵璧县",341324:"泗县",341325:"其它区",341400:"巢湖市",341421:"庐江县",341422:"无为县",341423:"含山县",341424:"和县",341500:"六安市",341502:"金安区",341503:"裕安区",341521:"寿县",341522:"霍邱县",341523:"舒城县",341524:"金寨县",341525:"霍山县",341526:"其它区",341600:"亳州市",341602:"谯城区",341621:"涡阳县",341622:"蒙城县",341623:"利辛县",341624:"其它区",341700:"池州市",341702:"贵池区",341721:"东至县",341722:"石台县",341723:"青阳县",341724:"其它区",341800:"宣城市",341802:"宣州区",341821:"郎溪县",341822:"广德县",341823:"泾县",341824:"绩溪县",341825:"旌德县",341881:"宁国市",341882:"其它区",35e4:"福建省",350100:"福州市",350102:"鼓楼区",350103:"台江区",350104:"仓山区",350105:"马尾区",350111:"晋安区",350121:"闽侯县",350122:"连江县",350123:"罗源县",350124:"闽清县",350125:"永泰县",350128:"平潭县",350181:"福清市",350182:"长乐市",350183:"其它区",350200:"厦门市",350203:"思明区",350205:"海沧区",350206:"湖里区",350211:"集美区",350212:"同安区",350213:"翔安区",350214:"其它区",350300:"莆田市",350302:"城厢区",350303:"涵江区",350304:"荔城区",350305:"秀屿区",350322:"仙游县",350323:"其它区",350400:"三明市",350402:"梅列区",350403:"三元区",350421:"明溪县",350423:"清流县",350424:"宁化县",350425:"大田县",350426:"尤溪县",350427:"沙县",350428:"将乐县",350429:"泰宁县",350430:"建宁县",350481:"永安市",350482:"其它区",350500:"泉州市",350502:"鲤城区",350503:"丰泽区",350504:"洛江区",350505:"泉港区",350521:"惠安县",350524:"安溪县",350525:"永春县",350526:"德化县",350527:"金门县",350581:"石狮市",350582:"晋江市",350583:"南安市",350584:"其它区",350600:"漳州市",350602:"芗城区",350603:"龙文区",350622:"云霄县",350623:"漳浦县",350624:"诏安县",350625:"长泰县",350626:"东山县",350627:"南靖县",350628:"平和县",350629:"华安县",350681:"龙海市",350682:"其它区",350700:"南平市",350702:"延平区",350721:"顺昌县",350722:"浦城县",350723:"光泽县",350724:"松溪县",350725:"政和县",350781:"邵武市",350782:"武夷山市",350783:"建瓯市",350784:"建阳市",350785:"其它区",350800:"龙岩市",350802:"新罗区",350821:"长汀县",350822:"永定县",350823:"上杭县",350824:"武平县",350825:"连城县",350881:"漳平市",350882:"其它区",350900:"宁德市",350902:"蕉城区",350921:"霞浦县",350922:"古田县",350923:"屏南县",350924:"寿宁县",350925:"周宁县",350926:"柘荣县",350981:"福安市",350982:"福鼎市",350983:"其它区",36e4:"江西省",360100:"南昌市",360102:"东湖区",360103:"西湖区",360104:"青云谱区",360105:"湾里区",360111:"青山湖区",360121:"南昌县",360122:"新建县",360123:"安义县",360124:"进贤县",360128:"其它区",360200:"景德镇市",360202:"昌江区",360203:"珠山区",360222:"浮梁县",360281:"乐平市",360282:"其它区",360300:"萍乡市",360302:"安源区",360313:"湘东区",360321:"莲花县",360322:"上栗县",360323:"芦溪县",360324:"其它区",360400:"九江市",360402:"庐山区",360403:"浔阳区",360421:"九江县",360423:"武宁县",360424:"修水县",360425:"永修县",360426:"德安县",360427:"星子县",360428:"都昌县",360429:"湖口县",360430:"彭泽县",360481:"瑞昌市",360482:"其它区",360483:"共青城市",360500:"新余市",360502:"渝水区",360521:"分宜县",360522:"其它区",360600:"鹰潭市",360602:"月湖区",360622:"余江县",360681:"贵溪市",360682:"其它区",360700:"赣州市",360702:"章贡区",360721:"赣县",360722:"信丰县",360723:"大余县",360724:"上犹县",360725:"崇义县",360726:"安远县",360727:"龙南县",360728:"定南县",360729:"全南县",360730:"宁都县",360731:"于都县",360732:"兴国县",360733:"会昌县",360734:"寻乌县",360735:"石城县",360781:"瑞金市",360782:"南康市",360783:"其它区",360800:"吉安市",360802:"吉州区",360803:"青原区",360821:"吉安县",360822:"吉水县",360823:"峡江县",360824:"新干县",360825:"永丰县",360826:"泰和县",360827:"遂川县",360828:"万安县",360829:"安福县",360830:"永新县",360881:"井冈山市",360882:"其它区",360900:"宜春市",360902:"袁州区",360921:"奉新县",360922:"万载县",360923:"上高县",360924:"宜丰县",360925:"靖安县",360926:"铜鼓县",360981:"丰城市",360982:"樟树市",360983:"高安市",360984:"其它区",361e3:"抚州市",361002:"临川区",361021:"南城县",361022:"黎川县",361023:"南丰县",361024:"崇仁县",361025:"乐安县",361026:"宜黄县",361027:"金溪县",361028:"资溪县",361029:"东乡县",361030:"广昌县",361031:"其它区",361100:"上饶市",361102:"信州区",361121:"上饶县",361122:"广丰县",361123:"玉山县",361124:"铅山县",361125:"横峰县",361126:"弋阳县",361127:"余干县",361128:"鄱阳县",361129:"万年县",361130:"婺源县",361181:"德兴市",361182:"其它区",37e4:"山东省",370100:"济南市",370102:"历下区",370103:"市中区",370104:"槐荫区",370105:"天桥区",370112:"历城区",370113:"长清区",370124:"平阴县",370125:"济阳县",370126:"商河县",370181:"章丘市",370182:"其它区",370200:"青岛市",370202:"市南区",370203:"市北区",370211:"黄岛区",370212:"崂山区",370213:"李沧区",370214:"城阳区",370281:"胶州市",370282:"即墨市",370283:"平度市",370285:"莱西市",370286:"其它区",370300:"淄博市",370302:"淄川区",370303:"张店区",370304:"博山区",370305:"临淄区",370306:"周村区",370321:"桓台县",370322:"高青县",370323:"沂源县",370324:"其它区",370400:"枣庄市",370402:"市中区",370403:"薛城区",370404:"峄城区",370405:"台儿庄区",370406:"山亭区",370481:"滕州市",370482:"其它区",370500:"东营市",370502:"东营区",370503:"河口区",370521:"垦利县",370522:"利津县",370523:"广饶县",370591:"其它区",370600:"烟台市",370602:"芝罘区",370611:"福山区",370612:"牟平区",370613:"莱山区",370634:"长岛县",370681:"龙口市",370682:"莱阳市",370683:"莱州市",370684:"蓬莱市",370685:"招远市",370686:"栖霞市",370687:"海阳市",370688:"其它区",370700:"潍坊市",370702:"潍城区",370703:"寒亭区",370704:"坊子区",370705:"奎文区",370724:"临朐县",370725:"昌乐县",370781:"青州市",370782:"诸城市",370783:"寿光市",370784:"安丘市",370785:"高密市",370786:"昌邑市",370787:"其它区",370800:"济宁市",370802:"市中区",370811:"任城区",370826:"微山县",370827:"鱼台县",370828:"金乡县",370829:"嘉祥县",370830:"汶上县",370831:"泗水县",370832:"梁山县",370881:"曲阜市",370882:"兖州市",370883:"邹城市",370884:"其它区",370900:"泰安市",370902:"泰山区",370903:"岱岳区",370921:"宁阳县",370923:"东平县",370982:"新泰市",370983:"肥城市",370984:"其它区",371e3:"威海市",371002:"环翠区",371081:"文登市",371082:"荣成市",371083:"乳山市",371084:"其它区",371100:"日照市",371102:"东港区",371103:"岚山区",371121:"五莲县",371122:"莒县",371123:"其它区",371200:"莱芜市",371202:"莱城区",371203:"钢城区",371204:"其它区",371300:"临沂市",371302:"兰山区",371311:"罗庄区",371312:"河东区",371321:"沂南县",371322:"郯城县",371323:"沂水县",371324:"苍山县",371325:"费县",371326:"平邑县",371327:"莒南县",371328:"蒙阴县",371329:"临沭县",371330:"其它区",371400:"德州市",371402:"德城区",371421:"陵县",371422:"宁津县",371423:"庆云县",371424:"临邑县",371425:"齐河县",371426:"平原县",371427:"夏津县",371428:"武城县",371481:"乐陵市",371482:"禹城市",371483:"其它区",371500:"聊城市",371502:"东昌府区",371521:"阳谷县",371522:"莘县",371523:"茌平县",371524:"东阿县",371525:"冠县",371526:"高唐县",371581:"临清市",371582:"其它区",371600:"滨州市",371602:"滨城区",371621:"惠民县",371622:"阳信县",371623:"无棣县",371624:"沾化县",371625:"博兴县",371626:"邹平县",371627:"其它区",371700:"菏泽市",371702:"牡丹区",371721:"曹县",371722:"单县",371723:"成武县",371724:"巨野县",371725:"郓城县",371726:"鄄城县",371727:"定陶县",371728:"东明县",371729:"其它区",41e4:"河南省",410100:"郑州市",410102:"中原区",410103:"二七区",410104:"管城回族区",410105:"金水区",410106:"上街区",410108:"惠济区",410122:"中牟县",410181:"巩义市",410182:"荥阳市",410183:"新密市",410184:"新郑市",410185:"登封市",410188:"其它区",410200:"开封市",410202:"龙亭区",410203:"顺河回族区",410204:"鼓楼区",410205:"禹王台区",410211:"金明区",410221:"杞县",410222:"通许县",410223:"尉氏县",410224:"开封县",410225:"兰考县",410226:"其它区",410300:"洛阳市",410302:"老城区",410303:"西工区",410304:"瀍河回族区",410305:"涧西区",410306:"吉利区",410307:"洛龙区",410322:"孟津县",410323:"新安县",410324:"栾川县",410325:"嵩县",410326:"汝阳县",410327:"宜阳县",410328:"洛宁县",410329:"伊川县",410381:"偃师市",410400:"平顶山市",410402:"新华区",410403:"卫东区",410404:"石龙区",410411:"湛河区",410421:"宝丰县",410422:"叶县",410423:"鲁山县",410425:"郏县",410481:"舞钢市",410482:"汝州市",410483:"其它区",410500:"安阳市",410502:"文峰区",410503:"北关区",410505:"殷都区",410506:"龙安区",410522:"安阳县",410523:"汤阴县",410526:"滑县",410527:"内黄县",410581:"林州市",410582:"其它区",410600:"鹤壁市",410602:"鹤山区",410603:"山城区",410611:"淇滨区",410621:"浚县",410622:"淇县",410623:"其它区",410700:"新乡市",410702:"红旗区",410703:"卫滨区",410704:"凤泉区",410711:"牧野区",410721:"新乡县",410724:"获嘉县",410725:"原阳县",410726:"延津县",410727:"封丘县",410728:"长垣县",410781:"卫辉市",410782:"辉县市",410783:"其它区",410800:"焦作市",410802:"解放区",410803:"中站区",410804:"马村区",410811:"山阳区",410821:"修武县",410822:"博爱县",410823:"武陟县",410825:"温县",410881:"济源市",410882:"沁阳市",410883:"孟州市",410884:"其它区",410900:"濮阳市",410902:"华龙区",410922:"清丰县",410923:"南乐县",410926:"范县",410927:"台前县",410928:"濮阳县",410929:"其它区",411e3:"许昌市",411002:"魏都区",411023:"许昌县",411024:"鄢陵县",411025:"襄城县",411081:"禹州市",411082:"长葛市",411083:"其它区",411100:"漯河市",411102:"源汇区",411103:"郾城区",411104:"召陵区",411121:"舞阳县",411122:"临颍县",411123:"其它区",411200:"三门峡市",411202:"湖滨区",411221:"渑池县",411222:"陕县",411224:"卢氏县",411281:"义马市",411282:"灵宝市",411283:"其它区",411300:"南阳市",411302:"宛城区",411303:"卧龙区",411321:"南召县",411322:"方城县",411323:"西峡县",411324:"镇平县",411325:"内乡县",411326:"淅川县",411327:"社旗县",411328:"唐河县",411329:"新野县",411330:"桐柏县",411381:"邓州市",411382:"其它区",411400:"商丘市",411402:"梁园区",411403:"睢阳区",411421:"民权县",411422:"睢县",411423:"宁陵县",411424:"柘城县",411425:"虞城县",411426:"夏邑县",411481:"永城市",411482:"其它区",411500:"信阳市",411502:"浉河区",411503:"平桥区",411521:"罗山县",411522:"光山县",411523:"新县",411524:"商城县",411525:"固始县",411526:"潢川县",411527:"淮滨县",411528:"息县",411529:"其它区",411600:"周口市",411602:"川汇区",411621:"扶沟县",411622:"西华县",411623:"商水县",411624:"沈丘县",411625:"郸城县",411626:"淮阳县",411627:"太康县",411628:"鹿邑县",411681:"项城市",411682:"其它区",411700:"驻马店市",411702:"驿城区",411721:"西平县",411722:"上蔡县",411723:"平舆县",411724:"正阳县",411725:"确山县",411726:"泌阳县",411727:"汝南县",411728:"遂平县",411729:"新蔡县",411730:"其它区",42e4:"湖北省",420100:"武汉市",420102:"江岸区",420103:"江汉区",420104:"硚口区",420105:"汉阳区",420106:"武昌区",420107:"青山区",420111:"洪山区",420112:"东西湖区",420113:"汉南区",420114:"蔡甸区",420115:"江夏区",420116:"黄陂区",420117:"新洲区",420118:"其它区",420200:"黄石市",420202:"黄石港区",420203:"西塞山区",420204:"下陆区",420205:"铁山区",420222:"阳新县",420281:"大冶市",420282:"其它区",420300:"十堰市",420302:"茅箭区",420303:"张湾区",420321:"郧县",420322:"郧西县",420323:"竹山县",420324:"竹溪县",420325:"房县",420381:"丹江口市",420383:"其它区",420500:"宜昌市",420502:"西陵区",420503:"伍家岗区",420504:"点军区",420505:"猇亭区",420506:"夷陵区",420525:"远安县",420526:"兴山县",420527:"秭归县",420528:"长阳土家族自治县",420529:"五峰土家族自治县",420581:"宜都市",420582:"当阳市",420583:"枝江市",420584:"其它区",420600:"襄阳市",420602:"襄城区",420606:"樊城区",420607:"襄州区",420624:"南漳县",420625:"谷城县",420626:"保康县",420682:"老河口市",420683:"枣阳市",420684:"宜城市",420685:"其它区",420700:"鄂州市",420702:"梁子湖区",420703:"华容区",420704:"鄂城区",420705:"其它区",420800:"荆门市",420802:"东宝区",420804:"掇刀区",420821:"京山县",420822:"沙洋县",420881:"钟祥市",420882:"其它区",420900:"孝感市",420902:"孝南区",420921:"孝昌县",420922:"大悟县",420923:"云梦县",420981:"应城市",420982:"安陆市",420984:"汉川市",420985:"其它区",421e3:"荆州市",421002:"沙市区",421003:"荆州区",421022:"公安县",421023:"监利县",421024:"江陵县",421081:"石首市",421083:"洪湖市",421087:"松滋市",421088:"其它区",421100:"黄冈市",421102:"黄州区",421121:"团风县",421122:"红安县",421123:"罗田县",421124:"英山县",421125:"浠水县",421126:"蕲春县",421127:"黄梅县",421181:"麻城市",421182:"武穴市",421183:"其它区",421200:"咸宁市",421202:"咸安区",421221:"嘉鱼县",421222:"通城县",421223:"崇阳县",421224:"通山县",421281:"赤壁市",421283:"其它区",421300:"随州市",421302:"曾都区",421321:"随县",421381:"广水市",421382:"其它区",422800:"恩施土家族苗族自治州",422801:"恩施市",422802:"利川市",422822:"建始县",422823:"巴东县",422825:"宣恩县",422826:"咸丰县",422827:"来凤县",422828:"鹤峰县",422829:"其它区",429004:"仙桃市",429005:"潜江市",429006:"天门市",429021:"神农架林区",43e4:"湖南省",430100:"长沙市",430102:"芙蓉区",430103:"天心区",430104:"岳麓区",430105:"开福区",430111:"雨花区",430121:"长沙县",430122:"望城区",430124:"宁乡县",430181:"浏阳市",430182:"其它区",430200:"株洲市",430202:"荷塘区",430203:"芦淞区",430204:"石峰区",430211:"天元区",430221:"株洲县",430223:"攸县",430224:"茶陵县",430225:"炎陵县",430281:"醴陵市",430282:"其它区",430300:"湘潭市",430302:"雨湖区",430304:"岳塘区",430321:"湘潭县",430381:"湘乡市",430382:"韶山市",430383:"其它区",430400:"衡阳市",430405:"珠晖区",430406:"雁峰区",430407:"石鼓区",430408:"蒸湘区",430412:"南岳区",430421:"衡阳县",430422:"衡南县",430423:"衡山县",430424:"衡东县",430426:"祁东县",430481:"耒阳市",430482:"常宁市",430483:"其它区",430500:"邵阳市",430502:"双清区",430503:"大祥区",430511:"北塔区",430521:"邵东县",430522:"新邵县",430523:"邵阳县",430524:"隆回县",430525:"洞口县",430527:"绥宁县",430528:"新宁县",430529:"城步苗族自治县",430581:"武冈市",430582:"其它区",430600:"岳阳市",430602:"岳阳楼区",430603:"云溪区",430611:"君山区",430621:"岳阳县",430623:"华容县",430624:"湘阴县",430626:"平江县",430681:"汨罗市",430682:"临湘市",430683:"其它区",430700:"常德市",430702:"武陵区",430703:"鼎城区",430721:"安乡县",430722:"汉寿县",430723:"澧县",430724:"临澧县",430725:"桃源县",430726:"石门县",430781:"津市市",430782:"其它区",430800:"张家界市",430802:"永定区",430811:"武陵源区",430821:"慈利县",430822:"桑植县",430823:"其它区",430900:"益阳市",430902:"资阳区",430903:"赫山区",430921:"南县",430922:"桃江县",430923:"安化县",430981:"沅江市",430982:"其它区",431e3:"郴州市",431002:"北湖区",431003:"苏仙区",431021:"桂阳县",431022:"宜章县",431023:"永兴县",431024:"嘉禾县",431025:"临武县",431026:"汝城县",431027:"桂东县",431028:"安仁县",431081:"资兴市",431082:"其它区",431100:"永州市",431102:"零陵区",431103:"冷水滩区",431121:"祁阳县",431122:"东安县",431123:"双牌县",431124:"道县",431125:"江永县",431126:"宁远县",431127:"蓝山县",431128:"新田县",431129:"江华瑶族自治县",431130:"其它区",431200:"怀化市",431202:"鹤城区",431221:"中方县",431222:"沅陵县",431223:"辰溪县",431224:"溆浦县",431225:"会同县",431226:"麻阳苗族自治县",431227:"新晃侗族自治县",431228:"芷江侗族自治县",431229:"靖州苗族侗族自治县",431230:"通道侗族自治县",431281:"洪江市",431282:"其它区",431300:"娄底市",431302:"娄星区",431321:"双峰县",431322:"新化县",431381:"冷水江市",431382:"涟源市",431383:"其它区",433100:"湘西土家族苗族自治州",433101:"吉首市",433122:"泸溪县",433123:"凤凰县",433124:"花垣县",433125:"保靖县",433126:"古丈县",433127:"永顺县",433130:"龙山县",433131:"其它区",44e4:"广东省",440100:"广州市",440103:"荔湾区",440104:"越秀区",440105:"海珠区",440106:"天河区",440111:"白云区",440112:"黄埔区",440113:"番禺区",440114:"花都区",440115:"南沙区",440116:"萝岗区",440183:"增城市",440184:"从化市",440189:"其它区",440200:"韶关市",440203:"武江区",440204:"浈江区",440205:"曲江区",440222:"始兴县",440224:"仁化县",440229:"翁源县",440232:"乳源瑶族自治县",440233:"新丰县",440281:"乐昌市",440282:"南雄市",440283:"其它区",440300:"深圳市",440303:"罗湖区",440304:"福田区",440305:"南山区",440306:"宝安区",440307:"龙岗区",440308:"盐田区",440309:"其它区",440320:"光明新区",440321:"坪山新区",440322:"大鹏新区",440323:"龙华新区",440400:"珠海市",440402:"香洲区",440403:"斗门区",440404:"金湾区",440488:"其它区",440500:"汕头市",440507:"龙湖区",440511:"金平区",440512:"濠江区",440513:"潮阳区",440514:"潮南区",440515:"澄海区",440523:"南澳县",440524:"其它区",440600:"佛山市",440604:"禅城区",440605:"南海区",440606:"顺德区",440607:"三水区",440608:"高明区",440609:"其它区",440700:"江门市",440703:"蓬江区",440704:"江海区",440705:"新会区",440781:"台山市",440783:"开平市",440784:"鹤山市",440785:"恩平市",440786:"其它区",440800:"湛江市",440802:"赤坎区",440803:"霞山区",440804:"坡头区",440811:"麻章区",440823:"遂溪县",440825:"徐闻县",440881:"廉江市",440882:"雷州市",440883:"吴川市",440884:"其它区",440900:"茂名市",440902:"茂南区",440903:"茂港区",440923:"电白县",440981:"高州市",440982:"化州市",440983:"信宜市",440984:"其它区",441200:"肇庆市",441202:"端州区",441203:"鼎湖区",441223:"广宁县",441224:"怀集县",441225:"封开县",441226:"德庆县",441283:"高要市",441284:"四会市",441285:"其它区",441300:"惠州市",441302:"惠城区",441303:"惠阳区",441322:"博罗县",441323:"惠东县",441324:"龙门县",441325:"其它区",441400:"梅州市",441402:"梅江区",441421:"梅县",441422:"大埔县",441423:"丰顺县",441424:"五华县",441426:"平远县",441427:"蕉岭县",441481:"兴宁市",441482:"其它区",441500:"汕尾市",441502:"城区",441521:"海丰县",441523:"陆河县",441581:"陆丰市",441582:"其它区",441600:"河源市",441602:"源城区",441621:"紫金县",441622:"龙川县",441623:"连平县",441624:"和平县",441625:"东源县",441626:"其它区",441700:"阳江市",441702:"江城区",441721:"阳西县",441723:"阳东县",441781:"阳春市",441782:"其它区",441800:"清远市",441802:"清城区",441821:"佛冈县",441823:"阳山县",441825:"连山壮族瑶族自治县",441826:"连南瑶族自治县",441827:"清新区",441881:"英德市",441882:"连州市",441883:"其它区",441900:"东莞市",442e3:"中山市",442101:"东沙群岛",445100:"潮州市",445102:"湘桥区",445121:"潮安区",445122:"饶平县",445186:"其它区",445200:"揭阳市",445202:"榕城区",445221:"揭东区",445222:"揭西县",445224:"惠来县",445281:"普宁市",445285:"其它区",445300:"云浮市",445302:"云城区",445321:"新兴县",445322:"郁南县",445323:"云安县",445381:"罗定市",445382:"其它区",45e4:"广西壮族自治区",450100:"南宁市",450102:"兴宁区",450103:"青秀区",450105:"江南区",450107:"西乡塘区",450108:"良庆区",450109:"邕宁区",450122:"武鸣县",450123:"隆安县",450124:"马山县",450125:"上林县",450126:"宾阳县",450127:"横县",450128:"其它区",450200:"柳州市",450202:"城中区",450203:"鱼峰区",450204:"柳南区",450205:"柳北区",450221:"柳江县",450222:"柳城县",450223:"鹿寨县",450224:"融安县",450225:"融水苗族自治县",450226:"三江侗族自治县",450227:"其它区",450300:"桂林市",450302:"秀峰区",450303:"叠彩区",450304:"象山区",450305:"七星区",450311:"雁山区",450321:"阳朔县",450322:"临桂区",450323:"灵川县",450324:"全州县",450325:"兴安县",450326:"永福县",450327:"灌阳县",450328:"龙胜各族自治县",450329:"资源县",450330:"平乐县",450331:"荔浦县",450332:"恭城瑶族自治县",450333:"其它区",450400:"梧州市",450403:"万秀区",450405:"长洲区",450406:"龙圩区",450421:"苍梧县",450422:"藤县",450423:"蒙山县",450481:"岑溪市",450482:"其它区",450500:"北海市",450502:"海城区",450503:"银海区",450512:"铁山港区",450521:"合浦县",450522:"其它区",450600:"防城港市",450602:"港口区",450603:"防城区",450621:"上思县",450681:"东兴市",450682:"其它区",450700:"钦州市",450702:"钦南区",450703:"钦北区",450721:"灵山县",450722:"浦北县",450723:"其它区",450800:"贵港市",450802:"港北区",450803:"港南区",450804:"覃塘区",450821:"平南县",450881:"桂平市",450882:"其它区",450900:"玉林市",450902:"玉州区",450903:"福绵区",450921:"容县",450922:"陆川县",450923:"博白县",450924:"兴业县",450981:"北流市",450982:"其它区",451e3:"百色市",451002:"右江区",451021:"田阳县",451022:"田东县",451023:"平果县",451024:"德保县",451025:"靖西县",451026:"那坡县",451027:"凌云县",451028:"乐业县",451029:"田林县",451030:"西林县",451031:"隆林各族自治县",451032:"其它区",451100:"贺州市",451102:"八步区",451119:"平桂管理区",451121:"昭平县",451122:"钟山县",451123:"富川瑶族自治县",451124:"其它区",451200:"河池市",451202:"金城江区",451221:"南丹县",451222:"天峨县",451223:"凤山县",451224:"东兰县",451225:"罗城仫佬族自治县",451226:"环江毛南族自治县",451227:"巴马瑶族自治县",451228:"都安瑶族自治县",451229:"大化瑶族自治县",451281:"宜州市",451282:"其它区",451300:"来宾市",451302:"兴宾区",451321:"忻城县",451322:"象州县",451323:"武宣县",451324:"金秀瑶族自治县",451381:"合山市",451382:"其它区",451400:"崇左市",451402:"江州区",451421:"扶绥县",451422:"宁明县",451423:"龙州县",451424:"大新县",451425:"天等县",451481:"凭祥市",451482:"其它区",46e4:"海南省",460100:"海口市",460105:"秀英区",460106:"龙华区",460107:"琼山区",460108:"美兰区",460109:"其它区",460200:"三亚市",460300:"三沙市",460321:"西沙群岛",460322:"南沙群岛",460323:"中沙群岛的岛礁及其海域",469001:"五指山市",469002:"琼海市",469003:"儋州市",469005:"文昌市",469006:"万宁市",469007:"东方市",469025:"定安县",469026:"屯昌县",469027:"澄迈县",469028:"临高县",469030:"白沙黎族自治县",469031:"昌江黎族自治县",469033:"乐东黎族自治县",469034:"陵水黎族自治县",469035:"保亭黎族苗族自治县",469036:"琼中黎族苗族自治县",5e5:"重庆",500100:"重庆市",500101:"万州区",500102:"涪陵区",500103:"渝中区",500104:"大渡口区",500105:"江北区",500106:"沙坪坝区",500107:"九龙坡区",500108:"南岸区",500109:"北碚区",500110:"万盛区",500111:"双桥区",500112:"渝北区",500113:"巴南区",500114:"黔江区",500115:"长寿区",500222:"綦江区",500223:"潼南县",500224:"铜梁县",500225:"大足区",500226:"荣昌县",500227:"璧山县",500228:"梁平县",500229:"城口县",500230:"丰都县",500231:"垫江县",500232:"武隆县",500233:"忠县",500234:"开县",500235:"云阳县",500236:"奉节县",500237:"巫山县",500238:"巫溪县",500240:"石柱土家族自治县",500241:"秀山土家族苗族自治县",500242:"酉阳土家族苗族自治县",500243:"彭水苗族土家族自治县",500381:"江津区",500382:"合川区",500383:"永川区",500384:"南川区",500385:"其它区",51e4:"四川省",510100:"成都市",510104:"锦江区",510105:"青羊区",510106:"金牛区",510107:"武侯区",510108:"成华区",510112:"龙泉驿区",510113:"青白江区",510114:"新都区",510115:"温江区",510121:"金堂县",510122:"双流县",510124:"郫县",510129:"大邑县",510131:"蒲江县",510132:"新津县",510181:"都江堰市",510182:"彭州市",510183:"邛崃市",510184:"崇州市",510185:"其它区",510300:"自贡市",510302:"自流井区",510303:"贡井区",510304:"大安区",510311:"沿滩区",510321:"荣县",510322:"富顺县",510323:"其它区",510400:"攀枝花市",510402:"东区",510403:"西区",510411:"仁和区",510421:"米易县",510422:"盐边县",510423:"其它区",510500:"泸州市",510502:"江阳区",510503:"纳溪区",510504:"龙马潭区",510521:"泸县",510522:"合江县",510524:"叙永县",510525:"古蔺县",510526:"其它区",510600:"德阳市",510603:"旌阳区",510623:"中江县",510626:"罗江县",510681:"广汉市",510682:"什邡市",510683:"绵竹市",510684:"其它区",510700:"绵阳市",510703:"涪城区",510704:"游仙区",510722:"三台县",510723:"盐亭县",510724:"安县",510725:"梓潼县",510726:"北川羌族自治县",510727:"平武县",510781:"江油市",510782:"其它区",510800:"广元市",510802:"利州区",510811:"昭化区",510812:"朝天区",510821:"旺苍县",510822:"青川县",510823:"剑阁县",510824:"苍溪县",510825:"其它区",510900:"遂宁市",510903:"船山区",510904:"安居区",510921:"蓬溪县",510922:"射洪县",510923:"大英县",510924:"其它区",511e3:"内江市",511002:"市中区",511011:"东兴区",511024:"威远县",511025:"资中县",511028:"隆昌县",511029:"其它区",511100:"乐山市",511102:"市中区",511111:"沙湾区",511112:"五通桥区",511113:"金口河区",511123:"犍为县",511124:"井研县",511126:"夹江县",511129:"沐川县",511132:"峨边彝族自治县",511133:"马边彝族自治县",511181:"峨眉山市",511182:"其它区",511300:"南充市",511302:"顺庆区",511303:"高坪区",511304:"嘉陵区",511321:"南部县",511322:"营山县",511323:"蓬安县",511324:"仪陇县",511325:"西充县",511381:"阆中市",511382:"其它区",511400:"眉山市",511402:"东坡区",511421:"仁寿县",511422:"彭山县",511423:"洪雅县",511424:"丹棱县",511425:"青神县",511426:"其它区",511500:"宜宾市",511502:"翠屏区",511521:"宜宾县",511522:"南溪区",511523:"江安县",511524:"长宁县",511525:"高县",511526:"珙县",511527:"筠连县",511528:"兴文县",511529:"屏山县",511530:"其它区",511600:"广安市",511602:"广安区",511603:"前锋区",511621:"岳池县",511622:"武胜县",511623:"邻水县",511681:"华蓥市",511683:"其它区",511700:"达州市",511702:"通川区",511721:"达川区",511722:"宣汉县",511723:"开江县",511724:"大竹县",511725:"渠县",511781:"万源市",511782:"其它区",511800:"雅安市",511802:"雨城区",511821:"名山区",511822:"荥经县",511823:"汉源县",511824:"石棉县",511825:"天全县",511826:"芦山县",511827:"宝兴县",511828:"其它区",511900:"巴中市",511902:"巴州区",511903:"恩阳区",511921:"通江县",511922:"南江县",511923:"平昌县",511924:"其它区",512e3:"资阳市",512002:"雁江区",512021:"安岳县",512022:"乐至县",512081:"简阳市",512082:"其它区",513200:"阿坝藏族羌族自治州",513221:"汶川县",513222:"理县",513223:"茂县",513224:"松潘县",513225:"九寨沟县",513226:"金川县",513227:"小金县",513228:"黑水县",513229:"马尔康县",513230:"壤塘县",513231:"阿坝县",513232:"若尔盖县",513233:"红原县",513234:"其它区",513300:"甘孜藏族自治州",513321:"康定县",513322:"泸定县",513323:"丹巴县",513324:"九龙县",513325:"雅江县",513326:"道孚县",513327:"炉霍县",513328:"甘孜县",513329:"新龙县",513330:"德格县",513331:"白玉县",513332:"石渠县",513333:"色达县",513334:"理塘县",513335:"巴塘县",513336:"乡城县",513337:"稻城县",513338:"得荣县",513339:"其它区",513400:"凉山彝族自治州",513401:"西昌市",513422:"木里藏族自治县",513423:"盐源县",513424:"德昌县",513425:"会理县",513426:"会东县",513427:"宁南县",513428:"普格县",513429:"布拖县",513430:"金阳县",513431:"昭觉县",513432:"喜德县",513433:"冕宁县",513434:"越西县",513435:"甘洛县",513436:"美姑县",513437:"雷波县",513438:"其它区",52e4:"贵州省",520100:"贵阳市",520102:"南明区",520103:"云岩区",520111:"花溪区",520112:"乌当区",520113:"白云区",520121:"开阳县",520122:"息烽县",520123:"修文县",520151:"观山湖区",520181:"清镇市",520182:"其它区",520200:"六盘水市",520201:"钟山区",520203:"六枝特区",520221:"水城县",520222:"盘县",520223:"其它区",520300:"遵义市",520302:"红花岗区",520303:"汇川区",520321:"遵义县",520322:"桐梓县",520323:"绥阳县",520324:"正安县",520325:"道真仡佬族苗族自治县",520326:"务川仡佬族苗族自治县",520327:"凤冈县",520328:"湄潭县",520329:"余庆县",520330:"习水县",520381:"赤水市",520382:"仁怀市",520383:"其它区",520400:"安顺市",520402:"西秀区",520421:"平坝县",520422:"普定县",520423:"镇宁布依族苗族自治县",520424:"关岭布依族苗族自治县",520425:"紫云苗族布依族自治县",520426:"其它区",522200:"铜仁市",522201:"碧江区",522222:"江口县",522223:"玉屏侗族自治县",522224:"石阡县",522225:"思南县",522226:"印江土家族苗族自治县",522227:"德江县",522228:"沿河土家族自治县",522229:"松桃苗族自治县",522230:"万山区",522231:"其它区",522300:"黔西南布依族苗族自治州",522301:"兴义市",522322:"兴仁县",522323:"普安县",522324:"晴隆县",522325:"贞丰县",522326:"望谟县",522327:"册亨县",522328:"安龙县",522329:"其它区",522400:"毕节市",522401:"七星关区",522422:"大方县",522423:"黔西县",522424:"金沙县",522425:"织金县",522426:"纳雍县",522427:"威宁彝族回族苗族自治县",522428:"赫章县",522429:"其它区",522600:"黔东南苗族侗族自治州",522601:"凯里市",522622:"黄平县",522623:"施秉县",522624:"三穗县",522625:"镇远县",522626:"岑巩县",522627:"天柱县",522628:"锦屏县",522629:"剑河县",522630:"台江县",522631:"黎平县",522632:"榕江县",522633:"从江县",522634:"雷山县",522635:"麻江县",522636:"丹寨县",522637:"其它区",522700:"黔南布依族苗族自治州",522701:"都匀市",522702:"福泉市",522722:"荔波县",522723:"贵定县",522725:"瓮安县",522726:"独山县",522727:"平塘县",522728:"罗甸县",522729:"长顺县",522730:"龙里县",522731:"惠水县",522732:"三都水族自治县",522733:"其它区",53e4:"云南省",530100:"昆明市",530102:"五华区",530103:"盘龙区",530111:"官渡区",530112:"西山区",530113:"东川区",530121:"呈贡区",530122:"晋宁县",530124:"富民县",530125:"宜良县",530126:"石林彝族自治县",530127:"嵩明县",530128:"禄劝彝族苗族自治县",530129:"寻甸回族彝族自治县",530181:"安宁市",530182:"其它区",530300:"曲靖市",530302:"麒麟区",530321:"马龙县",530322:"陆良县",530323:"师宗县",530324:"罗平县",530325:"富源县",530326:"会泽县",530328:"沾益县",530381:"宣威市",530382:"其它区",530400:"玉溪市",530402:"红塔区",530421:"江川县",530422:"澄江县",530423:"通海县",530424:"华宁县",530425:"易门县",530426:"峨山彝族自治县",530427:"新平彝族傣族自治县",530428:"元江哈尼族彝族傣族自治县",530429:"其它区",530500:"保山市",530502:"隆阳区",530521:"施甸县",530522:"腾冲县",530523:"龙陵县",530524:"昌宁县",530525:"其它区",530600:"昭通市",530602:"昭阳区",530621:"鲁甸县",530622:"巧家县",530623:"盐津县",530624:"大关县",530625:"永善县",530626:"绥江县",530627:"镇雄县",530628:"彝良县",530629:"威信县",530630:"水富县",530631:"其它区",530700:"丽江市",530702:"古城区",530721:"玉龙纳西族自治县",530722:"永胜县",530723:"华坪县",530724:"宁蒗彝族自治县",530725:"其它区",530800:"普洱市",530802:"思茅区",530821:"宁洱哈尼族彝族自治县",530822:"墨江哈尼族自治县",530823:"景东彝族自治县",530824:"景谷傣族彝族自治县",530825:"镇沅彝族哈尼族拉祜族自治县",530826:"江城哈尼族彝族自治县",530827:"孟连傣族拉祜族佤族自治县",530828:"澜沧拉祜族自治县",530829:"西盟佤族自治县",530830:"其它区",530900:"临沧市",530902:"临翔区",530921:"凤庆县",530922:"云县",530923:"永德县",530924:"镇康县",530925:"双江拉祜族佤族布朗族傣族自治县",530926:"耿马傣族佤族自治县",530927:"沧源佤族自治县",530928:"其它区",532300:"楚雄彝族自治州",532301:"楚雄市",532322:"双柏县",532323:"牟定县",532324:"南华县",532325:"姚安县",532326:"大姚县",532327:"永仁县",532328:"元谋县",532329:"武定县",532331:"禄丰县",532332:"其它区",532500:"红河哈尼族彝族自治州",532501:"个旧市",532502:"开远市",532522:"蒙自市",532523:"屏边苗族自治县",532524:"建水县",532525:"石屏县",532526:"弥勒市",532527:"泸西县",532528:"元阳县",532529:"红河县",532530:"金平苗族瑶族傣族自治县",532531:"绿春县",532532:"河口瑶族自治县",532533:"其它区",532600:"文山壮族苗族自治州",532621:"文山市",532622:"砚山县",532623:"西畴县",532624:"麻栗坡县",532625:"马关县",532626:"丘北县",532627:"广南县",532628:"富宁县",532629:"其它区",532800:"西双版纳傣族自治州",532801:"景洪市",532822:"勐海县",532823:"勐腊县",532824:"其它区",532900:"大理白族自治州",532901:"大理市",532922:"漾濞彝族自治县",532923:"祥云县",532924:"宾川县",532925:"弥渡县",532926:"南涧彝族自治县",532927:"巍山彝族回族自治县",532928:"永平县",532929:"云龙县",532930:"洱源县",532931:"剑川县",532932:"鹤庆县",532933:"其它区",533100:"德宏傣族景颇族自治州",533102:"瑞丽市",533103:"芒市",533122:"梁河县",533123:"盈江县",533124:"陇川县",533125:"其它区",533300:"怒江傈僳族自治州",533321:"泸水县",533323:"福贡县",533324:"贡山独龙族怒族自治县",533325:"兰坪白族普米族自治县",533326:"其它区",533400:"迪庆藏族自治州",533421:"香格里拉县",533422:"德钦县",533423:"维西傈僳族自治县",533424:"其它区",54e4:"西藏自治区",540100:"拉萨市",540102:"城关区",540121:"林周县",540122:"当雄县",540123:"尼木县",540124:"曲水县",540125:"堆龙德庆县",540126:"达孜县",540127:"墨竹工卡县",540128:"其它区",542100:"昌都地区",542121:"昌都县",542122:"江达县",542123:"贡觉县",542124:"类乌齐县",542125:"丁青县",542126:"察雅县",542127:"八宿县",542128:"左贡县",542129:"芒康县",542132:"洛隆县",542133:"边坝县",542134:"其它区",542200:"山南地区",542221:"乃东县",542222:"扎囊县",542223:"贡嘎县",542224:"桑日县",542225:"琼结县",542226:"曲松县",542227:"措美县",542228:"洛扎县",542229:"加查县",542231:"隆子县",542232:"错那县",542233:"浪卡子县",542234:"其它区",542300:"日喀则地区",542301:"日喀则市",542322:"南木林县",542323:"江孜县",542324:"定日县",542325:"萨迦县",542326:"拉孜县",542327:"昂仁县",542328:"谢通门县",542329:"白朗县",542330:"仁布县",542331:"康马县",542332:"定结县",542333:"仲巴县",542334:"亚东县",542335:"吉隆县",542336:"聂拉木县",542337:"萨嘎县",542338:"岗巴县",542339:"其它区",542400:"那曲地区",542421:"那曲县",542422:"嘉黎县",542423:"比如县",542424:"聂荣县",542425:"安多县",542426:"申扎县",542427:"索县",542428:"班戈县",542429:"巴青县",542430:"尼玛县",542431:"其它区",542432:"双湖县",542500:"阿里地区",542521:"普兰县",542522:"札达县",542523:"噶尔县",542524:"日土县",542525:"革吉县",542526:"改则县",542527:"措勤县",542528:"其它区",542600:"林芝地区",542621:"林芝县",542622:"工布江达县",542623:"米林县",542624:"墨脱县",542625:"波密县",542626:"察隅县",542627:"朗县",542628:"其它区",61e4:"陕西省",610100:"西安市",610102:"新城区",610103:"碑林区",610104:"莲湖区",610111:"灞桥区",610112:"未央区",610113:"雁塔区",610114:"阎良区",610115:"临潼区",610116:"长安区",610122:"蓝田县",610124:"周至县",610125:"户县",610126:"高陵县",610127:"其它区",610200:"铜川市",610202:"王益区",610203:"印台区",610204:"耀州区",610222:"宜君县",610223:"其它区",610300:"宝鸡市",610302:"渭滨区",610303:"金台区",610304:"陈仓区",610322:"凤翔县",610323:"岐山县",610324:"扶风县",610326:"眉县",610327:"陇县",610328:"千阳县",610329:"麟游县",610330:"凤县",610331:"太白县",610332:"其它区",610400:"咸阳市",610402:"秦都区",610403:"杨陵区",610404:"渭城区",610422:"三原县",610423:"泾阳县",610424:"乾县",610425:"礼泉县",610426:"永寿县",610427:"彬县",610428:"长武县",610429:"旬邑县",610430:"淳化县",610431:"武功县",610481:"兴平市",610482:"其它区",610500:"渭南市",610502:"临渭区",610521:"华县",610522:"潼关县",610523:"大荔县",610524:"合阳县",610525:"澄城县",610526:"蒲城县",610527:"白水县",610528:"富平县",610581:"韩城市",610582:"华阴市",610583:"其它区",610600:"延安市",610602:"宝塔区",610621:"延长县",610622:"延川县",610623:"子长县",610624:"安塞县",610625:"志丹县",610626:"吴起县",610627:"甘泉县",610628:"富县",610629:"洛川县",610630:"宜川县",610631:"黄龙县",610632:"黄陵县",610633:"其它区",610700:"汉中市",610702:"汉台区",610721:"南郑县",610722:"城固县",610723:"洋县",610724:"西乡县",610725:"勉县",610726:"宁强县",610727:"略阳县",610728:"镇巴县",610729:"留坝县",610730:"佛坪县",610731:"其它区",610800:"榆林市",610802:"榆阳区",610821:"神木县",610822:"府谷县",610823:"横山县",610824:"靖边县",610825:"定边县",610826:"绥德县",610827:"米脂县",610828:"佳县",610829:"吴堡县",610830:"清涧县",610831:"子洲县",610832:"其它区",610900:"安康市",610902:"汉滨区",610921:"汉阴县",610922:"石泉县",610923:"宁陕县",610924:"紫阳县",610925:"岚皋县",610926:"平利县",610927:"镇坪县",610928:"旬阳县",610929:"白河县",610930:"其它区",611e3:"商洛市",611002:"商州区",611021:"洛南县",611022:"丹凤县",611023:"商南县",611024:"山阳县",611025:"镇安县",611026:"柞水县",611027:"其它区",62e4:"甘肃省",620100:"兰州市",620102:"城关区",620103:"七里河区",620104:"西固区",620105:"安宁区",620111:"红古区",620121:"永登县",620122:"皋兰县",620123:"榆中县",620124:"其它区",620200:"嘉峪关市",620300:"金昌市",620302:"金川区",620321:"永昌县",620322:"其它区",620400:"白银市",620402:"白银区",620403:"平川区",620421:"靖远县",620422:"会宁县",620423:"景泰县",620424:"其它区",620500:"天水市",620502:"秦州区",620503:"麦积区",620521:"清水县",620522:"秦安县",620523:"甘谷县",620524:"武山县",620525:"张家川回族自治县",620526:"其它区",620600:"武威市",620602:"凉州区",620621:"民勤县",620622:"古浪县",620623:"天祝藏族自治县",620624:"其它区",620700:"张掖市",620702:"甘州区",620721:"肃南裕固族自治县",620722:"民乐县",620723:"临泽县",620724:"高台县",620725:"山丹县",620726:"其它区",620800:"平凉市",620802:"崆峒区",620821:"泾川县",620822:"灵台县",620823:"崇信县",620824:"华亭县",620825:"庄浪县",620826:"静宁县",620827:"其它区",620900:"酒泉市",620902:"肃州区",620921:"金塔县",620922:"瓜州县",620923:"肃北蒙古族自治县",620924:"阿克塞哈萨克族自治县",620981:"玉门市",620982:"敦煌市",620983:"其它区",621e3:"庆阳市",621002:"西峰区",621021:"庆城县",621022:"环县",621023:"华池县",621024:"合水县",621025:"正宁县",621026:"宁县",621027:"镇原县",621028:"其它区",621100:"定西市",621102:"安定区",621121:"通渭县",621122:"陇西县",621123:"渭源县",621124:"临洮县",621125:"漳县",621126:"岷县",621127:"其它区",621200:"陇南市",621202:"武都区",621221:"成县",621222:"文县",621223:"宕昌县",621224:"康县",621225:"西和县",621226:"礼县",621227:"徽县",621228:"两当县",621229:"其它区",622900:"临夏回族自治州",622901:"临夏市",622921:"临夏县",622922:"康乐县",622923:"永靖县",622924:"广河县",622925:"和政县",622926:"东乡族自治县",622927:"积石山保安族东乡族撒拉族自治县",622928:"其它区",623e3:"甘南藏族自治州",623001:"合作市",623021:"临潭县",623022:"卓尼县",623023:"舟曲县",623024:"迭部县",623025:"玛曲县",623026:"碌曲县",623027:"夏河县",623028:"其它区",63e4:"青海省",630100:"西宁市",630102:"城东区",630103:"城中区",630104:"城西区",630105:"城北区",630121:"大通回族土族自治县",630122:"湟中县",630123:"湟源县",630124:"其它区",632100:"海东市",632121:"平安县",632122:"民和回族土族自治县",632123:"乐都区",632126:"互助土族自治县",632127:"化隆回族自治县",632128:"循化撒拉族自治县",632129:"其它区",632200:"海北藏族自治州",632221:"门源回族自治县",632222:"祁连县",632223:"海晏县",632224:"刚察县",632225:"其它区",632300:"黄南藏族自治州",632321:"同仁县",632322:"尖扎县",632323:"泽库县",632324:"河南蒙古族自治县",632325:"其它区",632500:"海南藏族自治州",632521:"共和县",632522:"同德县",632523:"贵德县",632524:"兴海县",632525:"贵南县",632526:"其它区",632600:"果洛藏族自治州",632621:"玛沁县",632622:"班玛县",632623:"甘德县",632624:"达日县",632625:"久治县",632626:"玛多县",632627:"其它区",632700:"玉树藏族自治州",632721:"玉树市",632722:"杂多县",632723:"称多县",632724:"治多县",632725:"囊谦县",632726:"曲麻莱县",632727:"其它区",632800:"海西蒙古族藏族自治州",632801:"格尔木市",632802:"德令哈市",632821:"乌兰县",632822:"都兰县",632823:"天峻县",632824:"其它区",64e4:"宁夏回族自治区",640100:"银川市",640104:"兴庆区",640105:"西夏区",640106:"金凤区",640121:"永宁县",640122:"贺兰县",640181:"灵武市",640182:"其它区",640200:"石嘴山市",640202:"大武口区",640205:"惠农区",640221:"平罗县",640222:"其它区",640300:"吴忠市",640302:"利通区",640303:"红寺堡区",640323:"盐池县",640324:"同心县",640381:"青铜峡市",640382:"其它区",640400:"固原市",640402:"原州区",640422:"西吉县",640423:"隆德县",640424:"泾源县",640425:"彭阳县",640426:"其它区",640500:"中卫市",640502:"沙坡头区",640521:"中宁县",640522:"海原县",640523:"其它区",65e4:"新疆维吾尔自治区",650100:"乌鲁木齐市",650102:"天山区",650103:"沙依巴克区",650104:"新市区",650105:"水磨沟区",650106:"头屯河区",650107:"达坂城区",650109:"米东区",650121:"乌鲁木齐县",650122:"其它区",650200:"克拉玛依市",650202:"独山子区",650203:"克拉玛依区",650204:"白碱滩区",650205:"乌尔禾区",650206:"其它区",652100:"吐鲁番地区",652101:"吐鲁番市",652122:"鄯善县",652123:"托克逊县",652124:"其它区",652200:"哈密地区",652201:"哈密市",652222:"巴里坤哈萨克自治县",652223:"伊吾县",652224:"其它区",652300:"昌吉回族自治州",652301:"昌吉市",652302:"阜康市",652323:"呼图壁县",652324:"玛纳斯县",652325:"奇台县",652327:"吉木萨尔县",652328:"木垒哈萨克自治县",652329:"其它区",652700:"博尔塔拉蒙古自治州",652701:"博乐市",652702:"阿拉山口市",652722:"精河县",652723:"温泉县",652724:"其它区",652800:"巴音郭楞蒙古自治州",652801:"库尔勒市",652822:"轮台县",652823:"尉犁县",652824:"若羌县",652825:"且末县",652826:"焉耆回族自治县",652827:"和静县",652828:"和硕县",652829:"博湖县",652830:"其它区",652900:"阿克苏地区",652901:"阿克苏市",652922:"温宿县",652923:"库车县",652924:"沙雅县",652925:"新和县",652926:"拜城县",652927:"乌什县",652928:"阿瓦提县",652929:"柯坪县",652930:"其它区",653e3:"克孜勒苏柯尔克孜自治州",653001:"阿图什市",653022:"阿克陶县",653023:"阿合奇县",653024:"乌恰县",653025:"其它区",653100:"喀什地区",653101:"喀什市",653121:"疏附县",653122:"疏勒县",653123:"英吉沙县",653124:"泽普县",653125:"莎车县",653126:"叶城县",653127:"麦盖提县",653128:"岳普湖县",653129:"伽师县",653130:"巴楚县",653131:"塔什库尔干塔吉克自治县",653132:"其它区",653200:"和田地区",653201:"和田市",653221:"和田县",653222:"墨玉县",653223:"皮山县",653224:"洛浦县",653225:"策勒县",653226:"于田县",653227:"民丰县",653228:"其它区",654e3:"伊犁哈萨克自治州",654002:"伊宁市",654003:"奎屯市",654021:"伊宁县",654022:"察布查尔锡伯自治县",654023:"霍城县",654024:"巩留县",654025:"新源县",654026:"昭苏县",654027:"特克斯县",654028:"尼勒克县",654029:"其它区",654200:"塔城地区",654201:"塔城市",654202:"乌苏市",654221:"额敏县",654223:"沙湾县",654224:"托里县",654225:"裕民县",654226:"和布克赛尔蒙古自治县",654227:"其它区",654300:"阿勒泰地区",654301:"阿勒泰市",654321:"布尔津县",654322:"富蕴县",654323:"福海县",654324:"哈巴河县",654325:"青河县",654326:"吉木乃县",654327:"其它区",659001:"石河子市",659002:"阿拉尔市",659003:"图木舒克市",659004:"五家渠市",71e4:"台湾",710100:"台北市",710101:"中正区",710102:"大同区",710103:"中山区",710104:"松山区",710105:"大安区",710106:"万华区",710107:"信义区",710108:"士林区",710109:"北投区",710110:"内湖区",710111:"南港区",710112:"文山区",710113:"其它区",710200:"高雄市",710201:"新兴区",710202:"前金区",710203:"芩雅区",710204:"盐埕区",710205:"鼓山区",710206:"旗津区",710207:"前镇区",710208:"三民区",710209:"左营区",710210:"楠梓区",710211:"小港区",710212:"其它区",710241:"苓雅区",710242:"仁武区",710243:"大社区",710244:"冈山区",710245:"路竹区",710246:"阿莲区",710247:"田寮区",710248:"燕巢区",710249:"桥头区",710250:"梓官区",710251:"弥陀区",710252:"永安区",710253:"湖内区",710254:"凤山区",710255:"大寮区",710256:"林园区",710257:"鸟松区",710258:"大树区",710259:"旗山区",710260:"美浓区",710261:"六龟区",710262:"内门区",710263:"杉林区",710264:"甲仙区",710265:"桃源区",710266:"那玛夏区",710267:"茂林区",710268:"茄萣区",710300:"台南市",710301:"中西区",710302:"东区",710303:"南区",710304:"北区",710305:"安平区",710306:"安南区",710307:"其它区",710339:"永康区",710340:"归仁区",710341:"新化区",710342:"左镇区",710343:"玉井区",710344:"楠西区",710345:"南化区",710346:"仁德区",710347:"关庙区",710348:"龙崎区",710349:"官田区",710350:"麻豆区",710351:"佳里区",710352:"西港区",710353:"七股区",710354:"将军区",710355:"学甲区",710356:"北门区",710357:"新营区",710358:"后壁区",710359:"白河区",710360:"东山区",710361:"六甲区",710362:"下营区",710363:"柳营区",710364:"盐水区",710365:"善化区",710366:"大内区",710367:"山上区",710368:"新市区",710369:"安定区",710400:"台中市",710401:"中区",710402:"东区",710403:"南区",710404:"西区",710405:"北区",710406:"北屯区",710407:"西屯区",710408:"南屯区",710409:"其它区",710431:"太平区",710432:"大里区",710433:"雾峰区",710434:"乌日区",710435:"丰原区",710436:"后里区",710437:"石冈区",710438:"东势区",710439:"和平区",710440:"新社区",710441:"潭子区",710442:"大雅区",710443:"神冈区",710444:"大肚区",710445:"沙鹿区",710446:"龙井区",710447:"梧栖区",710448:"清水区",710449:"大甲区",710450:"外埔区",710451:"大安区",710500:"金门县",710507:"金沙镇",710508:"金湖镇",710509:"金宁乡",710510:"金城镇",710511:"烈屿乡",710512:"乌坵乡",710600:"南投县",710614:"南投市",710615:"中寮乡",710616:"草屯镇",710617:"国姓乡",710618:"埔里镇",710619:"仁爱乡",710620:"名间乡",710621:"集集镇",710622:"水里乡",710623:"鱼池乡",710624:"信义乡",710625:"竹山镇",710626:"鹿谷乡",710700:"基隆市",710701:"仁爱区",710702:"信义区",710703:"中正区",710704:"中山区",710705:"安乐区",710706:"暖暖区",710707:"七堵区",710708:"其它区",710800:"新竹市",710801:"东区",710802:"北区",710803:"香山区",710804:"其它区",710900:"嘉义市",710901:"东区",710902:"西区",710903:"其它区",711100:"新北市",711130:"万里区",711131:"金山区",711132:"板桥区",711133:"汐止区",711134:"深坑区",711135:"石碇区",711136:"瑞芳区",711137:"平溪区",711138:"双溪区",711139:"贡寮区",711140:"新店区",711141:"坪林区",711142:"乌来区",711143:"永和区",711144:"中和区",711145:"土城区",711146:"三峡区",711147:"树林区",711148:"莺歌区",711149:"三重区",711150:"新庄区",711151:"泰山区",711152:"林口区",711153:"芦洲区",711154:"五股区",711155:"八里区",711156:"淡水区",711157:"三芝区",711158:"石门区",711200:"宜兰县",711214:"宜兰市",711215:"头城镇",711216:"礁溪乡",711217:"壮围乡",711218:"员山乡",711219:"罗东镇",711220:"三星乡",711221:"大同乡",711222:"五结乡",711223:"冬山乡",711224:"苏澳镇",711225:"南澳乡",711226:"钓鱼台",711300:"新竹县",711314:"竹北市",711315:"湖口乡",711316:"新丰乡",711317:"新埔镇",711318:"关西镇",711319:"芎林乡",711320:"宝山乡",711321:"竹东镇",711322:"五峰乡",711323:"横山乡",711324:"尖石乡",711325:"北埔乡",711326:"峨眉乡",711400:"桃园县",711414:"中坜市",711415:"平镇市",711416:"龙潭乡",711417:"杨梅市",711418:"新屋乡",711419:"观音乡",711420:"桃园市",711421:"龟山乡",711422:"八德市",711423:"大溪镇",711424:"复兴乡",711425:"大园乡",711426:"芦竹乡",711500:"苗栗县",711519:"竹南镇",711520:"头份镇",711521:"三湾乡",711522:"南庄乡",711523:"狮潭乡",711524:"后龙镇",711525:"通霄镇",711526:"苑里镇",711527:"苗栗市",711528:"造桥乡",711529:"头屋乡",711530:"公馆乡",711531:"大湖乡",711532:"泰安乡",711533:"铜锣乡",711534:"三义乡",711535:"西湖乡",711536:"卓兰镇",711700:"彰化县",711727:"彰化市",711728:"芬园乡",711729:"花坛乡",711730:"秀水乡",711731:"鹿港镇",711732:"福兴乡",711733:"线西乡",711734:"和美镇",711735:"伸港乡",711736:"员林镇",711737:"社头乡",711738:"永靖乡",711739:"埔心乡",711740:"溪湖镇",711741:"大村乡",711742:"埔盐乡",711743:"田中镇",711744:"北斗镇",711745:"田尾乡",711746:"埤头乡",711747:"溪州乡",711748:"竹塘乡",711749:"二林镇",711750:"大城乡",711751:"芳苑乡",711752:"二水乡",711900:"嘉义县",711919:"番路乡",711920:"梅山乡",711921:"竹崎乡",711922:"阿里山乡",711923:"中埔乡",711924:"大埔乡",711925:"水上乡",711926:"鹿草乡",711927:"太保市",711928:"朴子市",711929:"东石乡",711930:"六脚乡",711931:"新港乡",711932:"民雄乡",711933:"大林镇",711934:"溪口乡",711935:"义竹乡",711936:"布袋镇",712100:"云林县",712121:"斗南镇",712122:"大埤乡",712123:"虎尾镇",712124:"土库镇",712125:"褒忠乡",712126:"东势乡",712127:"台西乡",712128:"仑背乡",712129:"麦寮乡",712130:"斗六市",712131:"林内乡",712132:"古坑乡",712133:"莿桐乡",712134:"西螺镇",712135:"二仑乡",712136:"北港镇",712137:"水林乡",712138:"口湖乡",712139:"四湖乡",712140:"元长乡",712400:"屏东县",712434:"屏东市",712435:"三地门乡",712436:"雾台乡",712437:"玛家乡",712438:"九如乡",712439:"里港乡",712440:"高树乡",712441:"盐埔乡",712442:"长治乡",712443:"麟洛乡",712444:"竹田乡",712445:"内埔乡",712446:"万丹乡",712447:"潮州镇",712448:"泰武乡",712449:"来义乡",712450:"万峦乡",712451:"崁顶乡",712452:"新埤乡",712453:"南州乡",712454:"林边乡",712455:"东港镇",712456:"琉球乡",712457:"佳冬乡",712458:"新园乡",712459:"枋寮乡",712460:"枋山乡",712461:"春日乡",712462:"狮子乡",712463:"车城乡",712464:"牡丹乡",712465:"恒春镇",712466:"满州乡",712500:"台东县",712517:"台东市",712518:"绿岛乡",712519:"兰屿乡",712520:"延平乡",712521:"卑南乡",712522:"鹿野乡",712523:"关山镇",712524:"海端乡",712525:"池上乡",712526:"东河乡",712527:"成功镇",712528:"长滨乡",712529:"金峰乡",712530:"大武乡",712531:"达仁乡",712532:"太麻里乡",712600:"花莲县",712615:"花莲市",712616:"新城乡",712617:"太鲁阁",712618:"秀林乡",712619:"吉安乡",712620:"寿丰乡",712621:"凤林镇",712622:"光复乡",712623:"丰滨乡",712624:"瑞穗乡",712625:"万荣乡",712626:"玉里镇",712627:"卓溪乡",712628:"富里乡",712700:"澎湖县",712707:"马公市",712708:"西屿乡",712709:"望安乡",712710:"七美乡",712711:"白沙乡",712712:"湖西乡",712800:"连江县",712805:"南竿乡",712806:"北竿乡",712807:"莒光乡",712808:"东引乡",81e4:"香港特别行政区",810100:"香港岛",810101:"中西区",810102:"湾仔",810103:"东区",810104:"南区",810200:"九龙",810201:"九龙城区",810202:"油尖旺区",810203:"深水埗区",810204:"黄大仙区",810205:"观塘区",810300:"新界",810301:"北区",810302:"大埔区",810303:"沙田区",810304:"西贡区",810305:"元朗区",810306:"屯门区",810307:"荃湾区",810308:"葵青区",810309:"离岛区",82e4:"澳门特别行政区",820100:"澳门半岛",820200:"离岛",99e4:"海外",990100:"海外"};const Zt=Object.keys(Xt),Qt=Object.entries(Xt).map((([e,n])=>{let t="0000"===e.slice(2,6)?e:"00"===e.slice(4,6)?e.slice(0,2)+"0000":e.slice(0,4)+"00";return Zt.includes(t)||(t=e.slice(0,2)+"0000"),{id:e,pid:t,name:n}})),er=function(e){const n=[],{result:t,mapped:r}=e.reduce(((e,t)=>{const{mapped:r,result:a}=e,{id:o,pid:u}=t;if(r[o]=t,u===o)return a.push(t),{mapped:r,result:a};if(!r.hasOwnProperty(u))return n.push(t),{mapped:r,result:a};const l=r[u];return l.children=[...l.children||[],t],{mapped:r,result:a}}),{mapped:{},result:[]});return n.forEach((e=>{const n=r[e.pid];n.children=[...n.children||[],e]})),t}(Qt);var nr={yyyy:"getFullYear",yy:function(e){return(""+e.getFullYear()).slice(2)},y:"yy",MM:function(e){const n=e.getMonth()+1;return n<10?"0"+n:n},M:function(e){return e.getMonth()+1},dd:function(e){const n=e.getDate();return n<10?"0"+n:n},d:"getDate",HH:function(e){const n=e.getHours();return n<10?"0"+n:n},H:"getHours",hh:function(e){const n=e.getHours()%12;return n<10?"0"+n:n},h:function(e){return e.getHours()%12},mm:function(e){const n=e.getMinutes();return n<10?"0"+n:n},m:"getMinutes",ss:function(e){const n=e.getSeconds();return n<10?"0"+n:n},s:"getSeconds",SS:function(e){const n=e.getMilliseconds();return n<10&&"00"+n||n<100&&"0"+n||n},S:"getMilliseconds",A:function(e){return e.getHours()<12?"AM":"PM"},a:function(e){return e.getHours()<12?"am":"pm"},T:"getTime"};const tr=new RegExp(`(${Object.keys(nr).join("|")})`,"g");function rr(e="yyyy-MM-dd"){return ar(or(),e)}function ar(e,n){return n.replace(tr,(function n(t,r){const a=nr[r];return"function"==typeof a?a(e):a in nr?n(t,a):e[a]()}))}function or(e=new Date(0),n=new Date){return new Date(Zn(e.getTime(),n.getTime()))}let ur=0;const lr=function(e){return ur+=+e||1},cr=lr;function ir(e=12,n=18){return dn(Bn(Cn(e,n),(()=>hr())).join(" "))+"."}function hr(e=3,n=10){return Bn(Cn(e,n),(()=>rt("lower"))).join("")}function sr(e=12,n=18){return Bn(Cn(e,n),(()=>mr())).join("")+"。"}const fr="的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严龙飞";function mr(...e){let n,t,r=1,a=fr;switch(e.length){case 0:break;case 1:"string"==typeof e[0]?[a]=e:[r]=e;break;case 2:"string"==typeof e[0]?[a,r]=e:([n,t]=e,r=Qn(n,t));break;case 3:[a,n,t]=e,r=Qn(n,t)}return qn(a,r).join("")}const dr="http ftp gopher mailto mid cid news nntp prospero telnet rlogin tn3270 wais".split(" "),pr="com net org edu gov int mil cn com.cn net.cn gov.cn org.cn 中国 中国互联.公司 中国互联.网络 tel biz cc tv info name hk mobi asia cd travel pro museum coop aero ad ae af ag ai al am an ao aq ar as at au aw az ba bb bd be bf bg bh bi bj bm bn bo br bs bt bv bw by bz ca cc cf cg ch ci ck cl cm cn co cq cr cu cv cx cy cz de dj dk dm do dz ec ee eg eh es et ev fi fj fk fm fo fr ga gb gd ge gf gh gi gl gm gn gp gr gt gu gw gy hk hm hn hr ht hu id ie il in io iq ir is it jm jo jp ke kg kh ki km kn kp kr kw ky kz la lb lc li lk lr ls lt lu lv ly ma mc md mg mh ml mm mn mo mp mq mr ms mt mv mw mx my mz na nc ne nf ng ni nl no np nr nt nu nz om qa pa pe pf pg ph pk pl pm pn pr pt pw py re ro ru rw sa sb sc sd se sg sh si sj sk sl sm sn so sr st su sy sz tc td tf tg th tj tk tm tn to tp tr tt tv tw tz ua ug uk us uy va vc ve vg vn vu wf ws ye yu za zm zr zw".split(" ");function br(){return jt(dr)}function xr(e){return`${hr()}.${e||gr()}`}function gr(){return jt(pr)}var vr={_adSize:["300x250","250x250","240x400","336x280","180x150","720x300","468x60","234x60","88x31","120x90","120x60","120x240","125x125","728x90","160x600","120x600","300x600"],_screenSize:["320x200","320x240","640x480","800x480","800x480","1024x600","1024x768","1280x800","1440x900","1920x1200","2560x1600"],_videoSize:["720x480","768x576","1280x720","1920x1080"]},yr={"4ormat":"#fb0a2a","500px":"#02adea","About.me (blue)":"#00405d","About.me (yellow)":"#ffcc33",Addvocate:"#ff6138",Adobe:"#ff0000",Aim:"#fcd20b",Amazon:"#e47911",Android:"#a4c639","Angie's List":"#7fbb00",AOL:"#0060a3",Atlassian:"#003366",Behance:"#053eff","Big Cartel":"#97b538",bitly:"#ee6123",Blogger:"#fc4f08",Boeing:"#0039a6","Booking.com":"#003580",Carbonmade:"#613854",Cheddar:"#ff7243","Code School":"#3d4944",Delicious:"#205cc0",Dell:"#3287c1",Designmoo:"#e54a4f",Deviantart:"#4e6252","Designer News":"#2d72da",Devour:"#fd0001",DEWALT:"#febd17","Disqus (blue)":"#59a3fc","Disqus (orange)":"#db7132",Dribbble:"#ea4c89",Dropbox:"#3d9ae8",Drupal:"#0c76ab",Dunked:"#2a323a",eBay:"#89c507",Ember:"#f05e1b",Engadget:"#00bdf6",Envato:"#528036",Etsy:"#eb6d20",Evernote:"#5ba525","Fab.com":"#dd0017",Facebook:"#3b5998",Firefox:"#e66000","Flickr (blue)":"#0063dc","Flickr (pink)":"#ff0084",Forrst:"#5b9a68",Foursquare:"#25a0ca",Garmin:"#007cc3",GetGlue:"#2d75a2",Gimmebar:"#f70078",GitHub:"#171515","Google Blue":"#0140ca","Google Green":"#16a61e","Google Red":"#dd1812","Google Yellow":"#fcca03","Google+":"#dd4b39",Grooveshark:"#f77f00",Groupon:"#82b548","Hacker News":"#ff6600",HelloWallet:"#0085ca","Heroku (light)":"#c7c5e6","Heroku (dark)":"#6567a5",HootSuite:"#003366",Houzz:"#73ba37",HTML5:"#ec6231",IKEA:"#ffcc33",IMDb:"#f3ce13",Instagram:"#3f729b",Intel:"#0071c5",Intuit:"#365ebf",Kickstarter:"#76cc1e",kippt:"#e03500",Kodery:"#00af81",LastFM:"#c3000d",LinkedIn:"#0e76a8",Livestream:"#cf0005",Lumo:"#576396",Mixpanel:"#a086d3",Meetup:"#e51937",Nokia:"#183693",NVIDIA:"#76b900",Opera:"#cc0f16",Path:"#e41f11","PayPal (dark)":"#1e477a","PayPal (light)":"#3b7bbf",Pinboard:"#0000e6",Pinterest:"#c8232c",PlayStation:"#665cbe",Pocket:"#ee4056",Prezi:"#318bff",Pusha:"#0f71b4",Quora:"#a82400","QUOTE.fm":"#66ceff",Rdio:"#008fd5",Readability:"#9c0000","Red Hat":"#cc0000",Resource:"#7eb400",Rockpack:"#0ba6ab",Roon:"#62b0d9",RSS:"#ee802f",Salesforce:"#1798c1",Samsung:"#0c4da2",Shopify:"#96bf48",Skype:"#00aff0",Snagajob:"#f47a20",Softonic:"#008ace",SoundCloud:"#ff7700","Space Box":"#f86960",Spotify:"#81b71a",Sprint:"#fee100",Squarespace:"#121212",StackOverflow:"#ef8236",Staples:"#cc0000","Status Chart":"#d7584f",Stripe:"#008cdd",StudyBlue:"#00afe1",StumbleUpon:"#f74425","T-Mobile":"#ea0a8e",Technorati:"#40a800","The Next Web":"#ef4423",Treehouse:"#5cb868",Trulia:"#5eab1f",Tumblr:"#34526f","Twitch.tv":"#6441a5",Twitter:"#00acee",TYPO3:"#ff8700",Ubuntu:"#dd4814",Ustream:"#3388ff",Verizon:"#ef1d1d",Vimeo:"#86c9ef",Vine:"#00a478",Virb:"#06afd8","Virgin Media":"#cc0000",Wooga:"#5b009c","WordPress (blue)":"#21759b","WordPress (orange)":"#d54e21","WordPress (grey)":"#464646",Wunderlist:"#2b88d9",XBOX:"#9bc848",XING:"#126567","Yahoo!":"#720e9e",Yandex:"#ffcc00",Yelp:"#c41200",YouTube:"#c4302b",Zalongo:"#5498dc",Zendesk:"#78a300",Zerply:"#9dcc7a",Zootool:"#5e8b1d"};const{_adSize:wr,_screenSize:kr,_videoSize:Ar}=vr,Mr=Object.keys(yr);function Cr(...e){let n,t,r,a,o;switch(arguments.length){case 4:[n,t,r,o]=e;break;case 3:[n,t,o]=e;break;default:[n,t,r,a,o]=e}return n||(n=jt(wr)),r=(r||_t()).replace(/^#/,""),t=(t||_t()).replace(/^#/,""),`http://dummyimage.com/${n}${t?"/"+t:""}${r?"/"+r:""}${a?"."+a:""}${o?"&text="+o:""}`}const jr=["东北","华北","华东","华中","华南","西南","西北"];function Er(e){let n;if("array"===In(e))n=e;else n=[e];return n}var Or=Object.freeze({__proto__:null,integer:Zn,isNumber:Vn,random:Cn,natural:Qn,int:Zn,float:et,boolean:nt,bool:nt,character:rt,char:rt,string:at,str:at,range:Sn,color:function(e){return e||Ct[e]?Ct[e].nicer:jt(Rt).hex},hex:_t,rgb:function(){return Ft().hsv().string()},rgba:function(){return Ft().alpha(Math.random().toFixed(2)).hsv().string()},hsl:function(){return Ft().hsl().string()},_goldenRatioColor:Ft,first:Lt,last:Ht,name:function(e){return e=e?` ${Lt()} `:" ",`${Lt()}${e}${Ht()}`},cfirst:Nt,clast:Bt,cname:function(){return Nt()+Bt()},capitalize:dn,upper:function(e){return(e+"").toUpperCase()},lower:function(e){return(e+"").toLowerCase()},pick:jt,shuffle:Et,order:St,d4:function(){return Qn(1,4)},d6:function(){return Qn(1,6)},d8:function(){return Qn(1,8)},d12:function(){return Qn(1,12)},d20:function(){return Qn(1,20)},d100:function(){return Qn(1,100)},guid:function(){return Vt().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/,"-")},uuid:Vt,id:function(){let e,n=0;const t=["7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"];e=jt(er).id+rr("yyyyMMdd")+at("number",3);for(let r=0;rir())).join("\n")},word:hr,sentence:ir,title:function(e=3,n=7){return Bn(Cn(e,n),(()=>dn(hr()))).join("")},ctitle:function(e=3,n=7){return Bn(Cn(e,n),(()=>mr())).join("")},csentence:sr,cparagraph:function(e=3,n=7){return Bn(Cn(e,n),(()=>sr())).join("\n")},cword:mr,protocol:br,domain:xr,tld:gr,email:function(e){return`${rt("lower")}.${hr()}@${e||hr()+"."+gr()}`},ip:function(){return[...Array(4)].map((()=>Qn(0,255))).join(".")},url:function(e,n){return`${e||br()}://${n||xr()}/${hr()}`},_patternLetters:nr,_rformat:tr,_formatDate:ar,_randomDate:or,time:function(e="HH:mm:ss"){return rr(e)},datetime:function(e="yyyy-MM-dd HH:mm:ss"){return rr(e)},date:rr,now:function(e,n){1===arguments.length&&(/year|month|day|hour|minute|second|week/.test(e)||(n=e,e="")),e=(e||"").toLowerCase(),n=n||"yyyy-MM-dd HH:mm:ss";const t=new Date;switch(e){case"year":t.setMonth(0);case"month":t.setDate(1);case"week":case"day":t.setHours(0);case"hour":t.setMinutes(0);case"minute":t.setSeconds(0);case"second":t.setMilliseconds(0)}if("week"===e)t.setDate(t.getDate()-t.getDay());return ar(t,n)},timestamp:function(e,n){return e instanceof Date&&n instanceof Date?or(e,n).getTime():or().getTime()},_adSize:wr,_screenSize:kr,_videoSize:Ar,image:Cr,img:Cr,_brandColors:yr,_brandNames:Mr,dataImage:function(e,n){let t;if("undefined"!=typeof document)t=document.createElement("canvas");else{t=new(module.require("canvas"))}const r=t&&t.getContext&&t.getContext("2d");if(!t||!r)return"";e||(e=jt(wr)),n=void 0!==n?n:e,e=e.split("x");const a=parseInt(e[0],10),o=parseInt(e[1],10),u=yr[jt(Mr)];return t.width=a,t.height=o,r.textAlign="center",r.textBaseline="middle",r.fillStyle=u,r.fillRect(0,0,a,o),r.fillStyle="#FFF",r.font="bold 14px sans-serif",r.fillText(n,a/2,o/2,a),t.toDataURL("image/png")},region:function(){return jt(jr)},province:function(){return jt(er).name},city:function(e){const n=jt(er),t=jt(n.children);return e?[n.name,t.name].join(" "):t.name},county:function(e){const n=jt(er),t=jt(n.children),r=jt(t.children)||{name:"-"};return e?[n.name,t.name,r.name].join(" "):r.name},zip:function(e){let n="";for(let t=0;t<(e||6);t++)n+=Qn(0,9);return n},genFile:function(e){return new File(Er(e),hr())},genBlob:function(e){return new Blob(Er(e))}}),Sr={GUID:1,RE_KEY:/(.+)\|(?:\+(\d+)|([\+\-]?\d+-?[\+\-]?\d*)?(?:\.(\d+-?\d*))?)/,RE_RANGE:/([\+\-]?\d+)-?([\+\-]?\d+)?/,RE_PLACEHOLDER:/\\*@([^@#%&()\?\s]+)(?:\((.*?)\))?/g};function Rr(e=""){"string"!=typeof e&&(e+="");const n=e.match(Sr.RE_KEY),t=n&&n[3]&&n[3].match(Sr.RE_RANGE),r=t&&t[1]&&parseInt(t[1],10),a=t&&t[2]&&parseInt(t[2],10),o=t?t[2]?Zn(r,a):parseInt(t[1],10):void 0,u=n&&n[4]&&n[4].match(Sr.RE_RANGE),l=u&&u[1]&&parseInt(u[1],10),c=u&&u[2]&&parseInt(u[2],10),i={parameters:n,range:t,min:r,max:a,count:o,decimal:u,dmin:l,dmax:c,dcount:u?!u[2]&&parseInt(u[1],10)||Zn(l,c):void 0},h=Object.keys(i).some((e=>void 0!==e));return h?i:{}}function Tr({name:e,rule:{min:n,max:t,parameters:r,count:a},template:o,context:{path:u,templatePath:l,root:c,templateRoot:i}}){let h=[];return 0===o.length?[]:(r?1===n&&void 0===t?h=jt(ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})):r[2]?(o.__order_index=o.__order_index||0,h=ga(o,void 0,{path:[...u,e],templatePath:[...l,e],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o})[o.__order_index%o.length],o.__order_index+=+r[2]):[...Array(a).keys()].forEach((()=>{o.forEach(((e,n)=>{h.push(ga(e,h.length,{path:[...u,h.length],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))}))})):o.forEach(((e,n)=>{h.push(ga(e,n,{path:[...u,n],templatePath:[...l,n],currentContext:h,templateCurrentContext:o,root:c||h,templateRoot:i||o}))})),h)}function Fr({rule:{max:e,min:n,parameters:t},template:r=""}){return t?nt(n,e,r):r}function _r(e){const{template:n,context:{currentContext:t}}=e;return n.call(t,e)}function $r({rule:{decimal:e,range:n,count:t,dcount:r=0,parameters:a},template:o=""}){let u;return e?a.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/,(function(e,n,t,r,a){u=et(n,t,r,a)})):u=n&&!a[2]?t:o,u}function Dr({template:e,rule:{min:n,count:t},context:{path:r,templatePath:a,root:o,templateRoot:u}}){const l={};let c=[];const i=[];if(null!=n)c=Et(Object.keys(e)).slice(0,t),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e})}));else{for(const n in e)("function"==typeof e[n]?i:c).push(n);c=c.concat(i),c.forEach((n=>{const t=n.replace(Sr.RE_KEY,"$1");l[t]=ga(e[n],n,{path:[...r,t],templatePath:[...a,n],currentContext:l,templateCurrentContext:e,root:o||l,templateRoot:u||e});const c=n.match(Sr.RE_KEY);c&&c[2]&&"number"===In(e[n])&&(e[n]+=parseInt(c[2],10))}))}return l}function qr(e){this.type=e,this.offset=qr.offset(),this.text=qr.text()}function Pr(e,n){qr.call(this,"alternate"),this.left=e,this.right=n}function zr(e){qr.call(this,"match"),this.body=e.filter(Boolean)}function Lr(e,n){qr.call(this,e),this.body=n}function Hr(e){Lr.call(this,"capture-group"),this.index=Qr[this.offset]||(Qr[this.offset]=Zr++),this.body=e}function Nr(e,n){qr.call(this,"quantified"),this.body=e,this.quantifier=n}function Br(e,n){qr.call(this,"quantifier"),this.min=e,this.max=n,this.greedy=!0}function Ir(e,n){qr.call(this,"charset"),this.invert=e,this.body=n}function Ur(e,n){qr.call(this,"range"),this.start=e,this.end=n}function Gr(e){qr.call(this,"literal"),this.body=e,this.escaped=this.body!=this.text}function Wr(e){qr.call(this,"unicode"),this.code=e.toUpperCase()}function Jr(e){qr.call(this,"hex"),this.code=e.toUpperCase()}function Kr(e){qr.call(this,"octal"),this.code=e.toUpperCase()}function Yr(e){qr.call(this,"back-reference"),this.code=e.toUpperCase()}function Vr(e){qr.call(this,"control-character"),this.code=e.toUpperCase()}var Xr=function(){function e(e,n,t,r,a){this.expected=e,this.found=n,this.offset=t,this.line=r,this.column=a,this.name="SyntaxError",this.message=function(e,n){var t,r;switch(e.length){case 0:t="end of input";break;case 1:t=e[0];break;default:t=e.slice(0,-1).join(", ")+" or "+e[e.length-1]}return r=n?'"'+function(e){function n(e){return e.charCodeAt(0).toString(16).toUpperCase()}return e.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\x08/g,"\\b").replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\f/g,"\\f").replace(/\r/g,"\\r").replace(/[\x00-\x07\x0B\x0E\x0F]/g,(function(e){return"\\x0"+n(e)})).replace(/[\x10-\x1F\x80-\xFF]/g,(function(e){return"\\x"+n(e)})).replace(/[\u0180-\u0FFF]/g,(function(e){return"\\u0"+n(e)})).replace(/[\u1080-\uFFFF]/g,(function(e){return"\\u"+n(e)}))}(n)+'"':"end of input","Expected "+t+" but "+r+" found."}(e,n)}return function(e,n){function t(){this.constructor=e}t.prototype=n.prototype,e.prototype=new t}(e,Error),{SyntaxError:e,parse:function(n){function t(e){return Et!==e&&(Et>e&&(Et=0,Ot={line:1,column:1,seenCR:!1}),function(e,t,r){var a,o;for(a=t;r>a;a++)"\n"===(o=n.charAt(a))?(e.seenCR||e.line++,e.column=1,e.seenCR=!1):"\r"===o||"\u2028"===o||"\u2029"===o?(e.line++,e.column=1,e.seenCR=!0):(e.column++,e.seenCR=!1)}(Ot,Et,e),Et=e),Ot}function r(e){St>Ct||(Ct>St&&(St=Ct,Rt=[]),Rt.push(e))}function a(){var e,t,h,s,f;return e=Ct,t=function(){var e,n,t,r,a;if(e=Ct,n=u(),null===n&&(n=X),null!==n)if(t=Ct,Tt++,r=i(),Tt--,null===r?t=X:(Ct=t,t=V),null!==t){for(r=[],null===(a=c())&&(a=o());null!==a;)r.push(a),null===(a=c())&&(a=o());null!==r?(null===(a=l())&&(a=X),null!==a?(jt=e,null===(n=ne(n,r,a))?(Ct=e,e=n):e=n):(Ct=e,e=V)):(Ct=e,e=V)}else Ct=e,e=V;else Ct=e,e=V;return e}(),null!==t?(h=Ct,124===n.charCodeAt(Ct)?(s=Z,Ct++):(s=null,0===Tt&&r(Q)),null!==s?null!==(f=a())?h=s=[s,f]:(Ct=h,h=V):(Ct=h,h=V),null===h&&(h=X),null!==h?(jt=e,null===(t=ee(t,h))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}function o(){var e;return null===(e=g())&&(null===(e=v())&&(e=function(){var e;return e=A(),null===e&&(e=function(){var e;return e=j(),null===e&&(e=E(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=H(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))))),e}(),null===e&&(e=M())),e}())),e}function u(){var e,t;return e=Ct,94===n.charCodeAt(Ct)?(t=te,Ct++):(t=null,0===Tt&&r(re)),null!==t&&(jt=e,t=ae()),null===t?(Ct=e,e=t):e=t,e}function l(){var e,t;return e=Ct,36===n.charCodeAt(Ct)?(t=oe,Ct++):(t=null,0===Tt&&r(ue)),null!==t&&(jt=e,t=le()),null===t?(Ct=e,e=t):e=t,e}function c(){var e,n,t;return e=Ct,null!==(n=o())?null!==(t=i())?(jt=e,null===(n=ce(n,t))?(Ct=e,e=n):e=n):(Ct=e,e=V):(Ct=e,e=V),e}function i(){var e,n,t;return Tt++,e=Ct,n=function(){var e;return e=h(),null===e&&(e=s(),null===e&&(e=f(),null===e&&(e=m(),null===e&&(e=d(),null===e&&(e=p()))))),e}(),null!==n?(null===(t=b())&&(t=X),null!==t?(jt=e,null===(n=he(n,t))?(Ct=e,e=n):e=n):(Ct=e,e=V)):(Ct=e,e=V),Tt--,null===e&&(n=null,0===Tt&&r(ie)),e}function h(){var e,t,a,o,u,l;return e=Ct,123===n.charCodeAt(Ct)?(t=se,Ct++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(44===n.charCodeAt(Ct)?(o=me,Ct++):(o=null,0===Tt&&r(de)),null!==o?null!==(u=x())?(125===n.charCodeAt(Ct)?(l=pe,Ct++):(l=null,0===Tt&&r(be)),null!==l?(jt=e,null===(t=xe(a,u))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V),e}function s(){var e,t,a,o;return e=Ct,123===n.charCodeAt(Ct)?(t=se,Ct++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(n.substr(Ct,2)===ge?(o=ge,Ct+=2):(o=null,0===Tt&&r(ve)),null!==o?(jt=e,null===(t=ye(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V),e}function f(){var e,t,a,o;return e=Ct,123===n.charCodeAt(Ct)?(t=se,Ct++):(t=null,0===Tt&&r(fe)),null!==t?null!==(a=x())?(125===n.charCodeAt(Ct)?(o=pe,Ct++):(o=null,0===Tt&&r(be)),null!==o?(jt=e,null===(t=we(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V):(Ct=e,e=V),e}function m(){var e,t;return e=Ct,43===n.charCodeAt(Ct)?(t=ke,Ct++):(t=null,0===Tt&&r(Ae)),null!==t&&(jt=e,t=Me()),null===t?(Ct=e,e=t):e=t,e}function d(){var e,t;return e=Ct,42===n.charCodeAt(Ct)?(t=Ce,Ct++):(t=null,0===Tt&&r(je)),null!==t&&(jt=e,t=Ee()),null===t?(Ct=e,e=t):e=t,e}function p(){var e,t;return e=Ct,63===n.charCodeAt(Ct)?(t=Oe,Ct++):(t=null,0===Tt&&r(Se)),null!==t&&(jt=e,t=Re()),null===t?(Ct=e,e=t):e=t,e}function b(){var e;return 63===n.charCodeAt(Ct)?(e=Oe,Ct++):(e=null,0===Tt&&r(Se)),e}function x(){var e,t,a;if(e=Ct,t=[],Te.test(n.charAt(Ct))?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(Fe)),null!==a)for(;null!==a;)t.push(a),Te.test(n.charAt(Ct))?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(Fe));else t=V;return null!==t&&(jt=e,t=_e(t)),null===t?(Ct=e,e=t):e=t,e}function g(){var e,t,o,u;return e=Ct,40===n.charCodeAt(Ct)?(t=$e,Ct++):(t=null,0===Tt&&r(De)),null!==t?(o=function(){var e,t,o;return e=Ct,n.substr(Ct,2)===Ie?(t=Ie,Ct+=2):(t=null,0===Tt&&r(Ue)),null!==t?(o=a(),null!==o?(jt=e,t=Ge(o),null===t?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Ct,n.substr(Ct,2)===We?(t=We,Ct+=2):(t=null,0===Tt&&r(Je)),null!==t?(o=a(),null!==o?(jt=e,t=Ke(o),null===t?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}(),null===o&&(o=function(){var e,t,o;return e=Ct,n.substr(Ct,2)===He?(t=He,Ct+=2):(t=null,0===Tt&&r(Ne)),null!==t?(o=a(),null!==o?(jt=e,t=Be(o),null===t?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}(),null===o&&(o=function(){var e,n;return e=Ct,n=a(),null!==n&&(jt=e,n=Le(n)),null===n?(Ct=e,e=n):e=n,e}()))),null!==o?(41===n.charCodeAt(Ct)?(u=qe,Ct++):(u=null,0===Tt&&r(Pe)),null!==u?(jt=e,null===(t=ze(o))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V)):(Ct=e,e=V),e}function v(){var e,t,a,o,u;if(Tt++,e=Ct,91===n.charCodeAt(Ct)?(t=Ve,Ct++):(t=null,0===Tt&&r(Xe)),null!==t)if(94===n.charCodeAt(Ct)?(a=te,Ct++):(a=null,0===Tt&&r(re)),null===a&&(a=X),null!==a){for(o=[],null===(u=y())&&(u=w());null!==u;)o.push(u),null===(u=y())&&(u=w());null!==o?(93===n.charCodeAt(Ct)?(u=Ze,Ct++):(u=null,0===Tt&&r(Qe)),null!==u?(jt=e,null===(t=en(a,o))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V)}else Ct=e,e=V;else Ct=e,e=V;return Tt--,null===e&&(t=null,0===Tt&&r(Ye)),e}function y(){var e,t,a,o;return Tt++,e=Ct,null!==(t=w())?(45===n.charCodeAt(Ct)?(a=tn,Ct++):(a=null,0===Tt&&r(rn)),null!==a?null!==(o=w())?(jt=e,null===(t=an(t,o))?(Ct=e,e=t):e=t):(Ct=e,e=V):(Ct=e,e=V)):(Ct=e,e=V),Tt--,null===e&&(t=null,0===Tt&&r(nn)),e}function w(){var e;return Tt++,null===(e=function(){var e;return e=C(),null===e&&(e=L(),null===e&&(e=O(),null===e&&(e=S(),null===e&&(e=R(),null===e&&(e=T(),null===e&&(e=F(),null===e&&(e=_(),null===e&&(e=$(),null===e&&(e=D(),null===e&&(e=q(),null===e&&(e=P(),null===e&&(e=z(),null===e&&(e=N(),null===e&&(e=B(),null===e&&(e=I(),null===e&&(e=U(),null===e&&(e=G()))))))))))))))))),e}())&&(e=k()),Tt--,null===e&&0===Tt&&r(on),e}function k(){var e,t;return e=Ct,un.test(n.charAt(Ct))?(t=n.charAt(Ct),Ct++):(t=null,0===Tt&&r(ln)),null!==t&&(jt=e,t=cn(t)),null===t?(Ct=e,e=t):e=t,e}function A(){var e,t;return e=Ct,46===n.charCodeAt(Ct)?(t=hn,Ct++):(t=null,0===Tt&&r(sn)),null!==t&&(jt=e,t=fn()),null===t?(Ct=e,e=t):e=t,e}function M(){var e,t;return Tt++,e=Ct,dn.test(n.charAt(Ct))?(t=n.charAt(Ct),Ct++):(t=null,0===Tt&&r(pn)),null!==t&&(jt=e,t=cn(t)),null===t?(Ct=e,e=t):e=t,Tt--,null===e&&(t=null,0===Tt&&r(mn)),e}function C(){var e,t;return e=Ct,n.substr(Ct,2)===bn?(t=bn,Ct+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=gn()),null===t?(Ct=e,e=t):e=t,e}function j(){var e,t;return e=Ct,n.substr(Ct,2)===bn?(t=bn,Ct+=2):(t=null,0===Tt&&r(xn)),null!==t&&(jt=e,t=vn()),null===t?(Ct=e,e=t):e=t,e}function E(){var e,t;return e=Ct,n.substr(Ct,2)===yn?(t=yn,Ct+=2):(t=null,0===Tt&&r(wn)),null!==t&&(jt=e,t=kn()),null===t?(Ct=e,e=t):e=t,e}function O(){var e,t;return e=Ct,n.substr(Ct,2)===An?(t=An,Ct+=2):(t=null,0===Tt&&r(Mn)),null!==t&&(jt=e,t=Cn()),null===t?(Ct=e,e=t):e=t,e}function S(){var e,t;return e=Ct,n.substr(Ct,2)===jn?(t=jn,Ct+=2):(t=null,0===Tt&&r(En)),null!==t&&(jt=e,t=On()),null===t?(Ct=e,e=t):e=t,e}function R(){var e,t;return e=Ct,n.substr(Ct,2)===Sn?(t=Sn,Ct+=2):(t=null,0===Tt&&r(Rn)),null!==t&&(jt=e,t=Tn()),null===t?(Ct=e,e=t):e=t,e}function T(){var e,t;return e=Ct,n.substr(Ct,2)===Fn?(t=Fn,Ct+=2):(t=null,0===Tt&&r(_n)),null!==t&&(jt=e,t=$n()),null===t?(Ct=e,e=t):e=t,e}function F(){var e,t;return e=Ct,n.substr(Ct,2)===Dn?(t=Dn,Ct+=2):(t=null,0===Tt&&r(qn)),null!==t&&(jt=e,t=Pn()),null===t?(Ct=e,e=t):e=t,e}function _(){var e,t;return e=Ct,n.substr(Ct,2)===zn?(t=zn,Ct+=2):(t=null,0===Tt&&r(Ln)),null!==t&&(jt=e,t=Hn()),null===t?(Ct=e,e=t):e=t,e}function $(){var e,t;return e=Ct,n.substr(Ct,2)===Nn?(t=Nn,Ct+=2):(t=null,0===Tt&&r(Bn)),null!==t&&(jt=e,t=In()),null===t?(Ct=e,e=t):e=t,e}function D(){var e,t;return e=Ct,n.substr(Ct,2)===Un?(t=Un,Ct+=2):(t=null,0===Tt&&r(Gn)),null!==t&&(jt=e,t=Wn()),null===t?(Ct=e,e=t):e=t,e}function q(){var e,t;return e=Ct,n.substr(Ct,2)===Jn?(t=Jn,Ct+=2):(t=null,0===Tt&&r(Kn)),null!==t&&(jt=e,t=Yn()),null===t?(Ct=e,e=t):e=t,e}function P(){var e,t;return e=Ct,n.substr(Ct,2)===Vn?(t=Vn,Ct+=2):(t=null,0===Tt&&r(Xn)),null!==t&&(jt=e,t=Zn()),null===t?(Ct=e,e=t):e=t,e}function z(){var e,t;return e=Ct,n.substr(Ct,2)===Qn?(t=Qn,Ct+=2):(t=null,0===Tt&&r(et)),null!==t&&(jt=e,t=nt()),null===t?(Ct=e,e=t):e=t,e}function L(){var e,t,a;return e=Ct,n.substr(Ct,2)===tt?(t=tt,Ct+=2):(t=null,0===Tt&&r(rt)),null!==t?(n.length>Ct?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=ot(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}function H(){var e,t,a;return e=Ct,92===n.charCodeAt(Ct)?(t=ut,Ct++):(t=null,0===Tt&&r(lt)),null!==t?(ct.test(n.charAt(Ct))?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(it)),null!==a?(jt=e,null===(t=ht(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}function N(){var e,t,a,o;if(e=Ct,n.substr(Ct,2)===st?(t=st,Ct+=2):(t=null,0===Tt&&r(ft)),null!==t){if(a=[],mt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(dt)),null!==o)for(;null!==o;)a.push(o),mt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(dt));else a=V;null!==a?(jt=e,null===(t=pt(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)}else Ct=e,e=V;return e}function B(){var e,t,a,o;if(e=Ct,n.substr(Ct,2)===bt?(t=bt,Ct+=2):(t=null,0===Tt&&r(xt)),null!==t){if(a=[],gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=yt(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)}else Ct=e,e=V;return e}function I(){var e,t,a,o;if(e=Ct,n.substr(Ct,2)===wt?(t=wt,Ct+=2):(t=null,0===Tt&&r(kt)),null!==t){if(a=[],gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt)),null!==o)for(;null!==o;)a.push(o),gt.test(n.charAt(Ct))?(o=n.charAt(Ct),Ct++):(o=null,0===Tt&&r(vt));else a=V;null!==a?(jt=e,null===(t=At(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)}else Ct=e,e=V;return e}function U(){var e,t;return e=Ct,n.substr(Ct,2)===st?(t=st,Ct+=2):(t=null,0===Tt&&r(ft)),null!==t&&(jt=e,t=Mt()),null===t?(Ct=e,e=t):e=t,e}function G(){var e,t,a;return e=Ct,92===n.charCodeAt(Ct)?(t=ut,Ct++):(t=null,0===Tt&&r(lt)),null!==t?(n.length>Ct?(a=n.charAt(Ct),Ct++):(a=null,0===Tt&&r(at)),null!==a?(jt=e,null===(t=cn(a))?(Ct=e,e=t):e=t):(Ct=e,e=V)):(Ct=e,e=V),e}var W,J=arguments.length>1?arguments[1]:{},K={regexp:a},Y=a,V=null,X="",Z="|",Q='"|"',ee=function(e,n){return n?new Pr(e,n[1]):e},ne=function(e,n,t){return new zr([e].concat(n).concat([t]))},te="^",re='"^"',ae=function(){return new qr("start")},oe="$",ue='"$"',le=function(){return new qr("end")},ce=function(e,n){return new Nr(e,n)},ie="Quantifier",he=function(e,n){return n&&(e.greedy=!1),e},se="{",fe='"{"',me=",",de='","',pe="}",be='"}"',xe=function(e,n){return new Br(e,n)},ge=",}",ve='",}"',ye=function(e){return new Br(e,1/0)},we=function(e){return new Br(e,e)},ke="+",Ae='"+"',Me=function(){return new Br(1,1/0)},Ce="*",je='"*"',Ee=function(){return new Br(0,1/0)},Oe="?",Se='"?"',Re=function(){return new Br(0,1)},Te=/^[0-9]/,Fe="[0-9]",_e=function(e){return+e.join("")},$e="(",De='"("',qe=")",Pe='")"',ze=function(e){return e},Le=function(e){return new Hr(e)},He="?:",Ne='"?:"',Be=function(e){return new Lr("non-capture-group",e)},Ie="?=",Ue='"?="',Ge=function(e){return new Lr("positive-lookahead",e)},We="?!",Je='"?!"',Ke=function(e){return new Lr("negative-lookahead",e)},Ye="CharacterSet",Ve="[",Xe='"["',Ze="]",Qe='"]"',en=function(e,n){return new Ir(!!e,n)},nn="CharacterRange",tn="-",rn='"-"',an=function(e,n){return new Ur(e,n)},on="Character",un=/^[^\\\]]/,ln="[^\\\\\\]]",cn=function(e){return new Gr(e)},hn=".",sn='"."',fn=function(){return new qr("any-character")},mn="Literal",dn=/^[^|\\\/.[()?+*$\^]/,pn="[^|\\\\\\/.[()?+*$\\^]",bn="\\b",xn='"\\\\b"',gn=function(){return new qr("backspace")},vn=function(){return new qr("word-boundary")},yn="\\B",wn='"\\\\B"',kn=function(){return new qr("non-word-boundary")},An="\\d",Mn='"\\\\d"',Cn=function(){return new qr("digit")},jn="\\D",En='"\\\\D"',On=function(){return new qr("non-digit")},Sn="\\f",Rn='"\\\\f"',Tn=function(){return new qr("form-feed")},Fn="\\n",_n='"\\\\n"',$n=function(){return new qr("line-feed")},Dn="\\r",qn='"\\\\r"',Pn=function(){return new qr("carriage-return")},zn="\\s",Ln='"\\\\s"',Hn=function(){return new qr("white-space")},Nn="\\S",Bn='"\\\\S"',In=function(){return new qr("non-white-space")},Un="\\t",Gn='"\\\\t"',Wn=function(){return new qr("tab")},Jn="\\v",Kn='"\\\\v"',Yn=function(){return new qr("vertical-tab")},Vn="\\w",Xn='"\\\\w"',Zn=function(){return new qr("word")},Qn="\\W",et='"\\\\W"',nt=function(){return new qr("non-word")},tt="\\c",rt='"\\\\c"',at="any character",ot=function(e){return new Vr(e)},ut="\\",lt='"\\\\"',ct=/^[1-9]/,it="[1-9]",ht=function(e){return new Yr(e)},st="\\0",ft='"\\\\0"',mt=/^[0-7]/,dt="[0-7]",pt=function(e){return new Kr(e.join(""))},bt="\\x",xt='"\\\\x"',gt=/^[0-9a-fA-F]/,vt="[0-9a-fA-F]",yt=function(e){return new Jr(e.join(""))},wt="\\u",kt='"\\\\u"',At=function(e){return new Wr(e.join(""))},Mt=function(){return new qr("null-character")},Ct=0,jt=0,Et=0,Ot={line:1,column:1,seenCR:!1},St=0,Rt=[],Tt=0;if("startRule"in J){if(!(J.startRule in K))throw new Error("Can't start parsing from rule \""+J.startRule+'".');Y=K[J.startRule]}if(qr.offset=function(){return jt},qr.text=function(){return n.substring(jt,Ct)},null!==(W=Y())&&Ct===n.length)return W;throw function(e){var n=0;for(e.sort();nString.fromCharCode(n+e))).join("")}ea.gen=function(e,n,t){return t=t||{guid:1},ea[e.type]?ea[e.type](e,n,t):ea.token(e,n,t)},ea.extend({token:function(e,n,t){switch(e.type){case"start":case"end":case"backspace":case"word-boundary":return"";case"any-character":return rt();case"non-word-boundary":case"form-feed":case"carriage-return":case"tab":case"vertical-tab":break;case"digit":return jt(ra.split(""));case"non-digit":return jt((na+ta+aa).split(""));case"line-feed":return e.body||e.text;case"white-space":return jt(ua.split(""));case"non-white-space":case"word":return jt((na+ta+ra).split(""));case"non-word":return jt(aa.replace("_","").split(""))}return e.body||e.text},alternate:function(e,n,t){return this.gen(nt()?e.left:e.right,n,t)},match:function(e,n,t){n="";for(let r=0;r1&&(a=n.context.path.slice(0),a.pop(),a=fa(a.concat(r)));try{e=r[r.length-1];let o=n.context.root,u=n.context.templateRoot;for(let e=1;e1)return sa(a,r);if(t&&"object"==typeof t&&a in t&&e!==t[a])return t[a]=ga(t[a],a,{currentContext:n,templateCurrentContext:t}),t[a];if(!(a in Or)&&!(u in Or))return e;o=o?o.split(/\s*,\s*/).map((e=>(Sr.RE_PLACEHOLDER.exec(""),Sr.RE_PLACEHOLDER.test(e)?da(e,n,t,r):e))):[];const c=Or[a]||Or[u];switch(In(c)){case"array":return jt(c);case"function":{c.options=r;const e=c.apply(Or,o)||"";return delete c.options,e}}}function pa(e){const{rule:{range:n,count:t},context:{currentContext:r,templateCurrentContext:a},template:o=""}=e;let u="";if(o.length){u+=void 0===t?o:Array(t).fill(o).join("");const n=u.match(Sr.RE_PLACEHOLDER)||[];n.some(((t,o)=>{if(/^\\/.test(t))return void n.splice(o--,1);const l=da(t,r,a,e);if(1===n.length&&t===u&&typeof l!=typeof u)return Un(l)?(u=parseFloat(l,10),!0):/^(true|false)$/.test(l)?(u="true"===l||"false"!==l&&l,!0):(u=l,!0);u=u.replace(t,l)}))}else u=n?at(t):o;return u}var ba=Object.freeze({__proto__:null,array:Tr,boolean:Fr,function:_r,number:$r,object:Dr,regexp:ha,string:pa});let xa=1;function ga(e,n="",t={}){const r={path:t.path||[xa],templatePath:t.templatePath||[xa++],currentContext:t.currentContext,templateCurrentContext:t.templateCurrentContext||e,root:t.root||t.currentContext,templateRoot:t.templateRoot||t.templateCurrentContext||e},a=In(e),o=ba[a];let u;return o?(u=o({type:a,template:e,name:n,parsedName:n?(""+n).replace(Sr.RE_KEY,"$1"):n,rule:Rr(n),context:r}),r.root||(r.root=u),u):e}const va={gen:ga,extend:Gn};function ya(e,n,t=[]){const r={name:"string"==typeof n?n.replace(Sr.RE_KEY,"$1"):n,template:e,type:In(e),rule:Rr.parse(n),path:t.slice(0)};switch(r.path.push(void 0===n?"ROOT":r.name),r.type){case"array":r.items=e.map(((e,n)=>ya(e,n,r.path)));break;case"object":r.properties=e.map(((e,n)=>ya(e,n,r.path)))}return r}function wa(e,n){const t=ya(e),r=ka.diff(t,n);for(let e=0;e(e[n.toLowerCase()]=n,e)),{})},placeholder:da,getValueByKeyPath:sa,normalizePath:fa,splitPathToArray:ma});const ka={diff:function(e,n,t){const r=[];return this.name(e,n,t,r)&&this.type(e,n,t,r)&&(this.value(e,n,t,r),this.properties(e,n,t,r),this.items(e,n,t,r)),r},name:function(e,n,t,r){const a=r.length;return Aa.equal("name",e.path,t+"",e.name+"",r),r.length===a},type:function(e,n,t,r){const a=r.length;switch(e.type){case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return!0;break;case"array":if(e.rule.parameters){if(void 0!==e.rule.min&&void 0===e.rule.max&&1===e.rule.count)return!0;if(e.rule.parameters[2])return!0}break;case"function":return!0}return Aa.equal("type",e.path,In(n),e.type,r),r.length===a},value:function(e,n,t,r){const a=r.length,o=e.rule,u=e.type;if("object"===u||"array"===u||"function"===u)return!0;if(!o.parameters){switch(u){case"regexp":return Aa.match("value",e.path,n,e.template,r),r.length===a;case"string":if(e.template.match(Sr.RE_PLACEHOLDER))return r.length===a}return Aa.equal("value",e.path,n,e.template,r),r.length===a}let l;switch(u){case"number":const a=(n+"").split(".");a[0]=+a[0],void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("value",e.path,a[0],Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("value",e.path,a[0],Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&Aa.equal("value",e.path,a[0],o.min,r,"[value] "+t),o.decimal&&(void 0!==o.dmin&&void 0!==o.dmax&&(Aa.greaterThanOrEqualTo("value",e.path,a[1].length,o.dmin,r),Aa.lessThanOrEqualTo("value",e.path,a[1].length,o.dmax,r)),void 0!==o.dmin&&void 0===o.dmax&&Aa.equal("value",e.path,a[1].length,o.dmin,r));break;case"boolean":break;case"string":l=n.match(new RegExp(e.template,"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r);break;case"regexp":l=n.match(new RegExp(e.template.source.replace(/^\^|\$$/g,""),"g")),l=l?l.length:0,void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("repeat count",e.path,l,o.min,r),Aa.lessThanOrEqualTo("repeat count",e.path,l,o.max,r)),void 0!==o.min&&void 0===o.max&&Aa.equal("repeat count",e.path,l,o.min,r)}return r.length===a},properties:function(e,n,t,r){const a=r.length,o=e.rule,u=Kn(n);if(e.properties){if(e.rule.parameters?(void 0!==o.min&&void 0!==o.max&&(Aa.greaterThanOrEqualTo("properties length",e.path,u.length,Math.min(o.min,o.max),r),Aa.lessThanOrEqualTo("properties length",e.path,u.length,Math.max(o.min,o.max),r)),void 0!==o.min&&void 0===o.max&&1!==o.count&&Aa.equal("properties length",e.path,u.length,o.min,r)):Aa.equal("properties length",e.path,u.length,e.properties.length,r),r.length!==a)return!1;for(let t=0;tr)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThan:function(e,n,t,r,a,o){if(t=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is greater than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1},lessThanOrEqualTo:function(e,n,t,r,a,o){if(t<=r)return!0;const u={path:n,type:e,actual:t,expected:r,action:"is less than or equal to",message:o};return u.message=Aa.message(u),a.push(u),!1}};wa.Diff=ka,wa.Assert=Aa;const Ma={$set(e){this[e.rurl+e.rtype.toLowerCase()]=e},$delete(e){delete this[e]}};function Ca({url:e,type:n}){n=n.toLowerCase();for(const t in Ma){const r=Ma[t],{rurl:a,rtype:o}=r;if(ja(a,e)&&ja(o,n))return r}return!1}function ja(e,n){switch(In(e)){case"string":return e===n;case"regexp":return e.test(n);default:return!1}}function Ea({template:e},n){return H(e)?e(n):ga(e)}const Oa=e=>"object"==typeof e&&"function"==typeof e.append&&"function"==typeof e.delete&&"function"==typeof e.get&&"function"==typeof e.getAll&&"function"==typeof e.has&&"function"==typeof e.set&&"function"==typeof e.sort&&"URLSearchParams"===e[Symbol.toStringTag],Sa=Symbol("Body internals"),Ra=Symbol("Response internals");async function Ta(e){if(e.disturbed)throw new TypeError(`body used already for: ${e.url}`);if(e.disturbed=!0,e.error)throw e.error;return e.body instanceof FormData?new Blob([Object.fromEntries(e.body.entries())]):e.body}class Fa{constructor(e,{size:n=0}={}){e=null===e?new Blob([]):Oa(e)||ArrayBuffer.isView(e)?new Blob([e]):new Blob([JSON.stringify(e)]),this[Sa]={body:e,boundary:null,disturbed:!1,error:null},this.size=n}get body(){return this[Sa].body}get bodyUsed(){return this[Sa].disturbed}async arrayBuffer(){return(await Ta(this[Sa])).arrayBuffer()}async blob(){return Ta(this[Sa])}async json(){const e=await this.text();return JSON.parse(e||"{}")}async text(){return(await Ta(this[Sa])).text()}}Object.defineProperties(Fa.prototype,{body:{enumerable:!0},bodyUsed:{enumerable:!0},arrayBuffer:{enumerable:!0},blob:{enumerable:!0},json:{enumerable:!0},text:{enumerable:!0}});const _a=new Set([301,302,303,307,308]),$a=globalThis.window&&globalThis.window.Response||class{};class Da extends Fa{constructor(e=null,n={}){super(e,n);const t=null!=n.status?n.status:200,r=new Headers(n.headers);if(null!==e&&!r.has("Content-Type")){const n=((e,n)=>null===e?null:"string"==typeof e?"text/plain;charset=UTF-8":Oa(e)?"application/x-www-form-urlencoded;charset=UTF-8":e instanceof Blob?e.type||null:e instanceof FormData?`multipart/form-data; boundary=${n[Sa].boundary}`:"text/plain;charset=UTF-8")(e);n&&r.append("Content-Type",n)}this[Ra]={type:"default",url:n.url,status:t,statusText:n.statusText||"",headers:r,counter:n.counter}}get type(){return this[Ra].type}get url(){return this[Ra].url||""}get status(){return this[Ra].status}get ok(){return this[Ra].status>=200&&this[Ra].status<300}get redirected(){return this[Ra].counter>0}get statusText(){return this[Ra].statusText}get headers(){return this[Ra].headers}clone(){if(this.bodyUsed)throw new Error("cannot clone body after it is used");return new $a(this.body,{type:this.type,url:this.url,status:this.status,statusText:this.statusText,headers:this.headers,ok:this.ok,redirected:this.redirected,size:this.size})}static redirect(e,n=302){if(t=n,!_a.has(t))throw new RangeError('Failed to execute "redirect" on "response": Invalid status code');var t;return new $a(null,{headers:{location:new URL(e).toString()},status:n})}static error(){const e=new $a(null,{status:0,statusText:""});return e[Ra].type="error",e}get[Symbol.toStringTag](){return"Response"}}Object.defineProperties($a.prototype,{type:{enumerable:!0},url:{enumerable:!0},status:{enumerable:!0},ok:{enumerable:!0},redirected:{enumerable:!0},statusText:{enumerable:!0},headers:{enumerable:!0},clone:{enumerable:!0}});const qa=globalThis.window||{},Pa=qa.fetch;async function za(e,n={}){if(!0===qa.fetch.$mock){const t=Ca({url:e,type:(n.method||"get").toLowerCase()});if(t){const e=Ea(t,{});return console.warn("mock代理中"),new Da(e,n)}}return console.warn("未使用 mockjs"),Pa(e,n)}var La="OK";const Ha=function(){},Na=globalThis.window||{},Ba=void 0!==Na?Na.XMLHttpRequest:class{},Ia=Ba.prototype.send||Ha,Ua=Ba.prototype.open||Ha;class Ga extends Ba{constructor(...e){super(...e)}_send=Ia;_open=Ua;open(e,n,t,r,a){this._open(e,n,!0,r,a),this.$url=n,this.$type=e.toLowerCase()}send(e){if(this.$mock&&(this.$template=Ca({url:this.$url,type:this.$type}),this.$template))return n=this,Object.defineProperties(n,["readyState","status","response","responseText","statusText"].reduce(((e,n)=>(e[n]={get(){return this.$Mock[n]},set:function(e){this.$Mock[n]=e}},e)),{})),this.dispatchEvent(new Event("loadstart")),setTimeout(this.$done.bind(this),this.timeout||100),null;var n;this._send(e)}get mock(){return this.$mock}set mock(e){"boolean"==typeof e&&(this.$mock=e)}$Mock={readyState:0,status:200,response:"",responseText:"",statusText:""};$type="get";$url="";$mock=!0;$template=null;$done(){this.readyState=this.HEADERS_RECEIVED,this.dispatchEvent(new Event("readystatechange")),this.readyState=this.LOADING,this.dispatchEvent(new Event("readystatechange")),this.status=200,this.statusText=La;const e=Ea(this.$template,{});this.response=e,this.responseText=this.response,this.readyState=this.DONE,this.dispatchEvent(new Event("readystatechange")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"))}}void 0!==globalThis.window&&qa.fetch&&!qa.fetch.hasOwnProperty("$mock")&&(qa.fetch=za,qa.fetch.$mock=!0,console.warn("fetch 已经被代理"));const Wa=globalThis.window||{};const Ja={Handler:va,Random:Or,Util:Yn,XHR:Ga,RE:ia,toJSONSchema:ya,valid:wa,heredoc:Jn,setup:function(e){return Ga.setup(e)},_mocked:Ma,mock:function(...e){let n,t,r="get";switch(e.length){case 1:return[t]=e,va.gen(t);case 2:[n,t]=e;break;case 3:[n,r,t]=e}return Wa.XMLHttpRequest!==Ga&&(Wa.XMLHttpRequest=Ga),Ma.$set({rurl:n,rtype:r,template:t}),null},version:"1.1.1-es6"};return Ja}(); diff --git a/src/mock/random/color.js b/src/mock/random/color.js index 413e0700..9aa03aff 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -117,6 +117,9 @@ function rgba() { // hsl(300,80%,90%) function hsl() { const hsv = _goldenRatioColor(); - return hsv.hsl().string(); + const num = hsv.hsl() + // 防止小数导致判断错误 + num.color[0] = Math.floor(num.color[0]) + return num.string(); } export { color, hex, rgb, rgba, hsl, _goldenRatioColor }; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index aaeadc21..25361cd5 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -2,8 +2,8 @@ ## Helpers */ -import { shuffle as _shuffle, capitalize, sampleSize, random, sample } from 'lodash-es'; - +import { shuffle as _shuffle, capitalize as _capitalize, sampleSize, random, sample } from 'lodash-es'; +const capitalize = (info = 'undefined') => _capitalize(info) const upper = function (str) { return (str + '').toUpperCase(); }; @@ -20,7 +20,7 @@ const pick = function (arr, ...args) { let count; switch (args.length) { case 0: - return sample(arr, 1); + return sample(arr); case 1: [count] = args; return sampleSize(arr, count); @@ -40,7 +40,7 @@ const shuffle = function (arr, min, max) { case 1: return result; case 2: - max = min; // 这里 max = undefined + return result.slice(0, min) /* falls through */ case 3: return result.slice(min, max); diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 51ea2a53..26757048 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -86,8 +86,9 @@ function dataImage(size, text) { PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 */ - const Canvas = module.require('canvas'); - canvas = new Canvas(); + throw new Error("请安装 canvas 依赖") + // const Canvas = module.require('canvas'); + // canvas = new Canvas(); } const ctx = canvas && canvas.getContext && canvas.getContext('2d'); diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js index f5f704bf..ebafc745 100644 --- a/src/mock/random/misc/guid.js +++ b/src/mock/random/misc/guid.js @@ -31,5 +31,5 @@ */ import { v4 as uuid } from 'uuid'; export default function guid() { - return uuid().replace(/(?<=[^-]{4}-[^-]{4}-[^-]{4}-[^-]{4})/, '-'); + return uuid() } diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index cd6e4bd9..aae66dae 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -3,6 +3,10 @@ import { character } from '../basic.js'; import { capitalize } from '../helper.js'; // 随机生成一个句子,第一个单词的首字母大写。 function sentence(min = 12, max = 18) { + switch (arguments.length) { + case 1: + max = min + } const len = random(min, max); const string = times(len, () => word()).join(' '); return capitalize(string) + '.'; @@ -10,19 +14,31 @@ function sentence(min = 12, max = 18) { // 随机生成一个单词。 function word(min = 3, max = 10) { + switch (arguments.length) { + case 1: + max = min + } const len = random(min, max); return times(len, () => character('lower')).join(''); } // 随机生成一段文本。 function paragraph(min = 3, max = 7) { + switch (arguments.length) { + case 1: + max = min + } const len = random(min, max); return times(len, () => sentence()).join('\n'); } // 随机生成一句标题,其中每个单词的首字母大写。 function title(min = 3, max = 7) { + switch (arguments.length) { + case 1: + max = min + } const len = random(min, max); - return times(len, () => capitalize(word())).join(''); + return times(len, () => word(1, 1)).join('').toUpperCase(); } export { word, paragraph, sentence, title }; diff --git a/test/mock.test.js b/test/mock.test.js new file mode 100644 index 00000000..d8b1d229 --- /dev/null +++ b/test/mock.test.js @@ -0,0 +1,50 @@ +/* global require, chai, describe, before, it */ +// 数据占位符定义(Data Placeholder Definition,DPD) +import { it, describe, expect, before } from 'vitest' +import Mock from '../src/mock' +import { each } from 'lodash-es' +describe('Mock.mock', function () { + + describe('Mock.mock( String )', function () { + it('@EMAIL', function () { + const title = "@EMAIL" + var data = Mock.mock(title) + expect(data).to.not.equal(title) + }) + }) + describe('Mock.mock( {} )', function () { + it('', function () { + var tpl = { + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + } + var data = Mock.mock(tpl) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1) + }) + }) + }) + describe('Mock.mock( function() )', function () { + it('', function () { + var fn = function () { + return Mock.mock({ + 'list|1-10': [{ + 'id|+1': 1, + 'email': '@EMAIL' + }] + }) + } + var data = Mock.mock(fn) + // this.test.title = fn.toString() + ' => ' + JSON.stringify(data /*, null, 4*/) + expect(data).to.have.property('list') + .that.be.an('array').with.length.within(1, 10) + each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1) + }) + }) + }) +}) \ No newline at end of file diff --git a/test/test.mock.random.js b/test/random.test.js similarity index 59% rename from test/test.mock.random.js rename to test/random.test.js index bb5f9df7..3180ae69 100644 --- a/test/test.mock.random.js +++ b/test/random.test.js @@ -1,56 +1,45 @@ /* global require, chai, describe, before, it */ /* global window */ // 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, Random, $, _, Random +import { it, describe, expect, before } from 'vitest' +import Mock from '../src/mock' +import {each} from 'lodash-es' +const Random = Mock.Random /* jshint -W061 */ -describe('Random', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - window.Random = Random = Mock.Random - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) +describe('Random', function () { function stringify(json) { - return JSON.stringify(json /*, null, 4*/ ) + return JSON.stringify(json /*, null, 4*/) } function doit(expression, validator) { - it('', function() { + it(JSON.stringify(expression), function () { // for (var i = 0; i < 1; i++) {} var data = eval(expression) validator(data) - this.test.title = stringify(expression) + ' => ' + stringify(data) }) } - describe('Basic', function() { - doit('Random.boolean()', function(data) { + describe('Basic', function () { + doit('Random.boolean()', function (data) { expect(data).to.be.a('boolean') }) - doit('Random.natural()', function(data) { + doit('Random.natural()', function (data) { expect(data).to.be.a('number').within(0, 9007199254740992) }) - doit('Random.natural(1, 3)', function(data) { + doit('Random.natural(1, 3)', function (data) { expect(data).to.be.a('number').within(1, 3) }) - doit('Random.natural(1)', function(data) { + doit('Random.natural(1)', function (data) { expect(data).to.be.a('number').least(1) }) - doit('Random.integer()', function(data) { + doit('Random.integer()', function (data) { expect(data).to.be.a('number').within(-9007199254740992, 9007199254740992) }) - doit('Random.integer(-10, 10)', function(data) { + doit('Random.integer(-10, 10)', function (data) { expect(data).to.be.a('number').within(-10, 10) }) @@ -69,19 +58,19 @@ describe('Random', function() { } } - doit('Random.float()', function(data) { + doit('Random.float()', function (data) { validFloat(data, -9007199254740992, 9007199254740992, 0, 17) }) - doit('Random.float(0)', function(data) { + doit('Random.float(0)', function (data) { validFloat(data, 0, 9007199254740992, 0, 17) }) - doit('Random.float(60, 100)', function(data) { + doit('Random.float(60, 100)', function (data) { validFloat(data, 60, 100, 0, 17) }) - doit('Random.float(60, 100, 3)', function(data) { + doit('Random.float(60, 100, 3)', function (data) { validFloat(data, 60, 100, 3, 17) }) - doit('Random.float(60, 100, 3, 5)', function(data) { + doit('Random.float(60, 100, 3, 5)', function (data) { validFloat(data, 60, 100, 3, 5) }) @@ -89,7 +78,7 @@ describe('Random', function() { var CHARACTER_UPPER = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' var CHARACTER_NUMBER = '0123456789' var CHARACTER_SYMBOL = '!@#$%^&*()[]' - doit('Random.character()', function(data) { + doit('Random.character()', function (data) { expect(data).to.be.a('string').with.length(1) expect( CHARACTER_LOWER + @@ -98,59 +87,59 @@ describe('Random', function() { CHARACTER_SYMBOL ).to.include(data) }) - doit('Random.character("lower")', function(data) { + doit('Random.character("lower")', function (data) { expect(data).to.be.a('string').with.length(1) expect(CHARACTER_LOWER).to.include(data) }) - doit('Random.character("upper")', function(data) { + doit('Random.character("upper")', function (data) { expect(data).to.be.a('string').with.length(1) expect(CHARACTER_UPPER).to.include(data) }) - doit('Random.character("number")', function(data) { + doit('Random.character("number")', function (data) { expect(data).to.be.a('string').with.length(1) expect(CHARACTER_NUMBER).to.include(data) }) - doit('Random.character("symbol")', function(data) { + doit('Random.character("symbol")', function (data) { expect(data).to.be.a('string').with.length(1) expect(CHARACTER_SYMBOL).to.include(data) }) - doit('Random.character("aeiou")', function(data) { + doit('Random.character("aeiou")', function (data) { expect(data).to.be.a('string').with.length(1) expect('aeiou').to.include(data) }) - doit('Random.string()', function(data) { + doit('Random.string()', function (data) { expect(data).to.be.a('string').with.length.within(3, 7) }) - doit('Random.string(5)', function(data) { + doit('Random.string(5)', function (data) { expect(data).to.be.a('string').with.length(5) }) - doit('Random.string("lower", 5)', function(data) { + doit('Random.string("lower", 5)', function (data) { expect(data).to.be.a('string').with.length(5) for (var i = 0; i < data.length; i++) { expect(CHARACTER_LOWER).to.include(data[i]) } }) - doit('Random.string(7, 10)', function(data) { + doit('Random.string(7, 10)', function (data) { expect(data).to.be.a('string').with.length.within(7, 10) }) - doit('Random.string("aeiou", 1, 3)', function(data) { + doit('Random.string("aeiou", 1, 3)', function (data) { expect(data).to.be.a('string').with.length.within(1, 3) for (var i = 0; i < data.length; i++) { expect('aeiou').to.include(data[i]) } }) - doit('Random.range(10)', function(data) { + doit('Random.range(10)', function (data) { expect(data).to.be.an('array').with.length(10) }) - doit('Random.range(3, 7)', function(data) { + doit('Random.range(3, 7)', function (data) { expect(data).to.be.an('array').deep.equal([3, 4, 5, 6]) }) - doit('Random.range(1, 10, 2)', function(data) { + doit('Random.range(1, 10, 2)', function (data) { expect(data).to.be.an('array').deep.equal([1, 3, 5, 7, 9]) }) - doit('Random.range(1, 10, 3)', function(data) { + doit('Random.range(1, 10, 3)', function (data) { expect(data).to.be.an('array').deep.equal([1, 4, 7]) }) @@ -158,179 +147,176 @@ describe('Random', function() { var RE_TIME = /\d{2}:\d{2}:\d{2}/ var RE_DATETIME = new RegExp(RE_DATE.source + ' ' + RE_TIME.source) - doit('Random.date()', function(data) { + doit('Random.date()', function (data) { expect(RE_DATE.test(data)).to.be.true }) - doit('Random.time()', function(data) { + doit('Random.time()', function (data) { expect(RE_TIME.test(data)).to.be.true }) - doit('Random.datetime()', function(data) { + doit('Random.datetime()', function (data) { expect(RE_DATETIME.test(data)).to.be.true }) - doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function(data) { + doit('Random.datetime("yyyy-MM-dd A HH:mm:ss")', function (data) { expect(data).to.be.ok }) - doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function(data) { + doit('Random.datetime("yyyy-MM-dd a HH:mm:ss")', function (data) { expect(data).to.be.ok }) - doit('Random.datetime("yy-MM-dd HH:mm:ss")', function(data) { + doit('Random.datetime("yy-MM-dd HH:mm:ss")', function (data) { expect(data).to.be.ok }) - doit('Random.datetime("y-MM-dd HH:mm:ss")', function(data) { + doit('Random.datetime("y-MM-dd HH:mm:ss")', function (data) { expect(data).to.be.ok }) - doit('Random.datetime("y-M-d H:m:s")', function(data) { + doit('Random.datetime("y-M-d H:m:s")', function (data) { expect(data).to.be.ok }) - doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function(data) { + doit('Random.datetime("yyyy yy y MM M dd d HH H hh h mm m ss s SS S A a T")', function (data) { expect(data).to.be.ok }) - doit('Random.now()', function(data) { + doit('Random.now()', function (data) { expect(data).to.be.ok }) - doit('Random.now("year")', function(data) { + doit('Random.now("year")', function (data) { expect(data).to.be.ok }) - doit('Random.now("month")', function(data) { + doit('Random.now("month")', function (data) { expect(data).to.be.ok }) - doit('Random.now("day")', function(data) { + doit('Random.now("day")', function (data) { expect(data).to.be.ok }) - doit('Random.now("hour")', function(data) { + doit('Random.now("hour")', function (data) { expect(data).to.be.ok }) - doit('Random.now("minute")', function(data) { + doit('Random.now("minute")', function (data) { expect(data).to.be.ok }) - doit('Random.now("second")', function(data) { + doit('Random.now("second")', function (data) { expect(data).to.be.ok }) - doit('Random.now("week")', function(data) { + doit('Random.now("week")', function (data) { expect(data).to.be.ok }) - doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function(data) { + doit('Random.now("yyyy-MM-dd HH:mm:ss SS")', function (data) { expect(data).to.be.ok }) }) - describe('Image', function() { - doit('Random.image()', function(data) { + describe('Image', function () { + doit('Random.image()', function (data) { expect(data).to.be.ok }) - it('Random.dataImage()', function() { - var data = eval(this.test.title) + it('Random.dataImage()', function () { + var data = Random.dataImage() expect(data).to.be.ok - this.test.title = stringify(this.test.title) + ' => ' }) - it('Random.dataImage("200x100")', function() { - var data = eval(this.test.title) + it('Random.dataImage("200x100")', function () { + var data = Random.dataImage("200x100") expect(data).to.be.ok - this.test.title = stringify(this.test.title) + ' => ' }) - it('Random.dataImage("200x100", "Hello Mock.js!")', function() { - var data = eval(this.test.title) + it('Random.dataImage("200x100", "Hello Mock.js!")', function () { + var data = Random.dataImage("200x100", "Hello Mock.js!") expect(data).to.be.ok - this.test.title = stringify(this.test.title) + ' => ' }) }) var RE_COLOR = /^#[0-9a-fA-F]{6}$/ var RE_COLOR_RGB = /^rgb\(\d{1,3}, \d{1,3}, \d{1,3}\)$/ var RE_COLOR_RGBA = /^rgba\(\d{1,3}, \d{1,3}, \d{1,3}, 0\.\d{1,2}\)$/ - var RE_COLOR_HSL = /^hsl\(\d{1,3}, \d{1,3}, \d{1,3}\)$/ - describe('Color', function() { - doit('Random.color()', function(data) { + var RE_COLOR_HSL = /^hsl\(\d{1,3}, \d{1,3}.\d{0,1}%, \d{1,3}.\d{0,1}%\)$/ + describe('Color', function () { + doit('Random.color()', function (data) { expect(RE_COLOR.test(data)).to.true }) - doit('Random.hex()', function(data) { + doit('Random.hex()', function (data) { expect(RE_COLOR.test(data)).to.true }) - doit('Random.rgb()', function(data) { + doit('Random.rgb()', function (data) { expect(RE_COLOR_RGB.test(data)).to.true }) - doit('Random.rgba()', function(data) { + doit('Random.rgba()', function (data) { expect(RE_COLOR_RGBA.test(data)).to.true }) - doit('Random.hsl()', function(data) { + doit('Random.hsl()', function (data) { expect(RE_COLOR_HSL.test(data)).to.true }) }) - describe('Text', function() { - doit('Random.paragraph()', function(data) { + describe('Text', function () { + doit('Random.paragraph()', function (data) { expect(data.split('.').length - 1).to.within(3, 7) }) - doit('Random.paragraph(2)', function(data) { + doit('Random.paragraph(2)', function (data) { expect(data.split('.').length - 1).to.equal(2) }) - doit('Random.paragraph(1, 3)', function(data) { + doit('Random.paragraph(1, 3)', function (data) { expect(data.split('.').length - 1).to.within(1, 3) }) - doit('Random.sentence()', function(data) { + doit('Random.sentence()', function (data) { expect(data[0]).to.equal(data.toUpperCase()[0]) expect(data.split(' ').length).to.within(12, 18) }) - doit('Random.sentence(4)', function(data) { + doit('Random.sentence(4)', function (data) { expect(data[0]).to.equal(data.toUpperCase()[0]) expect(data.split(' ').length).to.equal(4) }) - doit('Random.sentence(3, 5)', function(data) { + doit('Random.sentence(3, 5)', function (data) { expect(data[0]).to.equal(data.toUpperCase()[0]) expect(data.split(' ').length).to.within(3, 5) }) - doit('Random.word()', function(data) { + doit('Random.word()', function (data) { expect(data).to.have.length.within(3, 10) }) - doit('Random.word(4)', function(data) { + doit('Random.word(4)', function (data) { expect(data).to.have.length(4) }) - doit('Random.word(3, 5)', function(data) { + doit('Random.word(3, 5)', function (data) { expect(data).to.have.length.within(3, 5) }) - doit('Random.title()', function(data) { - var words = data.split(' ') - _.each(words, function(word) { + doit('Random.title()', function (data) { + var words = data.split('') + each(words, function (word) { expect(word[0]).to.equal(word[0].toUpperCase()) }) expect(words).to.have.length.within(3, 7) }) - doit('Random.title(4)', function(data) { - var words = data.split(' ') - _.each(words, function(word) { + doit('Random.title(4)', function (data) { + var words = data.split('') + each(words, function (word) { expect(word[0]).to.equal(word[0].toUpperCase()) }) expect(words).to.have.length(4) }) - doit('Random.title(3, 5)', function(data) { - var words = data.split(' ') - _.each(words, function(word) { + doit('Random.title(3, 5)', function (data) { + var words = data.split('') + each(words, function (word) { expect(word[0]).to.equal(word[0].toUpperCase()) }) expect(words).to.have.length.within(3, 5) }) }) - describe('Name', function() { - doit('Random.first()', function(data) { + describe('Name', function () { + doit('Random.first()', function (data) { expect(data[0]).to.equal(data[0].toUpperCase()) }) - doit('Random.last()', function(data) { + doit('Random.last()', function (data) { expect(data[0]).to.equal(data[0].toUpperCase()) }) - doit('Random.name()', function(data) { + doit('Random.name()', function (data) { var words = data.split(' ') expect(words).to.have.length(2) expect(words[0][0]).to.equal(words[0][0].toUpperCase()) expect(words[1][0]).to.equal(words[1][0].toUpperCase()) }) - doit('Random.name(true)', function(data) { + doit('Random.name(true)', function (data) { var words = data.split(' ') expect(words).to.have.length(3) expect(words[0][0]).to.equal(words[0][0].toUpperCase()) @@ -338,126 +324,126 @@ describe('Random', function() { expect(words[2][0]).to.equal(words[2][0].toUpperCase()) }) - doit('Random.cfirst()', function(data) { + doit('Random.cfirst()', function (data) { expect(data).to.be.ok }) - doit('Random.clast()', function(data) { + doit('Random.clast()', function (data) { expect(data).to.be.ok }) - doit('Random.cname()', function(data) { + doit('Random.cname()', function (data) { expect(data).to.be.ok }) }) var RE_URL = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/ var RE_IP = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ - describe('Web', function() { - doit('Random.url()', function(data) { + describe('Web', function () { + doit('Random.url()', function (data) { expect(RE_URL.test(data)).to.be.true }) - doit('Random.domain()', function(data) { + doit('Random.domain()', function (data) { expect(data).to.be.ok }) - doit('Random.domain("com")', function(data) { + doit('Random.domain("com")', function (data) { expect(data).to.include('.com') }) - doit('Random.tld()', function(data) { + doit('Random.tld()', function (data) { expect(data).to.be.ok }) - doit('Random.email()', function(data) { + doit('Random.email()', function (data) { expect(data).to.be.ok }) - doit('Random.email("nuysoft.com")', function(data) { + doit('Random.email("nuysoft.com")', function (data) { expect(data).to.include('@nuysoft.com') }) - doit('Random.ip()', function(data) { + doit('Random.ip()', function (data) { expect(RE_IP.test(data)).to.be.true }) }) - describe('Address', function() { - doit('Random.region()', function(data) { + describe('Address', function () { + doit('Random.region()', function (data) { expect(data).to.be.ok }) - doit('Random.province()', function(data) { + doit('Random.province()', function (data) { expect(data).to.be.ok }) - doit('Random.city()', function(data) { + doit('Random.city()', function (data) { expect(data).to.be.ok }) - doit('Random.city(true)', function(data) { + doit('Random.city(true)', function (data) { expect(data).to.be.ok }) - doit('Random.county()', function(data) { + doit('Random.county()', function (data) { expect(data).to.be.ok }) - doit('Random.county(true)', function(data) { + doit('Random.county(true)', function (data) { expect(data).to.be.ok }) - doit('Random.zip()', function(data) { + doit('Random.zip()', function (data) { expect(data).to.be.ok }) }) - describe('Helpers', function() { - doit('Random.capitalize()', function(data) { + describe('Helpers', function () { + doit('Random.capitalize()', function (data) { expect(data).to.equal('Undefined') }) - doit('Random.capitalize("hello")', function(data) { + doit('Random.capitalize("hello")', function (data) { expect(data).to.equal('Hello') }) - doit('Random.upper()', function(data) { + doit('Random.upper()', function (data) { expect(data).to.equal('UNDEFINED') }) - doit('Random.upper("hello")', function(data) { + doit('Random.upper("hello")', function (data) { expect(data).to.equal('HELLO') }) - doit('Random.lower()', function(data) { + doit('Random.lower()', function (data) { expect(data).to.equal('undefined') }) - doit('Random.lower("HELLO")', function(data) { + doit('Random.lower("HELLO")', function (data) { expect(data).to.equal('hello') }) - doit('Random.pick()', function(data) { + doit('Random.pick()', function (data) { expect(data).to.be.undefined }) - doit('Random.pick("a", "e", "i", "o", "u")', function(data) { - expect(["a", "e", "i", "o", "u"]).to.include(data) + doit('Random.pick("a", "e", "i", "o", "u")', function (data) { + expect(["a", "e", "i", "o", "u"]).toContain(data) }) - doit('Random.pick(["a", "e", "i", "o", "u"])', function(data) { - expect(["a", "e", "i", "o", "u"]).to.include(data) + doit('Random.pick(["a", "e", "i", "o", "u"])', function (data) { + expect(["a", "e", "i", "o", "u"]).toContain(data) }) - doit('Random.pick(["a", "e", "i", "o", "u"], 3)', function(data) { + doit('Random.pick(["a", "e", "i", "o", "u"], 3)', function (data) { expect(data).to.be.an('array').with.length(3) }) - doit('Random.pick(["a", "e", "i", "o", "u"], 1, 5)', function(data) { + doit('Random.pick(["a", "e", "i", "o", "u"], 1, 5)', function (data) { expect(data).to.be.an('array').with.length.within(1, 5) }) - doit('Random.shuffle()', function(data) { + doit('Random.shuffle()', function (data) { expect(data).to.deep.equal([]) }) - doit('Random.shuffle(["a", "e", "i", "o", "u"])', function(data) { + doit('Random.shuffle(["a", "e", "i", "o", "u"])', function (data) { expect(data.join('')).to.not.equal('aeiou') expect(data.sort().join('')).to.equal('aeiou') }) - doit('Random.shuffle(["a", "e", "i", "o", "u"], 3)', function(data) { + doit('Random.shuffle(["a", "e", "i", "o", "u"], 3)', function (data) { expect(data).to.be.an('array').with.length(3) }) - doit('Random.shuffle(["a", "e", "i", "o", "u"], 1, 5)', function(data) { + doit('Random.shuffle(["a", "e", "i", "o", "u"], 1, 5)', function (data) { expect(data).to.be.an('array').with.length.within(1, 5) }) }) var RE_GUID = /[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}/ - describe('Miscellaneous', function() { - doit('Random.guid()', function(data) { + describe('Miscellaneous', function () { + doit('Random.guid()', function (data) { expect(data).to.be.a('string').with.length(36) expect(RE_GUID.test(data)).to.be.true }) - doit('Random.id()', function(data) { + doit('Random.id()', function (data) { expect(data).to.be.a('string').with.length(18) }) }) diff --git a/test/test.mock.mock.js b/test/test.mock.mock.js deleted file mode 100644 index 1461e5a8..00000000 --- a/test/test.mock.mock.js +++ /dev/null @@ -1,62 +0,0 @@ -/* global require, chai, describe, before, it */ -// 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('Mock.mock', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - - describe('Mock.mock( String )', function() { - it('@EMAIL', function() { - var data = Mock.mock(this.test.title) - expect(data).to.not.equal(this.test.title) - this.test.title += ' => ' + data - }) - }) - describe('Mock.mock( {} )', function() { - it('', function() { - var tpl = { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - } - var data = Mock.mock(tpl) - this.test.title = JSON.stringify(tpl /*, null, 4*/ ) + ' => ' + JSON.stringify(data /*, null, 4*/ ) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1) - }) - }) - }) - describe('Mock.mock( function() )', function() { - it('', function() { - var fn = function() { - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - } - var data = Mock.mock(fn) - this.test.title = fn.toString() + ' => ' + JSON.stringify(data /*, null, 4*/ ) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.equal(list[index - 1].id + 1) - }) - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.schema.test.js b/test/test.mock.schema.test.js index f403c0a5..f2247cbe 100644 --- a/test/test.mock.schema.test.js +++ b/test/test.mock.schema.test.js @@ -2,15 +2,9 @@ // 数据占位符定义(Data Placeholder Definition,DPD) import { it, describe, expect, before } from 'vitest' import Mock from '../src/mock' -import * as _ from 'lodash-es' -import $ from 'jquery' describe('Schema', function () { - function stringify(json) { - return JSON.stringify(json /*, null, 4*/) - } - function doit(template, validator) { it(JSON.stringify(template), function () { var schema = Mock.toJSONSchema(template) From 40b30cf49374173856a8afa2e95171cae4d531bb Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Tue, 30 Jan 2024 09:55:29 +0000 Subject: [PATCH 45/65] =?UTF-8?q?fix(random):=20=E5=AE=8C=E6=88=90=20103?= =?UTF-8?q?=20=E4=B8=AA=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + pnpm-lock.yaml | 52 +++++++++++++++++++++++++++++++++++++-- src/mock/random/helper.js | 2 ++ src/mock/random/image.js | 9 +++---- vite.config.ts | 1 - 5 files changed, 56 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index 232fb948..897295da 100644 --- a/package.json +++ b/package.json @@ -54,6 +54,7 @@ "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-multi-entry": "^4.0.0", "@rollup/plugin-replace": "^2.4.2", + "@vitest/browser": "^1.2.2", "babel-eslint": "^10.1.0", "eslint": "^7.29.0", "eslint-config-google": "^0.14.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bb0bd5f4..c23f7863 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -33,6 +33,9 @@ devDependencies: '@rollup/plugin-replace': specifier: ^2.4.2 version: 2.4.2(rollup@2.50.5) + '@vitest/browser': + specifier: ^1.2.2 + version: 1.2.2(vitest@1.2.2) babel-eslint: specifier: ^10.1.0 version: 10.1.0(eslint@7.29.0) @@ -89,7 +92,7 @@ devDependencies: version: 5.0.12 vitest: specifier: ^1.2.2 - version: 1.2.2 + version: 1.2.2(@vitest/browser@1.2.2) packages: @@ -1486,6 +1489,10 @@ packages: fastq: 1.17.0 dev: true + /@polka/url@1.0.0-next.24: + resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} + dev: true + /@rollup/plugin-babel@5.3.0(@babel/core@7.14.6)(rollup@2.50.5): resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==} engines: {node: '>= 10.0.0'} @@ -1693,6 +1700,27 @@ packages: '@types/node': 20.11.10 dev: true + /@vitest/browser@1.2.2(vitest@1.2.2): + resolution: {integrity: sha512-N8myxNVLbS9AbZ7B2cK33HTGYVzUTDArbMh3hLojOxaj7s7ZrBYYmzs0Q5J2wyDrOgs51p6OUrrzAIb1Z+Ck3A==} + peerDependencies: + playwright: '*' + safaridriver: '*' + vitest: ^1.0.0 + webdriverio: '*' + peerDependenciesMeta: + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + dependencies: + '@vitest/utils': 1.2.2 + magic-string: 0.30.5 + sirv: 2.0.4 + vitest: 1.2.2(@vitest/browser@1.2.2) + dev: true + /@vitest/expect@1.2.2: resolution: {integrity: sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==} dependencies: @@ -2881,6 +2909,11 @@ packages: resolution: {integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==} dev: true + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -3365,6 +3398,15 @@ packages: is-arrayish: 0.3.2 dev: false + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} + dependencies: + '@polka/url': 1.0.0-next.24 + mrmime: 2.0.0 + totalist: 3.0.1 + dev: true + /slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} @@ -3560,6 +3602,11 @@ packages: is-number: 7.0.0 dev: true + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: true + /type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3690,7 +3737,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@1.2.2: + /vitest@1.2.2(@vitest/browser@1.2.2): resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -3715,6 +3762,7 @@ packages: jsdom: optional: true dependencies: + '@vitest/browser': 1.2.2(vitest@1.2.2) '@vitest/expect': 1.2.2 '@vitest/runner': 1.2.2 '@vitest/snapshot': 1.2.2 diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index 25361cd5..6fdfdeae 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -27,6 +27,8 @@ const pick = function (arr, ...args) { case 2: [min, max] = args; return sampleSize(arr, random(min, max)); + default: + return sample([arr, ...args]) } }; /* diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 26757048..2c8c7f6d 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -57,9 +57,8 @@ function image(...args) { background = (background || hex()).replace(/^#/, ''); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ - format ? '.' + format : '' - }${text ? '&text=' + text : ''}`; + return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${format ? '.' + format : '' + }${text ? '&text=' + text : ''}`; } /* 生成一段随机的 Base64 图片编码。 @@ -86,9 +85,7 @@ function dataImage(size, text) { PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 */ - throw new Error("请安装 canvas 依赖") - // const Canvas = module.require('canvas'); - // canvas = new Canvas(); + return 'data:image/png;base64,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didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgW+B//a1ZE6945QgAAAABJRU5ErkJggg==' } const ctx = canvas && canvas.getContext && canvas.getContext('2d'); diff --git a/vite.config.ts b/vite.config.ts index 978a984b..8987a904 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,5 +1,4 @@ export default { test: { - } } \ No newline at end of file From 7f63b6f071376423db4597b3ec1b078bc5c041af Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Tue, 30 Jan 2024 10:00:33 +0000 Subject: [PATCH 46/65] =?UTF-8?q?refactor(xhr):=20xhr=20=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mock/xhr/index.js | 7 +++++-- test/{test.mock.request.js => request.test.js} | 18 ++++-------------- 2 files changed, 9 insertions(+), 16 deletions(-) rename test/{test.mock.request.js => request.test.js} (97%) diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index 22c3f1cc..93c49edc 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -2,5 +2,8 @@ // import { mockFetch } from './fetch/fetch.js'; typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 - -export { MockXMLHttpRequest as XHR } from './XMLHttpRequest/xhr.js'; +import { MockXMLHttpRequest } from './XMLHttpRequest/xhr.js'; +export const XHR = function () { + return new MockXMLHttpRequest(...arguments) +} +export { MockXMLHttpRequest } diff --git a/test/test.mock.request.js b/test/request.test.js similarity index 97% rename from test/test.mock.request.js rename to test/request.test.js index 42000d74..1946ced5 100644 --- a/test/test.mock.request.js +++ b/test/request.test.js @@ -1,20 +1,10 @@ /* global console, require, chai, describe, before, it */ // 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - +import { it, describe, expect, before } from 'vitest' +import Mock from '../src/mock' +import $ from 'jquery' +import { each } from 'lodash-es' describe('Request', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) function stringify(json) { return JSON.stringify(json /*, null, 4*/ ) From 43196c08ff34dcdc4a967c884267d8056afbbef9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Sun, 4 Feb 2024 19:14:21 +0800 Subject: [PATCH 47/65] =?UTF-8?q?test(all):=20=E4=BF=AE=E5=A4=8D=E5=A4=A7?= =?UTF-8?q?=E9=87=8F=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mock/handle/boolean.js | 4 +- src/mock/handle/number.js | 15 +- src/mock/handle/object.js | 3 +- src/mock/parser.js | 3 +- src/mock/random/basic/boolean.js | 2 +- src/mock/random/basic/number.js | 12 +- test/bower.json | 11 - test/{test.mock.spec.dpd.js => dpd.test.js} | 204 +++--- test/dtd.test.js | 620 ++++++++++++++++++ test/materiels/noop.html | 2 - test/materiels/noop.js | 1 - test/{request.test.js => request.js} | 0 test/schema.test.js | 193 ++++++ test/test.coveralls.js | 35 - test/test.mock.html | 58 -- test/test.mock.schema.test.js | 188 ------ test/test.mock.spec.dtd.js | 677 -------------------- test/test.mock.valid.js | 308 --------- test/valid.test.js | 454 +++++++++++++ 19 files changed, 1381 insertions(+), 1409 deletions(-) delete mode 100644 test/bower.json rename test/{test.mock.spec.dpd.js => dpd.test.js} (59%) create mode 100644 test/dtd.test.js delete mode 100644 test/materiels/noop.html delete mode 100644 test/materiels/noop.js rename test/{request.test.js => request.js} (100%) create mode 100644 test/schema.test.js delete mode 100644 test/test.coveralls.js delete mode 100644 test/test.mock.html delete mode 100644 test/test.mock.schema.test.js delete mode 100644 test/test.mock.spec.dtd.js delete mode 100644 test/test.mock.valid.js create mode 100644 test/valid.test.js diff --git a/src/mock/handle/boolean.js b/src/mock/handle/boolean.js index 4bc5075a..bf8dc4b0 100644 --- a/src/mock/handle/boolean.js +++ b/src/mock/handle/boolean.js @@ -1,6 +1,6 @@ import { bool } from '../random/index.js'; -export function boolean({ rule: { max, min, parameters }, template = '' }) { +export function boolean({ rule: { max, min, parameters }, template = false }) { // 'prop|multiple': false, 当前值是相反值的概率倍数 // 'prop|probability-probability': false, 当前值与相反值的概率 - return parameters ? bool(min, max, template) : template; + return parameters ? bool(min, max, template) : !!template; } diff --git a/src/mock/handle/number.js b/src/mock/handle/number.js index f9f51a26..ca350407 100644 --- a/src/mock/handle/number.js +++ b/src/mock/handle/number.js @@ -1,14 +1,13 @@ import { float } from '../random/basic/number.js'; -export function number({ rule: { decimal, range, count, dcount = 0, parameters }, template = '' }) { +export function number({ rule: { min, max, dmax, dmin, decimal, range, count, dcount, parameters }, template = '' }) { let result; + if (decimal) { - // 'float1|.1-10': 10, - // 'float2|1-100.1-10': 1, - // 'float3|999.1-10': 1, - // 'float4|.3-10': 123.123, - parameters.input.replace(/\|(\d*-?)(\d*)\.(\d*-?)(\d*)/, function (all, min, max, dmin, dmax) { - result = float(min, max, dmin, dmax); // 内置字符串转数字 - }); + if (min === undefined && max === undefined) min = max = parseInt(template); + if (max === undefined && min) max = min; + result = float(min ?? 0, max, dmin, dmax, count, dcount); // 内置字符串转数字 + // console.log(min, max, dmax, dmin, decimal, range, count, dcount, template); + // console.log(result); } else { // integer // 'grade1|1-100': 1, diff --git a/src/mock/handle/object.js b/src/mock/handle/object.js index 6a7d310a..fa70c11c 100644 --- a/src/mock/handle/object.js +++ b/src/mock/handle/object.js @@ -10,7 +10,7 @@ export function object({ template, rule: { min, count }, context: { path, templa // 'obj|min-max': {} /* jshint -W041 */ if (min != undefined) { - keys = shuffle(Object.keys(template)).slice(0, count); + keys = shuffle(Object.keys(template)).slice(0, min); keys.forEach((key) => { const parsedKey = key.replace(Constant.RE_KEY, '$1'); @@ -25,7 +25,6 @@ export function object({ template, rule: { min, count }, context: { path, templa }); } else { // 'obj': {} - // #25 改变了非函数属性的顺序,查找起来不方便 for (const key in template) { (typeof template[key] === 'function' ? fnKeys : keys).push(key); } diff --git a/src/mock/parser.js b/src/mock/parser.js index e8a4eed2..7ae534ee 100644 --- a/src/mock/parser.js +++ b/src/mock/parser.js @@ -33,8 +33,7 @@ export function parser(name = '') { const min = range && range[1] && parseInt(range[1], 10); // || 1 const max = range && range[2] && parseInt(range[2], 10); // || 1 // repeat || min-max || 1 - // var count = range ? !range[2] && parseInt(range[1], 10) || integer(min, max) : 1 - const count = range ? (!range[2] ? parseInt(range[1], 10) : integer(min, max)) : undefined; + const count = range ? (!range[2] && parseInt(range[1], 10)) || integer(min, max) : undefined; const decimal = parameters && parameters[4] && parameters[4].match(Constant.RE_RANGE); const dmin = decimal && decimal[1] && parseInt(decimal[1], 10); // || 0, diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js index a92482c5..1f48bac0 100644 --- a/src/mock/random/basic/boolean.js +++ b/src/mock/random/basic/boolean.js @@ -7,7 +7,7 @@ const boolean = function (min, max, cur = false) { // return Math.random() > (1.0 / (min + max)) * min ? !cur : cur; // } if (cur) { - return random(0, min + max) > min ? !cur : cur; + return random(0, min + max) > min ? !cur : !!cur; } return random(10, -10) > 0; }; diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index eb13bf51..9cca0dee 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -19,7 +19,7 @@ const natural = function (min, max) { return Math.abs(integer(min, max)); }; -const float = function (min, max, dmin, dmax) { +const float = function (min, max, dmin, dmax, count, dcount) { min = numberGate(min); if (!isNumber(min)) min = -9007199254740992; max = numberGate(max); @@ -28,7 +28,13 @@ const float = function (min, max, dmin, dmax) { dmax = numberGate(dmax) || 17; if (dmin < 1) dmin = 1; if (dmax > 17) dmax = 17; - const dcount = random(dmin, dmax, false); - return parseFloat(random(min, max, true).toFixed(dcount)); + dcount = dcount ?? random(dmin, dmax, false); + let decimal = ''; + for (let index = 0; index < dcount - 1; index++) { + decimal += random(0, 9); + } + decimal += random(1, 9); + let pre = random(min, max).toString(); + return parseFloat(pre + '.' + decimal); }; export { integer, isNumber, random, natural, integer as int, float }; diff --git a/test/bower.json b/test/bower.json deleted file mode 100644 index 3485bbe8..00000000 --- a/test/bower.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "test", - "dependencies": {}, - "devDependencies": { - "requirejs": "*", - "mocha": "*", - "chai": "*", - "underscore": "*", - "jquery": "~2.1.1" - } -} diff --git a/test/test.mock.spec.dpd.js b/test/dpd.test.js similarity index 59% rename from test/test.mock.spec.dpd.js rename to test/dpd.test.js index 24648a77..b2e369b2 100644 --- a/test/test.mock.spec.dpd.js +++ b/test/dpd.test.js @@ -1,103 +1,90 @@ /* global require, chai, describe, before, it */ // 数据占位符定义(Data Placeholder Definition,DPD) -var expect = chai.expect -var Mock, $, _ - -describe('DPD', function() { - before(function(done) { - require(['mock', 'underscore', 'jquery'], function() { - Mock = arguments[0] - _ = arguments[1] - $ = arguments[2] - expect(Mock).to.not.equal(undefined) - expect(_).to.not.equal(undefined) - expect($).to.not.equal(undefined) - done() - }) - }) - describe('Reference', function() { - it('@EMAIL', function() { - var data = Mock.mock(this.test.title) - expect(data).to.not.equal(this.test.title) - }) - }) - describe('Priority', function() { - it('@EMAIL', function() { +import { it, describe, expect, before } from 'vitest'; +import Mock from '../src/mock'; + +describe('DPD', function () { + describe('Reference', function () { + it('@EMAIL', function () { + var data = Mock.mock('@EMAIL'); + expect(data).to.not.equal('@EMAIL'); + }); + }); + describe('Priority', function () { + it('@EMAIL', function () { var data = Mock.mock({ email: 'nuysoft@gmail.com', - name: '@EMAIL' - }) - this.test.title += ' => ' + data.name - expect(data.name).to.not.equal(data.email) - }) - it('@email', function() { + name: '@EMAIL', + }); + expect(data.name).to.not.equal(data.email); + }); + it('@email', function () { var data = Mock.mock({ email: 'nuysoft@gmail.com', - name: '@email' - }) - this.test.title += ' => ' + data.name - expect(data.name).to.equal(data.email) - }) - }) - describe('Escape', function() { - it('\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - it('\\\\@EMAIL', function() { - var data = Mock.mock(this.test.title) - this.test.title += ' => ' + data - expect(data).to.not.equal(this.test.title) - }) - }) - describe('Path', function() { - it('Absolute Path', function() { + name: '@email', + }); + expect(data.name).to.equal(data.email); + }); + }); + describe('Escape', function () { + it('@EMAIL', function () { + var data = Mock.mock('@EMAIL'); + expect(data).to.not.equal('@EMAIL'); + }); + it('\\@EMAIL', function () { + var data = Mock.mock('\\@EMAIL'); + expect(data).to.not.equal('\\@EMAIL'); + }); + it('\\@EMAIL', function () { + var data = Mock.mock('\\@EMAIL'); + expect(data).to.not.equal('\\@EMAIL'); + }); + it('\\\\@EMAIL', function () { + var data = Mock.mock('\\\\@EMAIL'); + expect(data).to.not.equal('\\\\@EMAIL'); + }); + }); + describe('Path', function () { + it('Absolute Path', function () { var data = Mock.mock({ id: '@UUID', - children: [{ - parentId: '@/id' - }], + children: [ + { + parentId: '@/id', + }, + ], child: { - parentId: '@/id' - } - }) - expect(data.children[0]).to.have.property('parentId', data.id) - expect(data.child).to.have.property('parentId', data.id) - }) - it('Relative Path', function() { + parentId: '@/id', + }, + }); + expect(data.children[0]).to.have.property('parentId', data.id); + expect(data.child).to.have.property('parentId', data.id); + }); + it('Relative Path', function () { var data = Mock.mock({ id: '@UUID', - children: [{ - parentId: '@../../id' - }], + children: [ + { + parentId: '@../../id', + }, + ], child: { - parentId: '@../id' - } - }) - expect(data.children[0]).to.have.property('parentId', data.id) - expect(data.child).to.have.property('parentId', data.id) - }) - - it('Relative Path Fallback in Corner Case', function() { - const STRING = 'https://test.org/@a/build/test.html' + parentId: '@../id', + }, + }); + expect(data.children[0]).to.have.property('parentId', data.id); + expect(data.child).to.have.property('parentId', data.id); + }); + + it('Relative Path Fallback in Corner Case', function () { + const STRING = 'https://test.org/@a/build/test.html'; var data = Mock.mock({ - a: STRING - }) - expect(data.a).to.equal(STRING) - }) - }) - describe('Complex', function() { + a: STRING, + }); + expect(data.a).to.equal(STRING); + }); + }); + describe('Complex', function () { var tpl = { basics: { boolean1: '@BOOLEAN', @@ -153,7 +140,7 @@ describe('DPD', function() { nowMinute: '@NOW("minute")', nowSecond: '@NOW("second")', nowWeek: '@NOW("week")', - nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")' + nowCustom: '@NOW("yyyy-MM-dd HH:mm:ss SS")', }, image: { image1: '@IMAGE', @@ -164,13 +151,13 @@ describe('DPD', function() { dataImage1: '@DATAIMAGE', dataImage2: '@DATAIMAGE("200x100")', - dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")' + dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")', }, color: { color: '@COLOR', - render: function() { - $('.header').css('background', this.color) - } + render: function () { + // $('.header').css('background', this.color); + }, }, text: { title1: '@TITLE', @@ -187,13 +174,13 @@ describe('DPD', function() { paragraph1: '@PARAGRAPH', paragraph2: '@PARAGRAPH(2)', - paragraph3: '@PARAGRAPH(1, 3)' + paragraph3: '@PARAGRAPH(1, 3)', }, name: { first: '@FIRST', last: '@LAST', name1: '@NAME', - name2: '@NAME(true)' + name2: '@NAME(true)', }, web: { url: '@URL', @@ -206,17 +193,13 @@ describe('DPD', function() { region: '@REGION', province: '@PROVINCE', city: '@CITY', - county: '@COUNTY' + county: '@COUNTY', }, miscellaneous: { guid: '@GUID', id: '@ID', - 'increment1|3': [ - '@INCREMENT' - ], - 'increment2|3': [ - '@INCREMENT(10)' - ] + 'increment1|3': ['@INCREMENT'], + 'increment2|3': ['@INCREMENT(10)'], }, helpers: { capitalize1: '@CAPITALIZE()', @@ -233,13 +216,12 @@ describe('DPD', function() { pick3: '@PICK(["a", "b", "c"])', shuffle1: '@SHUFFLE', - shuffle2: '@SHUFFLE(["a", "b", "c"])' - } - } - it('', function() { - var data = Mock.mock(tpl) - // this.test.title += JSON.stringify(data, null, 4) - expect(data).to.be.a('object') - }) - }) -}) \ No newline at end of file + shuffle2: '@SHUFFLE(["a", "b", "c"])', + }, + }; + it('complex template', function () { + var data = Mock.mock(tpl); + expect(data).to.be.a('object'); + }); + }); +}); diff --git a/test/dtd.test.js b/test/dtd.test.js new file mode 100644 index 00000000..d398b8b0 --- /dev/null +++ b/test/dtd.test.js @@ -0,0 +1,620 @@ +/* global require, chai, describe, before, it */ +// 数据模板定义(Data Temaplte Definition,DTD) +/* + ## BDD + 1. 结构 + describe suite + [ describe ] + before after beforeEach afterEach + it test + done + 搜索 this.async = fn && fn.length + 2. 常用 expect + expect().to + .equal .deep.equal .not.equal + .match + .have.length .with.length + .have.property .have.deep.property + .to.be.a .to.be.an + .that + .least .most .within + 3. 速度 + 搜索 test.speed + slow > 75 + 75 / 2 < medium < 75 + fast < 75 / 2 + */ +import { it, describe, expect, before } from 'vitest'; +import Mock from '../src/mock'; +import * as _ from 'lodash-es'; +describe('DTD', function () { + describe('Literal', function () { + it(' "" ', function () { + var data = Mock.mock(''); + expect(data).to.equal(''); + }); + it('foo', function () { + var data = Mock.mock('foo'); + expect(data).to.equal('foo'); + }); + it('1', function () { + var data = Mock.mock(1); + expect(data).to.equal(1); + }); + it(true, function () { + var data = Mock.mock(true); + expect(data).to.equal(true); + }); + it(false, function () { + var data = Mock.mock(false); + expect(data).to.equal(false); + }); + it({}, function () { + const obj = {}; + var data = Mock.mock(obj); + expect(data).to.deep.equal(obj); + }); + it([], function () { + const arr = []; + var data = Mock.mock(arr); + expect(data).to.deep.equal(arr); + }); + it('function () {}', function () { + const fn = function () {}; + var data = Mock.mock(fn); + expect(data).to.equal(undefined); + }); + }); + describe('String', function () { + // `'name|min-max': 'value'` + it('name|min-max', function () { + var data = Mock.mock({ + 'name|1-10': '★号', + }); + expect(data.name).to.have.length.within(2, 20); + }); + + // `'name|count': 'value'` + it('name|count', function () { + var data = Mock.mock({ + 'name|10': '★号', + }); + expect(data.name).to.be.a('string').that.have.length(20); + }); + }); + describe('Number', function () { + // `'name|+step': value` + it('name|+step', function () { + var data = Mock.mock({ + 'list|10': [ + { + 'name|+1': 100, + }, + ], + }); + expect(data.list).to.be.an('array').with.length(10); + _.each(data.list, function (item, index) { + expect(item).to.have.property('name').that.be.a('number'); + if (index === 0) expect(item.name).to.equal(100); + else expect(item.name).to.equal(data.list[index - 1].name + 1); + }); + }); + + // `'name|min-max': value` + it('name|min-max', function () { + var data = Mock.mock({ + 'name|1-100': 100, + }); + expect(data).to.have.property('name').that.be.a('number').within(1, 100); + }); + it('name|max-min', function () { + var data = Mock.mock({ + 'name|100-1': 100, + }); + expect(data).to.have.property('name').that.be.a('number').within(1, 100); + }); + it('name|-min--max', function () { + var data = Mock.mock({ + 'name|-100--1': 100, + }); + expect(data).to.have.property('name').that.be.a('number').within(-100, -1); + }); + it('name|-max--min', function () { + var data = Mock.mock({ + 'name|-1--100': 100, + }); + expect(data).to.have.property('name').that.be.a('number').within(-100, -1); + }); + it('name|min-min', function () { + var data = Mock.mock({ + 'name|10-10': 100, + }); + expect(data).to.have.property('name').that.be.a('number').equal(10); + }); + it('name|count', function () { + var data = Mock.mock({ + 'name|10': 100, + }); + expect(data).to.have.property('name').that.be.a('number').equal(10); + }); + + // `'name|min-max.dmin-dmax': value` + + // 1 整数部分 2 小数部分 + var RE_FLOAT = /([\+\-]?\d+)\.?(\d+)?/; + + function validNumber(number, min, max, dmin, dmax) { + expect(number).to.be.a('number'); + RE_FLOAT.lastIndex = 0; + var parts = RE_FLOAT.exec('' + number); + expect(+parts[1]) + .to.be.a('number') + .within(min, max); + expect(parts[2]).to.have.length.within(dmin, dmax); + } + + it('name|min-max.dmin-dmax', function () { + var data = Mock.mock({ + 'name|1-10.1-10': 123.456, + }); + validNumber(data.name, 1, 10, 1, 10); + }); + it('name|min-max.dcount', function () { + var data = Mock.mock({ + 'name|1-10.10': 123.456, + }); + validNumber(data.name, 1, 10, 10, 10); + }); + it('name|count.dmin-dmax', function () { + var data = Mock.mock({ + 'name|10.1-10': 123.456, + }); + validNumber(data.name, 10, 10, 1, 10); + }); + it('name|count.dcount', function () { + var data = Mock.mock({ + 'name|10.10': 123.456, + }); + validNumber(data.name, 10, 10, 10, 10); + }); + it('name|.dmin-dmax', function () { + var data = Mock.mock({ + 'name|.1-10': 123.456, + }); + validNumber(data.name, 123, 123, 1, 10); + }); + it('name|.dcount', function () { + var data = Mock.mock({ + 'name|.10': 123.456, + }); + validNumber(data.name, 123, 123, 10, 10); + }); + }); + describe('Boolean', function () { + // `'name|1': value` + it('name|1', function () { + var data = Mock.mock({ + 'name|1': true, + }); + expect(data).to.have.property('name').that.be.a('boolean'); + }); + + // `'name|min-max': value` + it('name|min-max', function () { + var data = Mock.mock({ + 'name|8-2': true, + }); + expect(data).to.have.property('name').that.be.a('boolean'); + }); + }); + describe('Object', function () { + var methods = { + GET: '@URL', + POST: '@URL', + HEAD: '@URL', + PUT: '@URL', + DELETE: '@URL', + }; + var methodCount, tpl, data; + + // `'name|min-max': {}` + it('name|min-max', function () { + methodCount = _.keys(methods).length; // 5 + for (var min = 0, max; min <= methodCount + 1; min++) { + tpl = {}; + max = Mock.Random.integer(0, methodCount); + + // methods|0-? |1-? |2-? |3-? |4-? |5-? |6-? + tpl['methods|' + min + '-' + max] = methods; + data = Mock.mock(tpl); + expect(_.keys(data.methods)).to.have.length.that.within(Math.min(min, max), Math.max(min, max)); + } + }); + + // `'name|count': {}` + it('name|count', function () { + methodCount = _.keys(methods).length; // 5 + for (var count = 0; count <= methodCount + 1; count++) { + tpl = {}; + tpl['methods|' + count] = methods; + data = Mock.mock(tpl); + expect(_.keys(data.methods)).to.have.length(Math.min(count, methodCount)); + } + }); + }); + describe('Array', function () { + // `'name': [{}, {} ...]` + it('name', function () { + var value = [ + { + foo: 'foo', + }, + { + bar: 'bar', + }, + { + foobar: 'foobar', + }, + ]; + var data = Mock.mock({ + name: value, + }); + expect(data).to.have.property('name').that.be.an('array').with.length(3).that.not.equal(value); + expect(data).to.have.property('name'); + + for (var i = 0; i < data.name.length; i++) { + expect(data.name[i]).to.not.equal(value[i]); + expect(data.name[i]).to.deep.equal(value[i]); + } + }); + + // `'name|1': [{}, {} ...]` + it('name|1: [1, 2, 4, 8]', function () { + // number array + var value = [1, 2, 4, 8]; + var data = Mock.mock({ + 'name|1': value, + }); + expect(data).to.have.property('name').that.be.a('number'); + expect(value).to.include(data.name); + }); + it('name|1: ["GET", "POST", "HEAD", "DELETE"]', function () { + // string array + var value = ['GET', 'POST', 'HEAD', 'DELETE']; + var data = Mock.mock({ + 'name|1': value, + }); + expect(data).to.have.property('name').that.be.a('string'); + expect(value).to.include(data.name); + }); + it('name|1 [{}]', function () { + // object array + var value = [{}]; + var data = Mock.mock({ + 'name|1': value, + }); + expect(data).to.have.property('name').that.be.a('object').that.deep.equal({}); + expect(data.name).to.not.equal(value[0]); + }); + it('name|1 [{}, {}, {}]', function () { + // object array + var data = Mock.mock({ + 'name|1': [{}, {}, {}], + }); + expect(data).to.have.property('name').that.be.a('object').that.deep.equal({}); + }); + it('name|1 [{}, {}, {}]', function () { + // object array + var value = [ + { + method: 'GET', + }, + { + method: 'POST', + }, + { + method: 'HEAD', + }, + { + method: 'DELETE', + }, + ]; + var data = Mock.mock({ + 'name|1': value, + }); + expect(data).to.have.property('name').that.be.a('object').that.have.property('method').that.be.a('string'); + expect(value.map((i) => i.method)).include(data.name.method); + }); + + // `'name|+1': [{}, {} ...]` + it('name|+1: ["a", "b", "c"]', function () { + var data = Mock.mock({ + 'list|5': [ + { + 'name|+1': ['a', 'b', 'c'], + }, + ], + }); + expect(data).to.have.property('list').that.be.an('array').with.length(5); + expect(data.list[0].name).to.equal('a'); + expect(data.list[1].name).to.equal('b'); + expect(data.list[2].name).to.equal('c'); + expect(data.list[3].name).to.equal('a'); + expect(data.list[4].name).to.equal('b'); + }); + it('name|+1: ["@integer", "@email", "@boolean"]', function () { + var data = Mock.mock({ + 'list|5-10': [ + { + 'name|+1': ['@integer', '@email', '@boolean'], + }, + ], + }); + expect(data).to.have.property('list').that.be.an('array').have.length.within(5, 10); + expect(data.list[0].name).to.be.a('number'); + expect(data.list[1].name).to.be.a('string'); + expect(data.list[2].name).to.be.a('boolean'); + expect(data.list[3].name).to.be.a('number'); + expect(data.list[4].name).to.be.a('string'); + }); + + // `'name|min-max': [{}, {} ...]` + it('name|min-min', function () { + var data = Mock.mock({ + 'name|1-1': [{}], + }); + expect(data.name).to.be.an('array').with.length(1); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + it('name|min-max [{}]', function () { + var data = Mock.mock({ + 'name|1-10': [{}], + }); + expect(data.name).to.be.an('array').with.length.within(1, 10); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + it('name|max-min [{}]', function () { + var data = Mock.mock({ + 'name|10-1': [{}], + }); + expect(data.name).to.be.an('array').with.length.within(1, 10); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + it('name|min-max [{}, {}]', function () { + var data = Mock.mock({ + 'name|1-10': [{}, {}], + }); + expect(data.name).to.be.an('array').with.length.within(2, 20); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + it('name|max-min [{}, {}]', function () { + var data = Mock.mock({ + 'name|10-1': [{}, {}], + }); + expect(data.name).to.be.an('array').with.length.within(2, 20); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + + // `'name|count': [{}, {} ...]` + it('name|count [{}]', function () { + var data = Mock.mock({ + 'name|10': [{}], + }); + expect(data.name).to.be.an('array').with.length(10); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + it('name|count [{}, {}]', function () { + var data = Mock.mock({ + 'name|10': [{}, {}], + }); + expect(data.name).to.be.an('array').with.length(20); + _.each(data.name, function (item /*, index*/) { + expect(item).to.deep.equal({}); + }); + }); + }); + describe('Function', function () { + // `'name': function(){}` + it('name: function', function () { + var data = Mock.mock({ + prop: 'hello', + name: function (/*root, path*/) { + return this.prop; + }, + }); + expect(data).to.have.property('name').that.be.a('string').equal('hello'); + }); + + // 无序的 function + it('name: function', function () { + var data = Mock.mock({ + name2: function () { + return this.prop * 2; + }, + prop: 1, + name4: function () { + return this.prop * 4; + }, + }); + expect(data.name2).to.equal(2); + expect(data.name4).to.equal(4); + }); + + // #25 改变了非函数属性的顺序,查找起来不方便 + it('name: function', function () { + var data = Mock.mock({ + name: function () {}, + first: '', + second: '', + third: '', + }); + var keys = _.keys(data); + expect(keys[0]).equal('first'); + expect(keys[1]).equal('second'); + expect(keys[2]).equal('third'); + expect(keys[3]).equal('name'); + }); + }); + + /* + 按照 http://www.regexr.com/ 的 Reference 设计测试用例。 + https://github.com/nuysoft/Mock/blob/7c1e3a686bcc515855f1f583d70ae0ee89acc65e/test/regexp.js#L120 + */ + describe('RegExp', function () { + function validRegExp(regexp) { + if (arguments.length > 1) { + for (var i = 0; i < arguments.length; i++) { + validRegExp(arguments[i]); + } + } + + it(regexp, function () { + var data = Mock.mock(regexp); + expect(regexp.test(data)).to.be.true; + }); + } + + describe('Character Classes', function () { + validRegExp(/./); + validRegExp(/[a-z]/, /[A-Z]/, /[0-9]/); + validRegExp(/\w/, /\W/, /\s/, /\S/, /\d/, /\D/); + validRegExp(/[.]/, /[\w]/, /[\W]/, /[\s]/, /[\S]/, /[\d]/, /[\D]/); + validRegExp(/[^.]/, /[^\w]/, /[^\W]/, /[^\s]/, /[^\S]/, /[^\d]/, /[^\D]/); + }); + describe('Quantifiers', function () { + validRegExp(/\d?/, /\d+/, /\d*/); + + // {n}, {n,}, {n,m}, {0,1} ?, {1,0} +, {0,} * + validRegExp(/\d{5}/, /\d{5,}/, /\d{5,10}/, /\d{0,1}/, /\d{0,}/); + + validRegExp(/[\u4E00-\u9FA5]+/); // 汉字 + }); + describe('Anchors', function () { + validRegExp(/^/); + validRegExp(/$/); + validRegExp(/^foo/); + validRegExp(/foo$/); + validRegExp(/\bfoo/); + validRegExp(/\Bfoo/); + }); + + describe('Escaped Characters', function () { + validRegExp(/\000/); + validRegExp(/\xFF/); + validRegExp(/\uFFFF/); + validRegExp(/\cI/); + }); + + describe('Groups & Lookaround', function () { + validRegExp(/(ABC)/); + validRegExp(/(ABC)\1/); + validRegExp(/(?:ABC)/); + validRegExp(/(?=ABC)/); + validRegExp(/(?!ABC)/); + // validRegExp(/(?<=ABC)/) + // validRegExp(/(? -
noop.html
\ No newline at end of file diff --git a/test/materiels/noop.js b/test/materiels/noop.js deleted file mode 100644 index 247b5720..00000000 --- a/test/materiels/noop.js +++ /dev/null @@ -1 +0,0 @@ -(function noop() {})(); \ No newline at end of file diff --git a/test/request.test.js b/test/request.js similarity index 100% rename from test/request.test.js rename to test/request.js diff --git a/test/schema.test.js b/test/schema.test.js new file mode 100644 index 00000000..ab7ec9f0 --- /dev/null +++ b/test/schema.test.js @@ -0,0 +1,193 @@ +/* global window */ +// 数据占位符定义(Data Placeholder Definition,DPD) +import { it, describe, expect, before } from 'vitest'; +import Mock from '../src/mock'; + +describe('Schema', function () { + function doit(template, validator) { + it(JSON.stringify(template), function () { + var schema = Mock.toJSONSchema(template); + // this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema) + validator(schema); + }); + } + + describe('Type', function () { + doit(1, function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'number'); + for (var n in schema.rule) { + // console.log(schema.rule); + expect(schema.rule[n]).toBeFalsy(); + } + }); + doit(true, function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'boolean'); + for (var n in schema.rule) { + expect(schema.rule[n]).toBeFalsy(); + } + }); + doit('', function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'string'); + for (var n in schema.rule) { + expect(schema.rule[n]).toBeFalsy(); + } + }); + doit( + function () {}, + function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'function'); + for (var n in schema.rule) { + expect(schema.rule[n]).toBeFalsy(); + } + }, + ); + doit(/\d/, function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'regexp'); + for (var n in schema.rule) { + expect(schema.rule[n]).toBeFalsy(); + } + }); + doit([], function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'array'); + for (var n in schema.rule) { + expect(schema.rule[n]).toBeFalsy(); + } + expect(schema).to.have.property('items').with.length(0); + }); + doit({}, function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object'); + for (var n in schema.rule) { + expect(schema.rule[n]).toBeFalsy(); + } + expect(schema).to.have.property('properties').with.length(0); + }); + }); + + describe('Object', function () { + doit( + { + a: { + b: { + c: { + d: {}, + }, + }, + }, + }, + function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object'); + + var properties; + + // root.properties + properties = schema.properties; + expect(properties).to.with.length(1); + expect(properties[0]).to.have.property('name', 'a'); + expect(properties[0]).to.have.property('type', 'object'); + + // root.a.properties + properties = properties[0].properties; + expect(properties).to.with.length(1); + expect(properties[0]).to.have.property('name', 'b'); + expect(properties[0]).to.have.property('type', 'object'); + + // root.a.b.properties + properties = properties[0].properties; + expect(properties).to.with.length(1); + expect(properties[0]).to.have.property('name', 'c'); + expect(properties[0]).to.have.property('type', 'object'); + + // root.a.b.c.properties + properties = properties[0].properties; + expect(properties).to.with.length(1); + expect(properties[0]).to.have.property('name', 'd'); + expect(properties[0]).to.have.property('type', 'object'); + + // root.a.b.c.d.properties + properties = properties[0].properties; + expect(properties).to.with.length(0); + }, + ); + }); + + describe('Array', function () { + doit([[['foo', 'bar']]], function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'array'); + + var items; + + // root.items + items = schema.items; + expect(items).to.with.length(1); + expect(items[0]).to.have.property('type', 'array'); + + // root[0].items + items = items[0].items; + expect(items).to.with.length(1); + expect(items[0]).to.have.property('type', 'array'); + + // root[0][0].items + items = items[0].items; + expect(items).to.with.length(2); + expect(items[0]).to.have.property('type', 'string'); + expect(items[1]).to.have.property('type', 'string'); + }); + }); + + describe('String Rule', function () { + doit( + { + 'string|1-10': '★', + }, + function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object'); + + var properties; + // root.properties + properties = schema.properties; + expect(properties).to.with.length(1); + expect(properties[0]).to.have.property('type', 'string'); + expect(properties[0].rule).to.have.property('min', 1); + expect(properties[0].rule).to.have.property('max', 10); + }, + ); + doit( + { + 'string|3': 'value', + }, + function (schema) { + expect(schema.name).to.be.an('undefined'); + // expect(schema).to.not.have.property('name') + expect(schema).to.have.property('type', 'object'); + + var properties; + // root.properties + properties = schema.properties; + expect(properties).to.with.length(1); + expect(properties[0]).to.have.property('type', 'string'); + expect(properties[0].rule).to.have.property('min', 3); + expect(properties[0].rule.max).to.be.an('undefined'); + }, + ); + }); +}); diff --git a/test/test.coveralls.js b/test/test.coveralls.js deleted file mode 100644 index 6166cb79..00000000 --- a/test/test.coveralls.js +++ /dev/null @@ -1,35 +0,0 @@ -/* global require */ -/* global describe, it */ -var assert = require("assert") -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) -describe('Array', function() { - describe('#indexOf()', function() { - it('should return -1 when the value is not present', function() { - assert.equal(-1, [1, 2, 3].indexOf(5)) - assert.equal(-1, [1, 2, 3].indexOf(0)) - }) - }) -}) \ No newline at end of file diff --git a/test/test.mock.html b/test/test.mock.html deleted file mode 100644 index 8c9c6552..00000000 --- a/test/test.mock.html +++ /dev/null @@ -1,58 +0,0 @@ - - - - Test: Mock - - - - - - -
- - - - - - - - -
-
-

-    

-
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-    
-
-
\ No newline at end of file
diff --git a/test/test.mock.schema.test.js b/test/test.mock.schema.test.js
deleted file mode 100644
index f2247cbe..00000000
--- a/test/test.mock.schema.test.js
+++ /dev/null
@@ -1,188 +0,0 @@
-/* global window */
-// 数据占位符定义(Data Placeholder Definition,DPD)
-import { it, describe, expect, before } from 'vitest'
-import Mock from '../src/mock'
-
-describe('Schema', function () {
-
-    function doit(template, validator) {
-        it(JSON.stringify(template), function () {
-            var schema = Mock.toJSONSchema(template)
-            // this.test.title = (stringify(template) || template.toString()) + ' => ' + stringify(schema)
-            validator(schema)
-        })
-    }
-
-    describe('Type', function () {
-        doit(1, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'number')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-        })
-        doit(true, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'boolean')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-        })
-        doit('', function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'string')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-        })
-        doit(function () { }, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'function')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-        })
-        doit(/\d/, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'regexp')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-        })
-        doit([], function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'array')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-            expect(schema).to.have.property('items').with.length(0)
-        })
-        doit({}, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'object')
-            for (var n in schema.rule) {
-                expect(schema.rule[n]).toBeFalsy()
-            }
-            expect(schema).to.have.property('properties').with.length(0)
-        })
-
-    })
-
-    describe('Object', function () {
-        doit({
-            a: {
-                b: {
-                    c: {
-                        d: {}
-                    }
-                }
-            }
-        }, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'object')
-
-            var properties;
-
-            // root.properties
-            properties = schema.properties
-            expect(properties).to.with.length(1)
-            expect(properties[0]).to.have.property('name', 'a')
-            expect(properties[0]).to.have.property('type', 'object')
-
-            // root.a.properties
-            properties = properties[0].properties
-            expect(properties).to.with.length(1)
-            expect(properties[0]).to.have.property('name', 'b')
-            expect(properties[0]).to.have.property('type', 'object')
-
-            // root.a.b.properties
-            properties = properties[0].properties
-            expect(properties).to.with.length(1)
-            expect(properties[0]).to.have.property('name', 'c')
-            expect(properties[0]).to.have.property('type', 'object')
-
-            // root.a.b.c.properties
-            properties = properties[0].properties
-            expect(properties).to.with.length(1)
-            expect(properties[0]).to.have.property('name', 'd')
-            expect(properties[0]).to.have.property('type', 'object')
-
-            // root.a.b.c.d.properties
-            properties = properties[0].properties
-            expect(properties).to.with.length(0)
-        })
-
-    })
-
-    describe('Array', function () {
-        doit([
-            [
-                ['foo', 'bar']
-            ]
-        ], function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'array')
-
-            var items;
-
-            // root.items
-            items = schema.items
-            expect(items).to.with.length(1)
-            expect(items[0]).to.have.property('type', 'array')
-
-            // root[0].items
-            items = items[0].items
-            expect(items).to.with.length(1)
-            expect(items[0]).to.have.property('type', 'array')
-
-            // root[0][0].items
-            items = items[0].items
-            expect(items).to.with.length(2)
-            expect(items[0]).to.have.property('type', 'string')
-            expect(items[1]).to.have.property('type', 'string')
-        })
-    })
-
-    describe('String Rule', function () {
-        doit({
-            'string|1-10': '★'
-        }, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'object')
-
-            var properties;
-            // root.properties
-            properties = schema.properties
-            expect(properties).to.with.length(1) 
-            expect(properties[0]).to.have.property('type', 'string')
-            expect(properties[0].rule).to.have.property('min', 1)
-            expect(properties[0].rule).to.have.property('max', 10)
-        })
-        doit({
-            'string|3': 'value',
-        }, function (schema) {
-            expect(schema.name).to.be.an('undefined')
-            // expect(schema).to.not.have.property('name')
-            expect(schema).to.have.property('type', 'object')
-
-            var properties;
-            // root.properties
-            properties = schema.properties
-            expect(properties).to.with.length(1)
-            expect(properties[0]).to.have.property('type', 'string')
-            expect(properties[0].rule).to.have.property('min', 3)
-            expect(properties[0].rule.max).to.be.an('undefined')
-        })
-    })
-
-})
\ No newline at end of file
diff --git a/test/test.mock.spec.dtd.js b/test/test.mock.spec.dtd.js
deleted file mode 100644
index 44fe72d5..00000000
--- a/test/test.mock.spec.dtd.js
+++ /dev/null
@@ -1,677 +0,0 @@
-/* global require, chai, describe, before, it */
-// 数据模板定义(Data Temaplte Definition,DTD)
-/*
-    ## BDD
-    1. 结构 
-        describe suite
-            [ describe ]
-            before after beforeEach afterEach
-            it test
-        done
-            搜索 this.async = fn && fn.length
-    2. 常用 expect
-        expect().to
-            .equal .deep.equal .not.equal
-            .match
-            .have.length .with.length
-            .have.property .have.deep.property
-            .to.be.a .to.be.an
-            .that
-            .least .most .within
-    3. 速度 
-        搜索 test.speed
-        slow > 75
-        75 / 2 < medium < 75
-        fast < 75 / 2
- */
-var expect = chai.expect
-var Mock, $, _
-
-describe('DTD', function() {
-    before(function(done) {
-        require(['mock', 'underscore', 'jquery'], function() {
-            Mock = arguments[0]
-            _ = arguments[1]
-            $ = arguments[2]
-            expect(Mock).to.not.equal(undefined)
-            expect(_).to.not.equal(undefined)
-            expect($).to.not.equal(undefined)
-            done()
-        })
-    })
-    describe('Literal', function() {
-        it('', function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.equal(this.test.title)
-        })
-        it('foo', function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.equal(this.test.title)
-        })
-        it(1, function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.equal(this.test.title)
-        })
-        it(true, function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.equal(this.test.title)
-        })
-        it(false, function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.equal(this.test.title)
-        })
-        it({}, function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.deep.equal(this.test.title)
-        })
-        it([], function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.deep.equal(this.test.title)
-        })
-        it(function() {}, function() {
-            var data = Mock.mock(this.test.title)
-            expect(data).to.equal(undefined)
-        })
-    })
-    describe('String', function() {
-        // `'name|min-max': 'value'`
-        it('name|min-max', function() {
-            var data = Mock.mock({
-                'name|1-10': '★号'
-            })
-            expect(data.name).to.have.length.within(2, 20)
-        })
-
-        // `'name|count': 'value'`
-        it('name|count', function() {
-            var data = Mock.mock({
-                'name|10': '★号'
-            })
-            expect(data.name).to.be.a('string')
-                .that.have.length(20)
-        })
-    })
-    describe('Number', function() {
-        // `'name|+step': value`
-        it('name|+step', function() {
-            var data = Mock.mock({
-                'list|10': [{
-                    'name|+1': 100
-                }]
-            })
-            expect(data.list).to.be.an('array').with.length(10)
-            _.each(data.list, function(item, index) {
-                expect(item).to.have.property('name')
-                    .that.be.a('number')
-                if (index === 0) expect(item.name).to.equal(100)
-                else expect(item.name).to.equal(
-                    data.list[index - 1].name + 1
-                )
-            })
-        })
-
-        // `'name|min-max': value`
-        it('name|min-max', function() {
-            var data = Mock.mock({
-                'name|1-100': 100
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number').within(1, 100)
-        })
-        it('name|max-min', function() {
-            var data = Mock.mock({
-                'name|100-1': 100
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number').within(1, 100)
-        })
-        it('name|-min--max', function() {
-            var data = Mock.mock({
-                'name|-100--1': 100
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number').within(-100, -1)
-        })
-        it('name|-max--min', function() {
-            var data = Mock.mock({
-                'name|-1--100': 100
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number').within(-100, -1)
-        })
-        it('name|min-min', function() {
-            var data = Mock.mock({
-                'name|10-10': 100
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number').equal(10)
-        })
-        it('name|count', function() {
-            var data = Mock.mock({
-                'name|10': 100
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number').equal(10)
-        })
-
-        // `'name|min-max.dmin-dmax': value`
-
-        // 1 整数部分 2 小数部分
-        var RE_FLOAT = /([\+\-]?\d+)\.?(\d+)?/
-
-        function validNumber(number, min, max, dmin, dmax) {
-            expect(number).to.be.a('number')
-            RE_FLOAT.lastIndex = 0
-            var parts = RE_FLOAT.exec('' + number)
-            expect(+parts[1]).to.be.a('number').within(min, max)
-            expect(parts[2]).to.have.length.within(dmin, dmax)
-        }
-
-        it('name|min-max.dmin-dmax', function() {
-            var data = Mock.mock({
-                'name|1-10.1-10': 123.456
-            })
-            validNumber(data.name, 1, 10, 1, 10)
-        })
-        it('name|min-max.dcount', function() {
-            var data = Mock.mock({
-                'name|1-10.10': 123.456
-            })
-            validNumber(data.name, 1, 10, 10, 10)
-        })
-        it('name|count.dmin-dmax', function() {
-            var data = Mock.mock({
-                'name|10.1-10': 123.456
-            })
-            validNumber(data.name, 10, 10, 1, 10)
-        })
-        it('name|count.dcount', function() {
-            var data = Mock.mock({
-                'name|10.10': 123.456
-            })
-            validNumber(data.name, 10, 10, 10, 10)
-        })
-        it('name|.dmin-dmax', function() {
-            var data = Mock.mock({
-                'name|.1-10': 123.456
-            })
-            validNumber(data.name, 123, 123, 1, 10)
-        })
-        it('name|.dcount', function() {
-            var data = Mock.mock({
-                'name|.10': 123.456
-            })
-            validNumber(data.name, 123, 123, 10, 10)
-        })
-    })
-    describe('Boolean', function() {
-        // `'name|1': value` 
-        it('name|1', function() {
-            var data = Mock.mock({
-                'name|1': true
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('boolean')
-        })
-
-        // `'name|min-max': value`
-        it('name|min-max', function() {
-            var data = Mock.mock({
-                'name|8-2': true
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('boolean')
-        })
-    })
-    describe('Object', function() {
-        var methods = {
-            GET: '@URL',
-            POST: '@URL',
-            HEAD: '@URL',
-            PUT: '@URL',
-            DELETE: '@URL'
-        }
-        var methodCount, tpl, data
-
-        // `'name|min-max': {}`
-        it('name|min-max', function() {
-            methodCount = _.keys(methods).length // 5
-            for (var min = 0, max; min <= methodCount + 1; min++) {
-                tpl = {}
-                max = Mock.Random.integer(0, methodCount)
-
-                // methods|0-? |1-? |2-? |3-? |4-? |5-? |6-?
-                tpl['methods|' + min + '-' + max] = methods
-                data = Mock.mock(tpl)
-                expect(_.keys(data.methods)).to.have.length
-                    .that.within(Math.min(min, max), Math.max(min, max))
-            }
-        })
-
-        // `'name|count': {}`
-        it('name|count', function() {
-            methodCount = _.keys(methods).length // 5
-            for (var count = 0; count <= methodCount + 1; count++) {
-                tpl = {}
-                tpl['methods|' + count] = methods
-                data = Mock.mock(tpl)
-                expect(_.keys(data.methods)).to.have.length(
-                    Math.min(count, methodCount)
-                )
-            }
-        })
-    })
-    describe('Array', function() {
-        // `'name': [{}, {} ...]`
-        it('name', function() {
-            var value = [{
-                foo: 'foo'
-            }, {
-                bar: 'bar'
-            }, {
-                foobar: 'foobar'
-            }]
-            var data = Mock.mock({
-                name: value
-            })
-            expect(data).to.have.property('name')
-                .that.be.an('array').with.length(3)
-                .that.not.equal(value)
-            expect(data).to.have.property('name')
-
-            for (var i = 0; i < data.name.length; i++) {
-                expect(data.name[i]).to.not.equal(value[i])
-                expect(data.name[i]).to.deep.equal(value[i])
-            }
-        })
-
-        // `'name|1': [{}, {} ...]`
-        it('name|1: [1, 2, 4, 8]', function() {
-            // number array
-            var value = [1, 2, 4, 8]
-            var data = Mock.mock({
-                'name|1': value
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('number')
-            expect(value).to.include(data.name)
-        })
-        it('name|1: ["GET", "POST", "HEAD", "DELETE"]', function() {
-            // string array
-            var value = ['GET', 'POST', 'HEAD', 'DELETE']
-            var data = Mock.mock({
-                'name|1': value
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('string')
-            expect(value).to.include(data.name)
-        })
-        it('name|1 [{}]', function() {
-            // object array
-            var value = [{}]
-            var data = Mock.mock({
-                'name|1': value
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('object')
-                .that.deep.equal({})
-            expect(data.name).to.not.equal(value[0])
-        })
-        it('name|1 [{}, {}, {}]', function() {
-            // object array
-            var data = Mock.mock({
-                'name|1': [{}, {}, {}]
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('object')
-                .that.deep.equal({})
-        })
-        it('name|1 [{}, {}, {}]', function() {
-            // object array
-            var value = [{
-                method: 'GET'
-            }, {
-                method: 'POST'
-            }, {
-                method: 'HEAD'
-            }, {
-                method: 'DELETE'
-            }]
-            var data = Mock.mock({
-                'name|1': value
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('object')
-                .that.have.property('method')
-                .that.be.a('string')
-            expect(_.pluck(value, 'method')).include(data.name.method)
-        })
-
-        // `'name|+1': [{}, {} ...]`
-        it('name|+1: ["a", "b", "c"]', function() {
-            var data = Mock.mock({
-                'list|5': [{
-                    'name|+1': ['a', 'b', 'c']
-                }]
-            })
-            expect(data).to.have.property('list')
-                .that.be.an('array').with.length(5)
-            expect(data.list[0].name).to.equal('a')
-            expect(data.list[1].name).to.equal('b')
-            expect(data.list[2].name).to.equal('c')
-            expect(data.list[3].name).to.equal('a')
-            expect(data.list[4].name).to.equal('b')
-        })
-        it('name|+1: ["@integer", "@email", "@boolean"]', function() {
-            var data = Mock.mock({
-                'list|5-10': [{
-                    'name|+1': ['@integer', '@email', '@boolean']
-                }]
-            })
-            expect(data).to.have.property('list')
-                .that.be.an('array').have.length.within(5, 10)
-            expect(data.list[0].name).to.be.a('number')
-            expect(data.list[1].name).to.be.a('string')
-            expect(data.list[2].name).to.be.a('boolean')
-            expect(data.list[3].name).to.be.a('number')
-            expect(data.list[4].name).to.be.a('string')
-        })
-
-        // `'name|min-max': [{}, {} ...]`
-        it('name|min-min', function() {
-            var data = Mock.mock({
-                'name|1-1': [{}]
-            })
-            expect(data.name).to.be.an('array').with.length(1)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-        it('name|min-max [{}]', function() {
-            var data = Mock.mock({
-                'name|1-10': [{}]
-            })
-            expect(data.name).to.be.an('array').with.length.within(1, 10)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-        it('name|max-min [{}]', function() {
-            var data = Mock.mock({
-                'name|10-1': [{}]
-            })
-            expect(data.name).to.be.an('array').with.length.within(1, 10)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-        it('name|min-max [{}, {}]', function() {
-            var data = Mock.mock({
-                'name|1-10': [{}, {}]
-            })
-            expect(data.name).to.be.an('array').with.length.within(2, 20)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-        it('name|max-min [{}, {}]', function() {
-            var data = Mock.mock({
-                'name|10-1': [{}, {}]
-            })
-            expect(data.name).to.be.an('array').with.length.within(2, 20)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-
-        // `'name|count': [{}, {} ...]`
-        it('name|count [{}]', function() {
-            var data = Mock.mock({
-                'name|10': [{}]
-            })
-            expect(data.name).to.be.an('array').with.length(10)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-        it('name|count [{}, {}]', function() {
-            var data = Mock.mock({
-                'name|10': [{}, {}]
-            })
-            expect(data.name).to.be.an('array').with.length(20)
-            _.each(data.name, function(item /*, index*/ ) {
-                expect(item).to.deep.equal({})
-            })
-        })
-    })
-    describe('Function', function() {
-        // `'name': function(){}`
-        it('name: function', function() {
-            var data = Mock.mock({
-                prop: 'hello',
-                name: function( /*root, path*/ ) {
-                    return this.prop
-                }
-            })
-            expect(data).to.have.property('name')
-                .that.be.a('string').equal('hello')
-        })
-
-        // 无序的 function
-        it('name: function', function() {
-            var data = Mock.mock({
-                name2: function() {
-                    return this.prop * 2
-                },
-                prop: 1,
-                name4: function() {
-                    return this.prop * 4
-                }
-            })
-            expect(data.name2).to.equal(2)
-            expect(data.name4).to.equal(4)
-        })
-
-        // #25 改变了非函数属性的顺序,查找起来不方便
-        it('name: function', function() {
-            var data = Mock.mock({
-                name: function() {},
-                first: '',
-                second: '',
-                third: ''
-            })
-            var keys = _.keys(data)
-            expect(keys[0]).equal('first')
-            expect(keys[1]).equal('second')
-            expect(keys[2]).equal('third')
-            expect(keys[3]).equal('name')
-        })
-    })
-
-    /*
-        按照 http://www.regexr.com/ 的 Reference 设计测试用例。
-        https://github.com/nuysoft/Mock/blob/7c1e3a686bcc515855f1f583d70ae0ee89acc65e/test/regexp.js#L120
-     */
-    describe('RegExp', function() {
-        function validRegExp(regexp) {
-            if (arguments.length > 1) {
-                for (var i = 0; i < arguments.length; i++) {
-                    validRegExp(arguments[i])
-                }
-            }
-
-            it(regexp, function() {
-                var data = Mock.mock(regexp)
-                this.test.title += ' => ' + data
-                expect(regexp.test(data)).to.be.true
-            })
-        }
-
-        describe('Character Classes', function() {
-            validRegExp(/./)
-            validRegExp(
-                /[a-z]/,
-                /[A-Z]/,
-                /[0-9]/
-            )
-            validRegExp(
-                /\w/,
-                /\W/,
-                /\s/,
-                /\S/,
-                /\d/,
-                /\D/
-            )
-            validRegExp(
-                /[.]/,
-                /[\w]/,
-                /[\W]/,
-                /[\s]/,
-                /[\S]/,
-                /[\d]/,
-                /[\D]/
-            )
-            validRegExp(
-                /[^.]/,
-                /[^\w]/,
-                /[^\W]/,
-                /[^\s]/,
-                /[^\S]/,
-                /[^\d]/,
-                /[^\D]/
-            )
-        })
-        describe('Quantifiers', function() {
-            validRegExp(
-                /\d?/,
-                /\d+/,
-                /\d*/
-            )
-
-            // {n}, {n,}, {n,m}, {0,1} ?, {1,0} +, {0,} *
-            validRegExp(
-                /\d{5}/,
-                /\d{5,}/,
-                /\d{5,10}/,
-                /\d{0,1}/,
-                /\d{0,}/
-            )
-
-            validRegExp(/[\u4E00-\u9FA5]+/) // 汉字
-        })
-        describe('Anchors', function() {
-            validRegExp(/^/)
-            validRegExp(/$/)
-            validRegExp(/^foo/)
-            validRegExp(/foo$/)
-            validRegExp(/\bfoo/)
-            validRegExp(/\Bfoo/)
-        })
-
-        describe('Escaped Characters', function() {
-            validRegExp(/\000/)
-            validRegExp(/\xFF/)
-            validRegExp(/\uFFFF/)
-            validRegExp(/\cI/)
-        })
-
-        describe('Groups & Lookaround', function() {
-            validRegExp(/(ABC)/)
-            validRegExp(/(ABC)\1/)
-            validRegExp(/(?:ABC)/)
-            validRegExp(/(?=ABC)/)
-            validRegExp(/(?!ABC)/)
-                // validRegExp(/(?<=ABC)/)
-                // validRegExp(/(? {};
+    function doit(tpl, data, len) {
+        it(JSON.stringify(tpl), function () {
+            var result = Mock.valid(tpl, data);
+            expect(result).to.be.an('array').with.length(len);
+        });
+    }
+
+    describe('Name', function () {
+        doit(
+            {
+                name: 1,
+            },
+            {
+                name: 1,
+            },
+            0,
+        );
+
+        doit(
+            {
+                name1: 1,
+            },
+            {
+                name2: 1,
+            },
+            1,
+        );
+    });
+    describe('Value - Number', function () {
+        doit(
+            {
+                name: 1,
+            },
+            {
+                name: 1,
+            },
+            0,
+        );
+
+        doit(
+            {
+                name: 1,
+            },
+            {
+                name: 2,
+            },
+            1,
+        );
+
+        doit(
+            {
+                name: 1.1,
+            },
+            {
+                name: 2.2,
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|1-10': 1,
+            },
+            {
+                name: 5,
+            },
+            0,
+        );
+
+        doit(
+            {
+                'name|1-10': 1,
+            },
+            {
+                name: 0,
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|1-10': 1,
+            },
+            {
+                name: 11,
+            },
+            1,
+        );
+    });
+    describe('Value - String', function () {
+        doit(
+            {
+                name: 'value',
+            },
+            {
+                name: 'value',
+            },
+            0,
+        );
+
+        doit(
+            {
+                name: 'value1',
+            },
+            {
+                name: 'value2',
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|1': 'value',
+            },
+            {
+                name: 'value',
+            },
+            0,
+        );
+
+        doit(
+            {
+                'name|2': 'value',
+            },
+            {
+                name: 'valuevalue',
+            },
+            0,
+        );
+
+        doit(
+            {
+                'name|2': 'value',
+            },
+            {
+                name: 'value',
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|2-3': 'value',
+            },
+            {
+                name: 'value',
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|2-3': 'value',
+            },
+            {
+                name: 'valuevaluevaluevalue',
+            },
+            1,
+        );
+    });
+    describe('Value - RgeExp', function () {
+        doit(
+            {
+                name: /value/,
+            },
+            {
+                name: 'value',
+            },
+            0,
+        );
+        doit(
+            {
+                name: /value/,
+            },
+            {
+                name: 'vvvvv',
+            },
+            1,
+        );
+        doit(
+            {
+                'name|1-10': /value/,
+            },
+            {
+                name: 'valuevaluevaluevaluevalue',
+            },
+            0,
+        );
+        doit(
+            {
+                'name|1-10': /value/,
+            },
+            {
+                name: 'vvvvvvvvvvvvvvvvvvvvvvvvv',
+            },
+            1,
+        );
+        doit(
+            {
+                'name|1-10': /^value$/,
+            },
+            {
+                name: 'valuevaluevaluevaluevalue',
+            },
+            0,
+        );
+        doit(
+            {
+                name: /[a-z][A-Z][0-9]/,
+            },
+            {
+                name: 'yL5',
+            },
+            0,
+        );
+    });
+    describe('Value - Object', function () {
+        doit(
+            {
+                name: 1,
+            },
+            {
+                name: 1,
+            },
+            0,
+        );
+        doit(
+            {
+                name1: 1,
+            },
+            {
+                name2: 2,
+            },
+            1,
+        );
+        doit(
+            {
+                name1: 1,
+                name2: 2,
+            },
+            {
+                name3: 3,
+            },
+            1,
+        );
+        doit(
+            {
+                name1: 1,
+                name2: 2,
+            },
+            {
+                name1: '1',
+                name2: '2',
+            },
+            2,
+        );
+        doit(
+            {
+                a: {
+                    b: {
+                        c: {
+                            d: 1,
+                        },
+                    },
+                },
+            },
+            {
+                a: {
+                    b: {
+                        c: {
+                            d: 2,
+                        },
+                    },
+                },
+            },
+            1,
+        );
+    });
+    describe('Value - Array', function () {
+        doit([1, 2, 3], [1, 2, 3], 0);
+
+        doit([1, 2, 3], [1, 2, 3, 4], 1);
+
+        // 'name|1': array
+        doit(
+            {
+                'name|1': [1, 2, 3],
+            },
+            {
+                name: 1,
+            },
+            0,
+        );
+        doit(
+            {
+                'name|1': [1, 2, 3],
+            },
+            {
+                name: 2,
+            },
+            0,
+        );
+        doit(
+            {
+                'name|1': [1, 2, 3],
+            },
+            {
+                name: 3,
+            },
+            0,
+        );
+        doit(
+            {
+                // 不检测
+                'name|1': [1, 2, 3],
+            },
+            {
+                name: 4,
+            },
+            0,
+        );
+
+        // 'name|+1': array
+        doit(
+            {
+                'name|+1': [1, 2, 3],
+            },
+            {
+                name: 1,
+            },
+            0,
+        );
+        doit(
+            {
+                'name|+1': [1, 2, 3],
+            },
+            {
+                name: 2,
+            },
+            0,
+        );
+        doit(
+            {
+                'name|+1': [1, 2, 3],
+            },
+            {
+                name: 3,
+            },
+            0,
+        );
+        doit(
+            {
+                'name|+1': [1, 2, 3],
+            },
+            {
+                name: 4,
+            },
+            0,
+        );
+
+        // 'name|min-max': array
+        doit(
+            {
+                'name|2-3': [1],
+            },
+            {
+                name: [1, 2, 3, 4],
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|2-3': [1],
+            },
+            {
+                name: [1],
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|2-3': [1, 2, 3],
+            },
+            {
+                name: [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|2-3': [1, 2, 3],
+            },
+            {
+                name: [1, 2, 3],
+            },
+            1,
+        );
+
+        doit(
+            {
+                'name|2-3': [1],
+            },
+            {
+                name: [1, 1, 1],
+            },
+            0,
+        );
+
+        doit(
+            {
+                'name|2-3': [1],
+            },
+            {
+                name: [1, 2, 3],
+            },
+            2,
+        );
+
+        // 'name|count': array
+    });
+    describe('Value - Placeholder', function () {
+        doit(
+            {
+                name: '@email',
+            },
+            {
+                name: 'nuysoft@gmail.com',
+            },
+            0,
+        );
+        doit(
+            {
+                name: '@int',
+            },
+            {
+                name: 123,
+            },
+            0,
+        );
+    });
+});

From c8f93a771954bb3a869320658ba81e6fa2f97fbf Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com>
Date: Sun, 4 Feb 2024 21:08:15 +0800
Subject: [PATCH 48/65] =?UTF-8?q?test(all):=20=E4=BF=AE=E5=A4=8D=20boolean?=
 =?UTF-8?q?=20=E5=80=BC=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/mock/handle/array.js       | 6 +++---
 src/mock/handle/boolean.js     | 2 +-
 src/mock/handle/placeholder.js | 2 +-
 test/dpd.test.js               | 6 +++---
 test/dtd.test.js               | 1 +
 5 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/mock/handle/array.js b/src/mock/handle/array.js
index 3356f0ad..ac1449d5 100644
--- a/src/mock/handle/array.js
+++ b/src/mock/handle/array.js
@@ -45,15 +45,15 @@ export function array({
             // 'data|+1': [{}, {}]
             if (parameters[2]) {
                 template.__order_index = template.__order_index || 0;
-
-                result = gen(template, undefined, {
+                const index = template.__order_index % template.length;
+                result = gen(template[index], undefined, {
                     path: [...path, name],
                     templatePath: [...templatePath, name],
                     currentContext: result,
                     templateCurrentContext: template,
                     root: root || result,
                     templateRoot: templateRoot || template,
-                })[template.__order_index % template.length];
+                });
 
                 template.__order_index += +parameters[2];
             } else {
diff --git a/src/mock/handle/boolean.js b/src/mock/handle/boolean.js
index bf8dc4b0..2995c6e6 100644
--- a/src/mock/handle/boolean.js
+++ b/src/mock/handle/boolean.js
@@ -2,5 +2,5 @@ import { bool } from '../random/index.js';
 export function boolean({ rule: { max, min, parameters }, template = false }) {
     // 'prop|multiple': false, 当前值是相反值的概率倍数
     // 'prop|probability-probability': false, 当前值与相反值的概率
-    return parameters ? bool(min, max, template) : !!template;
+    return parameters ? bool(min, max, !!template) : !!template;
 }
diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js
index 8501cc01..3922dc2c 100644
--- a/src/mock/handle/placeholder.js
+++ b/src/mock/handle/placeholder.js
@@ -63,7 +63,7 @@ function placeholder(Placeholder, obj, templateContext, options) {
         case 'function': {
             // 执行占位符方法(大多数情况)
             handle.options = options;
-            const re = handle.apply(Random, params) || ''; // 因为是在字符串中,所以默认为空字符串。
+            const re = handle.apply(Random, params) ?? ''; // 因为是在字符串中,所以默认为空字符串。
             delete handle.options;
             return re;
         }
diff --git a/test/dpd.test.js b/test/dpd.test.js
index b2e369b2..9f377788 100644
--- a/test/dpd.test.js
+++ b/test/dpd.test.js
@@ -33,15 +33,15 @@ describe('DPD', function () {
         });
         it('\\@EMAIL', function () {
             var data = Mock.mock('\\@EMAIL');
-            expect(data).to.not.equal('\\@EMAIL');
+            expect(data).to.equal('\\@EMAIL');
         });
         it('\\@EMAIL', function () {
             var data = Mock.mock('\\@EMAIL');
-            expect(data).to.not.equal('\\@EMAIL');
+            expect(data).to.equal('\\@EMAIL');
         });
         it('\\\\@EMAIL', function () {
             var data = Mock.mock('\\\\@EMAIL');
-            expect(data).to.not.equal('\\\\@EMAIL');
+            expect(data).to.equal('\\\\@EMAIL');
         });
     });
     describe('Path', function () {
diff --git a/test/dtd.test.js b/test/dtd.test.js
index d398b8b0..367e4774 100644
--- a/test/dtd.test.js
+++ b/test/dtd.test.js
@@ -351,6 +351,7 @@ describe('DTD', function () {
                 ],
             });
             expect(data).to.have.property('list').that.be.an('array').have.length.within(5, 10);
+            // console.log(data.list);
             expect(data.list[0].name).to.be.a('number');
             expect(data.list[1].name).to.be.a('string');
             expect(data.list[2].name).to.be.a('boolean');

From 66c4e9b8d169ca70bce80c5f22172e2367ce3be7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com>
Date: Sun, 4 Feb 2024 21:17:39 +0800
Subject: [PATCH 49/65] =?UTF-8?q?test(valid2):=20=E9=80=9A=E8=BF=87=20vali?=
 =?UTF-8?q?d2=20=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 test/valid.js       | 264 ----------------------------------
 test/valid.test.js  |   6 -
 test/valid2.test.js | 338 ++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 338 insertions(+), 270 deletions(-)
 delete mode 100644 test/valid.js
 create mode 100644 test/valid2.test.js

diff --git a/test/valid.js b/test/valid.js
deleted file mode 100644
index b3f5a5a7..00000000
--- a/test/valid.js
+++ /dev/null
@@ -1,264 +0,0 @@
-module('Mck.valid(template, data)')
-
-if (!window.valid) {
-    window.valid = Mock.valid
-}
-
-test('Name', function() {
-    console.group('Name')
-
-    var result;
-
-    result = valid({
-        name: 1
-    }, {
-        name: 1
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name1: 1
-    }, {
-        name2: 1
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    console.groupEnd('Name')
-})
-
-test('Type', function() {
-    console.group('Type')
-
-    var result;
-
-    result = valid(
-        1,
-        '1'
-    )
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({}, [])
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name: 1
-    }, {
-        name: 1
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name: 1
-    }, {
-        name: '1'
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    console.groupEnd('Type')
-})
-
-test('Value - Number', function() {
-    console.group('Value - Number')
-
-    var result;
-
-    result = valid({
-        name: 1
-    }, {
-        name: 1
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name: 1
-    }, {
-        name: 2
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name: 1.1
-    }, {
-        name: 2.2
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|1-10': 1
-    }, {
-        name: 5
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|1-10': 1
-    }, {
-        name: 0
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|1-10': 1
-    }, {
-        name: 11
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    console.groupEnd('Value - Number')
-})
-
-test('Value - String', function() {
-    console.group('Value - String')
-
-    var result;
-
-    result = valid({
-        name: 'value'
-    }, {
-        name: 'value'
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name: 'value1'
-    }, {
-        name: 'value2'
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|1': 'value'
-    }, {
-        name: 'value'
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2': 'value'
-    }, {
-        name: 'valuevalue'
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2': 'value'
-    }, {
-        name: 'value'
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': 'value'
-    }, {
-        name: 'value'
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': 'value'
-    }, {
-        name: 'valuevaluevaluevalue'
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    console.groupEnd('Value - String')
-})
-
-test('Value - Object', function() {
-    console.group('Value - Object')
-
-    var result;
-
-    result = valid({
-        name: 1
-    }, {
-        name: 1
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name1: 1
-    }, {
-        name2: 2
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name1: 1,
-        name2: 2
-    }, {
-        name3: 3
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        name1: 1,
-        name2: 2
-    }, {
-        name1: '1',
-        name2: '2'
-    })
-    equal(result.length, 2, JSON.stringify(result, null, 4))
-
-    console.groupEnd('Value - Object')
-})
-
-test('Value - Array', function() {
-    console.group('Value - Array')
-
-    var result;
-
-    result = valid(
-        [1, 2, 3], [1, 2, 3]
-    )
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid(
-        [1, 2, 3], [1, 2, 3, 4]
-    )
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': [1]
-    }, {
-        'name': [1, 2, 3, 4]
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': [1]
-    }, {
-        'name': [1]
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': [1, 2, 3]
-    }, {
-        'name': [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': [1, 2, 3]
-    }, {
-        'name': [1, 2, 3]
-    })
-    equal(result.length, 1, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': [1]
-    }, {
-        'name': [1, 1, 1]
-    })
-    equal(result.length, 0, JSON.stringify(result, null, 4))
-
-    result = valid({
-        'name|2-3': [1]
-    }, {
-        'name': [1, 2, 3]
-    })
-    equal(result.length, 2, JSON.stringify(result, null, 4))
-
-    console.groupEnd('Value - Array')
-})
\ No newline at end of file
diff --git a/test/valid.test.js b/test/valid.test.js
index 7a3473f2..edd7985e 100644
--- a/test/valid.test.js
+++ b/test/valid.test.js
@@ -1,13 +1,7 @@
-/* global require, chai, describe, before, it */
-/* global window */
 import { it, describe, expect, before } from 'vitest';
 import Mock from '../src/mock';
 
 describe('Mock.valid', function () {
-    function stringify(json) {
-        return JSON.stringify(json /*, null, 4*/);
-    }
-    const title = () => {};
     function doit(tpl, data, len) {
         it(JSON.stringify(tpl), function () {
             var result = Mock.valid(tpl, data);
diff --git a/test/valid2.test.js b/test/valid2.test.js
new file mode 100644
index 00000000..2b8d2e9e
--- /dev/null
+++ b/test/valid2.test.js
@@ -0,0 +1,338 @@
+// module('Mck.valid(template, data)');
+import { it, describe, expect, test } from 'vitest';
+import Assert from 'assert';
+import Mock from '../src/mock';
+const valid = Mock.valid;
+
+test('Name', function () {
+    console.group('Name');
+
+    var result;
+
+    result = valid(
+        {
+            name: 1,
+        },
+        {
+            name: 1,
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name1: 1,
+        },
+        {
+            name2: 1,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    console.groupEnd('Name');
+});
+
+test('Type', function () {
+    console.group('Type');
+
+    var result;
+
+    result = valid(1, '1');
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid({}, []);
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name: 1,
+        },
+        {
+            name: 1,
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name: 1,
+        },
+        {
+            name: '1',
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    console.groupEnd('Type');
+});
+
+test('Value - Number', function () {
+    console.group('Value - Number');
+
+    var result;
+
+    result = valid(
+        {
+            name: 1,
+        },
+        {
+            name: 1,
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name: 1,
+        },
+        {
+            name: 2,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name: 1.1,
+        },
+        {
+            name: 2.2,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|1-10': 1,
+        },
+        {
+            name: 5,
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|1-10': 1,
+        },
+        {
+            name: 0,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|1-10': 1,
+        },
+        {
+            name: 11,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    console.groupEnd('Value - Number');
+});
+
+test('Value - String', function () {
+    console.group('Value - String');
+
+    var result;
+
+    result = valid(
+        {
+            name: 'value',
+        },
+        {
+            name: 'value',
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name: 'value1',
+        },
+        {
+            name: 'value2',
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|1': 'value',
+        },
+        {
+            name: 'value',
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2': 'value',
+        },
+        {
+            name: 'valuevalue',
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2': 'value',
+        },
+        {
+            name: 'value',
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': 'value',
+        },
+        {
+            name: 'value',
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': 'value',
+        },
+        {
+            name: 'valuevaluevaluevalue',
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    console.groupEnd('Value - String');
+});
+
+test('Value - Object', function () {
+    console.group('Value - Object');
+
+    var result;
+
+    result = valid(
+        {
+            name: 1,
+        },
+        {
+            name: 1,
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name1: 1,
+        },
+        {
+            name2: 2,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name1: 1,
+            name2: 2,
+        },
+        {
+            name3: 3,
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            name1: 1,
+            name2: 2,
+        },
+        {
+            name1: '1',
+            name2: '2',
+        },
+    );
+    Assert.equal(result.length, 2, JSON.stringify(result, null, 4));
+
+    console.groupEnd('Value - Object');
+});
+
+test('Value - Array', function () {
+    console.group('Value - Array');
+
+    var result;
+
+    result = valid([1, 2, 3], [1, 2, 3]);
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid([1, 2, 3], [1, 2, 3, 4]);
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': [1],
+        },
+        {
+            name: [1, 2, 3, 4],
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': [1],
+        },
+        {
+            name: [1],
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': [1, 2, 3],
+        },
+        {
+            name: [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': [1, 2, 3],
+        },
+        {
+            name: [1, 2, 3],
+        },
+    );
+    Assert.equal(result.length, 1, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': [1],
+        },
+        {
+            name: [1, 1, 1],
+        },
+    );
+    Assert.equal(result.length, 0, JSON.stringify(result, null, 4));
+
+    result = valid(
+        {
+            'name|2-3': [1],
+        },
+        {
+            name: [1, 2, 3],
+        },
+    );
+    Assert.equal(result.length, 2, JSON.stringify(result, null, 4));
+
+    console.groupEnd('Value - Array');
+});

From b87ffb4e01666da90d6296d057f5a431ee37a161 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com>
Date: Mon, 5 Feb 2024 08:52:18 +0800
Subject: [PATCH 50/65] =?UTF-8?q?build(vite):=20=E8=B0=83=E6=95=B4?=
 =?UTF-8?q?=E6=89=93=E5=8C=85=E6=96=B9=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .eslintrc.js                    |   35 -
 .gitignore                      |    3 +-
 BUG.md                          |    0
 graph.svg                       | 1279 --------------
 index.html                      |   16 -
 package.json                    |   49 +-
 pnpm-lock.yaml                  | 2925 +------------------------------
 rollup.config.build.js          |   47 -
 src/dependencies.png            |  Bin 344355 -> 0 bytes
 src/mock/RE_KEY.svg             |   83 -
 src/mock/_mocked.js             |   15 +-
 src/mock/mock.js                |    9 +-
 src/mock/random/color.js        |    4 +-
 src/mock/random/helper.js       |    6 +-
 src/mock/random/image.js        |    7 +-
 src/mock/random/misc/guid.js    |    2 +-
 src/mock/random/text/text_en.js |   12 +-
 src/mock/schema/schema.js       |    4 +-
 src/mock/xhr/ajax-tools.js      |    6 +-
 src/mock/xhr/index.js           |   26 +-
 test/package.json               |    6 -
 test/request.js                 |  435 -----
 test/request.test.js            |  479 +++++
 vite.config.ts                  |   12 +-
 24 files changed, 622 insertions(+), 4838 deletions(-)
 delete mode 100644 .eslintrc.js
 delete mode 100644 BUG.md
 delete mode 100644 graph.svg
 delete mode 100644 index.html
 delete mode 100644 rollup.config.build.js
 delete mode 100644 src/dependencies.png
 delete mode 100644 src/mock/RE_KEY.svg
 delete mode 100644 test/package.json
 delete mode 100644 test/request.js
 create mode 100644 test/request.test.js

diff --git a/.eslintrc.js b/.eslintrc.js
deleted file mode 100644
index ec6f8c86..00000000
--- a/.eslintrc.js
+++ /dev/null
@@ -1,35 +0,0 @@
-module.exports = {
-    env: {
-        browser: true,
-        es2021: true,
-        node: true,
-    },
-    plugins: ['prettier'],
-    extends: ['eslint:recommended', 'prettier', 'google'],
-    parser: 'babel-eslint',
-    parserOptions: {
-        ecmaVersion: 12,
-        sourceType: 'module',
-    },
-    rules: {
-        'prettier/prettier': ['error'],
-        'no-console': 0,
-        'no-prototype-builtins': 0, // 不调用 object 本身的属性
-        'no-useless-escape': 0, // 正则表达式转义的时候的一个错误
-        'require-jsdoc': 0,
-        'new-cap': 0, // 函数首字母不能大写
-        indent: 0, // prettier 已经处理好了
-        'object-curly-spacing': 0, // prettier 自动格式化这个部分
-        'max-len': ['error', 120],
-        'operator-linebreak': 0, // 交由 prettier 判断
-        'quote-props': ['error', 'as-needed'],
-        'space-before-function-paren': 0, // 交由 prettier 管理
-        'valid-jsdoc': 0,
-        'linebreak-style': [0, 'error', 'windows'],
-        'max-len': 0, // 交由 prettier 判断
-        'guard-for-in': 0,
-    },
-    globals: {
-        window: true,
-    },
-};
diff --git a/.gitignore b/.gitignore
index b512c09d..f06235c4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
-node_modules
\ No newline at end of file
+node_modules
+dist
diff --git a/BUG.md b/BUG.md
deleted file mode 100644
index e69de29b..00000000
diff --git a/graph.svg b/graph.svg
deleted file mode 100644
index 57a6180b..00000000
--- a/graph.svg
+++ /dev/null
@@ -1,1279 +0,0 @@
-
-
-
-
-
-
-G
-
-
-
-mock.js
-
-mock.js
-
-
-
-mock/XHR.js
-
-mock/XHR.js
-
-
-
-mock.js->mock/XHR.js
-
-
-
-
-
-mock/_mocked.js
-
-mock/_mocked.js
-
-
-
-mock.js->mock/_mocked.js
-
-
-
-
-
-mock/handler.js
-
-mock/handler.js
-
-
-
-mock.js->mock/handler.js
-
-
-
-
-
-mock/mock.js
-
-mock/mock.js
-
-
-
-mock.js->mock/mock.js
-
-
-
-
-
-mock/random/index.js
-
-mock/random/index.js
-
-
-
-mock.js->mock/random/index.js
-
-
-
-
-
-mock/regexp/index.js
-
-mock/regexp/index.js
-
-
-
-mock.js->mock/regexp/index.js
-
-
-
-
-
-mock/schema/index.js
-
-mock/schema/index.js
-
-
-
-mock.js->mock/schema/index.js
-
-
-
-
-
-mock/util.js
-
-mock/util.js
-
-
-
-mock.js->mock/util.js
-
-
-
-
-
-mock/valid/index.js
-
-mock/valid/index.js
-
-
-
-mock.js->mock/valid/index.js
-
-
-
-
-
-mock/xhr/index.js
-
-mock/xhr/index.js
-
-
-
-mock/XHR.js->mock/xhr/index.js
-
-
-
-
-
-mock/handler.js->mock/random/index.js
-
-
-
-
-
-mock/handler.js->mock/util.js
-
-
-
-
-
-mock/handle/gen.js
-
-mock/handle/gen.js
-
-
-
-mock/handler.js->mock/handle/gen.js
-
-
-
-
-
-mock/handle/index.js
-
-mock/handle/index.js
-
-
-
-mock/handler.js->mock/handle/index.js
-
-
-
-
-
-mock/handle/path.js
-
-mock/handle/path.js
-
-
-
-mock/handler.js->mock/handle/path.js
-
-
-
-
-
-mock/handle/placeholder.js
-
-mock/handle/placeholder.js
-
-
-
-mock/handler.js->mock/handle/placeholder.js
-
-
-
-
-
-mock/mock.js->mock/XHR.js
-
-
-
-
-
-mock/mock.js->mock/_mocked.js
-
-
-
-
-
-mock/mock.js->mock/handler.js
-
-
-
-
-
-mock/random/address.js
-
-mock/random/address.js
-
-
-
-mock/random/index.js->mock/random/address.js
-
-
-
-
-
-mock/random/helper.js
-
-mock/random/helper.js
-
-
-
-mock/random/index.js->mock/random/helper.js
-
-
-
-
-
-mock/random/basic.js
-
-mock/random/basic.js
-
-
-
-mock/random/index.js->mock/random/basic.js
-
-
-
-
-
-mock/random/color.js
-
-mock/random/color.js
-
-
-
-mock/random/index.js->mock/random/color.js
-
-
-
-
-
-mock/random/date.js
-
-mock/random/date.js
-
-
-
-mock/random/index.js->mock/random/date.js
-
-
-
-
-
-mock/random/file.js
-
-mock/random/file.js
-
-
-
-mock/random/index.js->mock/random/file.js
-
-
-
-
-
-mock/random/image.js
-
-mock/random/image.js
-
-
-
-mock/random/index.js->mock/random/image.js
-
-
-
-
-
-mock/random/misc.js
-
-mock/random/misc.js
-
-
-
-mock/random/index.js->mock/random/misc.js
-
-
-
-
-
-mock/random/name.js
-
-mock/random/name.js
-
-
-
-mock/random/index.js->mock/random/name.js
-
-
-
-
-
-mock/random/text.js
-
-mock/random/text.js
-
-
-
-mock/random/index.js->mock/random/text.js
-
-
-
-
-
-mock/random/web.js
-
-mock/random/web.js
-
-
-
-mock/random/index.js->mock/random/web.js
-
-
-
-
-
-mock/regexp/handler.js
-
-mock/regexp/handler.js
-
-
-
-mock/regexp/index.js->mock/regexp/handler.js
-
-
-
-
-
-mock/regexp/parser.js
-
-mock/regexp/parser.js
-
-
-
-mock/regexp/index.js->mock/regexp/parser.js
-
-
-
-
-
-mock/schema/schema.js
-
-mock/schema/schema.js
-
-
-
-mock/schema/index.js->mock/schema/schema.js
-
-
-
-
-
-mock/utils/each.js
-
-mock/utils/each.js
-
-
-
-mock/util.js->mock/utils/each.js
-
-
-
-
-
-mock/utils/extend.js
-
-mock/utils/extend.js
-
-
-
-mock/util.js->mock/utils/extend.js
-
-
-
-
-
-mock/utils/heredoc.js
-
-mock/utils/heredoc.js
-
-
-
-mock/util.js->mock/utils/heredoc.js
-
-
-
-
-
-mock/utils/type.js
-
-mock/utils/type.js
-
-
-
-mock/util.js->mock/utils/type.js
-
-
-
-
-
-mock/valid/valid.js
-
-mock/valid/valid.js
-
-
-
-mock/valid/index.js->mock/valid/valid.js
-
-
-
-
-
-mock/xhr/XMLHttpRequest/xhr.js
-
-mock/xhr/XMLHttpRequest/xhr.js
-
-
-
-mock/xhr/index.js->mock/xhr/XMLHttpRequest/xhr.js
-
-
-
-
-
-mock/xhr/fetch/fetch.js
-
-mock/xhr/fetch/fetch.js
-
-
-
-mock/xhr/index.js->mock/xhr/fetch/fetch.js
-
-
-
-
-
-mock/constant.js
-
-mock/constant.js
-
-
-
-mock/handle/array.js
-
-mock/handle/array.js
-
-
-
-mock/handle/array.js->mock/random/index.js
-
-
-
-
-
-mock/handle/array.js->mock/handle/gen.js
-
-
-
-
-
-mock/handle/gen.js->mock/util.js
-
-
-
-
-
-mock/handle/gen.js->mock/constant.js
-
-
-
-
-
-mock/handle/gen.js->mock/handle/index.js
-
-
-
-
-
-mock/parser.js
-
-mock/parser.js
-
-
-
-mock/handle/gen.js->mock/parser.js
-
-
-
-
-
-mock/handle/boolean.js
-
-mock/handle/boolean.js
-
-
-
-mock/handle/boolean.js->mock/random/index.js
-
-
-
-
-
-mock/handle/function.js
-
-mock/handle/function.js
-
-
-
-mock/handle/index.js->mock/handle/array.js
-
-
-
-
-
-mock/handle/index.js->mock/handle/boolean.js
-
-
-
-
-
-mock/handle/index.js->mock/handle/function.js
-
-
-
-
-
-mock/handle/number.js
-
-mock/handle/number.js
-
-
-
-mock/handle/index.js->mock/handle/number.js
-
-
-
-
-
-mock/handle/object.js
-
-mock/handle/object.js
-
-
-
-mock/handle/index.js->mock/handle/object.js
-
-
-
-
-
-mock/handle/regexp.js
-
-mock/handle/regexp.js
-
-
-
-mock/handle/index.js->mock/handle/regexp.js
-
-
-
-
-
-mock/handle/string.js
-
-mock/handle/string.js
-
-
-
-mock/handle/index.js->mock/handle/string.js
-
-
-
-
-
-mock/parser.js->mock/random/index.js
-
-
-
-
-
-mock/parser.js->mock/constant.js
-
-
-
-
-
-mock/random/basic/number.js
-
-mock/random/basic/number.js
-
-
-
-mock/handle/number.js->mock/random/basic/number.js
-
-
-
-
-
-mock/handle/object.js->mock/random/index.js
-
-
-
-
-
-mock/handle/object.js->mock/util.js
-
-
-
-
-
-mock/handle/object.js->mock/constant.js
-
-
-
-
-
-mock/handle/object.js->mock/handle/gen.js
-
-
-
-
-
-mock/handle/regexp.js->mock/regexp/index.js
-
-
-
-
-
-mock/handle/string.js->mock/random/index.js
-
-
-
-
-
-mock/handle/string.js->mock/util.js
-
-
-
-
-
-mock/handle/string.js->mock/constant.js
-
-
-
-
-
-mock/handle/string.js->mock/handle/placeholder.js
-
-
-
-
-
-mock/handle/path.js->mock/handle/gen.js
-
-
-
-
-
-mock/handle/placeholder.js->mock/random/index.js
-
-
-
-
-
-mock/handle/placeholder.js->mock/util.js
-
-
-
-
-
-mock/handle/placeholder.js->mock/constant.js
-
-
-
-
-
-mock/handle/placeholder.js->mock/handle/gen.js
-
-
-
-
-
-mock/handle/placeholder.js->mock/handle/path.js
-
-
-
-
-
-mock/random/address.js->mock/random/basic/number.js
-
-
-
-
-
-mock/random/address_dict.js
-
-mock/random/address_dict.js
-
-
-
-mock/random/address.js->mock/random/address_dict.js
-
-
-
-
-
-mock/random/address.js->mock/random/helper.js
-
-
-
-
-
-mock/random/address_ch.json
-
-mock/random/address_ch.json
-
-
-
-mock/random/address_dict.js->mock/random/address_ch.json
-
-
-
-
-
-mock/random/basic.js->mock/random/basic/number.js
-
-
-
-
-
-mock/random/basic/boolean.js
-
-mock/random/basic/boolean.js
-
-
-
-mock/random/basic.js->mock/random/basic/boolean.js
-
-
-
-
-
-mock/random/basic/character.js
-
-mock/random/basic/character.js
-
-
-
-mock/random/basic.js->mock/random/basic/character.js
-
-
-
-
-
-mock/random/basic/range.js
-
-mock/random/basic/range.js
-
-
-
-mock/random/basic.js->mock/random/basic/range.js
-
-
-
-
-
-mock/random/basic/string.js
-
-mock/random/basic/string.js
-
-
-
-mock/random/basic.js->mock/random/basic/string.js
-
-
-
-
-
-mock/random/basic/string.js->mock/random/basic/number.js
-
-
-
-
-
-mock/random/basic/string.js->mock/random/basic/character.js
-
-
-
-
-
-mock/random/brandColors.json
-
-mock/random/brandColors.json
-
-
-
-mock/random/color.js->mock/random/helper.js
-
-
-
-
-
-mock/random/color/color_dict.js
-
-mock/random/color/color_dict.js
-
-
-
-mock/random/color.js->mock/random/color/color_dict.js
-
-
-
-
-
-mock/random/color/color_dict_cn.json
-
-mock/random/color/color_dict_cn.json
-
-
-
-mock/random/color.js->mock/random/color/color_dict_cn.json
-
-
-
-
-
-mock/random/date.js->mock/random/basic/number.js
-
-
-
-
-
-mock/random/date/_patternLetters.js
-
-mock/random/date/_patternLetters.js
-
-
-
-mock/random/date.js->mock/random/date/_patternLetters.js
-
-
-
-
-
-mock/random/file.js->mock/util.js
-
-
-
-
-
-mock/random/text/text_en.js
-
-mock/random/text/text_en.js
-
-
-
-mock/random/file.js->mock/random/text/text_en.js
-
-
-
-
-
-mock/random/text/text_en.js->mock/random/helper.js
-
-
-
-
-
-mock/random/text/text_en.js->mock/random/basic.js
-
-
-
-
-
-mock/random/image.js->mock/random/helper.js
-
-
-
-
-
-mock/random/image.js->mock/random/brandColors.json
-
-
-
-
-
-mock/random/image.js->mock/random/color.js
-
-
-
-
-
-mock/random/image.json
-
-mock/random/image.json
-
-
-
-mock/random/image.js->mock/random/image.json
-
-
-
-
-
-mock/random/misc.js->mock/random/basic/number.js
-
-
-
-
-
-mock/random/misc/guid.js
-
-mock/random/misc/guid.js
-
-
-
-mock/random/misc.js->mock/random/misc/guid.js
-
-
-
-
-
-mock/random/misc/id.js
-
-mock/random/misc/id.js
-
-
-
-mock/random/misc.js->mock/random/misc/id.js
-
-
-
-
-
-mock/random/name.js->mock/random/helper.js
-
-
-
-
-
-mock/random/name.json
-
-mock/random/name.json
-
-
-
-mock/random/name.js->mock/random/name.json
-
-
-
-
-
-mock/random/text.js->mock/random/text/text_en.js
-
-
-
-
-
-mock/random/text/text-ch.js
-
-mock/random/text/text-ch.js
-
-
-
-mock/random/text.js->mock/random/text/text-ch.js
-
-
-
-
-
-mock/random/web/web_func.js
-
-mock/random/web/web_func.js
-
-
-
-mock/random/web.js->mock/random/web/web_func.js
-
-
-
-
-
-mock/random/misc/id.js->mock/random/address_dict.js
-
-
-
-
-
-mock/random/misc/id.js->mock/random/helper.js
-
-
-
-
-
-mock/random/misc/id.js->mock/random/basic.js
-
-
-
-
-
-mock/random/misc/id.js->mock/random/date.js
-
-
-
-
-
-mock/random/text/text-ch.js->mock/random/basic.js
-
-
-
-
-
-mock/random/web/web_func.js->mock/random/helper.js
-
-
-
-
-
-mock/random/web/web_func.js->mock/random/basic.js
-
-
-
-
-
-mock/random/web/web_func.js->mock/random/text.js
-
-
-
-
-
-mock/random/web/web_dict.js
-
-mock/random/web/web_dict.js
-
-
-
-mock/random/web/web_func.js->mock/random/web/web_dict.js
-
-
-
-
-
-mock/regexp/handler.js->mock/random/index.js
-
-
-
-
-
-mock/regexp/handler.js->mock/util.js
-
-
-
-
-
-mock/schema/schema.js->mock/util.js
-
-
-
-
-
-mock/schema/schema.js->mock/constant.js
-
-
-
-
-
-mock/schema/schema.js->mock/parser.js
-
-
-
-
-
-mock/utils/each.js->mock/utils/type.js
-
-
-
-
-
-mock/valid/valid.js->mock/util.js
-
-
-
-
-
-mock/valid/valid.js->mock/constant.js
-
-
-
-
-
-mock/valid/valid.js->mock/schema/schema.js
-
-
-
-
-
-mock/xhr/XMLHttpRequest/constant.js
-
-mock/xhr/XMLHttpRequest/constant.js
-
-
-
-mock/xhr/XMLHttpRequest/xhr.js->mock/xhr/XMLHttpRequest/constant.js
-
-
-
-
-
-mock/xhr/ajax-tools.js
-
-mock/xhr/ajax-tools.js
-
-
-
-mock/xhr/XMLHttpRequest/xhr.js->mock/xhr/ajax-tools.js
-
-
-
-
-
-mock/xhr/ajax-tools.js->mock/_mocked.js
-
-
-
-
-
-mock/xhr/ajax-tools.js->mock/util.js
-
-
-
-
-
-mock/xhr/ajax-tools.js->mock/handle/gen.js
-
-
-
-
-
-mock/xhr/fetch/fetch.js->mock/xhr/ajax-tools.js
-
-
-
-
-
-mock/xhr/fetch/src/response.js
-
-mock/xhr/fetch/src/response.js
-
-
-
-mock/xhr/fetch/fetch.js->mock/xhr/fetch/src/response.js
-
-
-
-
-
-mock/xhr/fetch/src/INTERNALS.js
-
-mock/xhr/fetch/src/INTERNALS.js
-
-
-
-mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/INTERNALS.js
-
-
-
-
-
-mock/xhr/fetch/src/body.js
-
-mock/xhr/fetch/src/body.js
-
-
-
-mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/body.js
-
-
-
-
-
-mock/xhr/fetch/src/body/exactContentType.js
-
-mock/xhr/fetch/src/body/exactContentType.js
-
-
-
-mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/body/exactContentType.js
-
-
-
-
-
-mock/xhr/fetch/src/utils/is-redirect.js
-
-mock/xhr/fetch/src/utils/is-redirect.js
-
-
-
-mock/xhr/fetch/src/response.js->mock/xhr/fetch/src/utils/is-redirect.js
-
-
-
-
-
-mock/xhr/fetch/src/body.js->mock/xhr/fetch/src/INTERNALS.js
-
-
-
-
-
-mock/xhr/fetch/src/body/consumeBody.js
-
-mock/xhr/fetch/src/body/consumeBody.js
-
-
-
-mock/xhr/fetch/src/body.js->mock/xhr/fetch/src/body/consumeBody.js
-
-
-
-
-
-mock/xhr/fetch/src/utils/is.js
-
-mock/xhr/fetch/src/utils/is.js
-
-
-
-mock/xhr/fetch/src/body.js->mock/xhr/fetch/src/utils/is.js
-
-
-
-
-
-mock/xhr/fetch/src/body/exactContentType.js->mock/xhr/fetch/src/INTERNALS.js
-
-
-
-
-
-mock/xhr/fetch/src/body/exactContentType.js->mock/xhr/fetch/src/utils/is.js
-
-
-
-
-
diff --git a/index.html b/index.html
deleted file mode 100644
index 269439cd..00000000
--- a/index.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-    
-    
-    
-    Document
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/package.json b/package.json
index 897295da..c01826a5 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
     "name": "mockjs-esm",
     "title": "Mock.js",
     "description": "Mockjs 的 esm 版本,基础 api 一致",
-    "version": "1.0.1",
+    "version": "2.0.0",
     "homepage": "http://mockjs.com/",
     "keywords": [
         "mock",
@@ -17,61 +17,30 @@
         },
         {
             "type": "MIT",
-            "url": "https://gitee.com/dongzhongzhidong/Mock/LICENSE"
+            "url": "https://github.com/KonghaYao/Mock/LICENSE"
         }
     ],
     "repository": {
         "type": "git",
-        "url": "git://gitee.com/dongzhongzhidong/Mock.git"
-    },
-    "main": "./dist/mock.cjs.js",
-    "module": "./dist/mock.esm.js",
-    "es2015": "./dist/mock.esm.js",
-    "exports": {
-        ".": {
-            "node": "./dist/mock.cjs.js",
-            "default": "./dist/mock.esm.js"
-        }
+        "url": "git://github.com/KonghaYao/Mock.git"
     },
+    "main": "./dist/mock.mjs",
+    "module": "./dist/mock.mjs",
     "scripts": {
-        "dev": "rollup  --config rollup.config.dev.js -w",
-        "build": "rollup --config rollup.config.build.js",
-        "dev:cjs": "rollup --config rollup.config.cjs.dev.js",
-        "lint": "eslint src",
-        "Lint": "prettier --write src/**/*.{ts,json,md,yml,js} & eslint src",
+        "test": "vitest",
+        "build": "vite build",
         "prettier": "prettier --write src/**/*.{ts,json,md,yml,js}"
     },
     "dependencies": {
         "color": "^3.1.3",
         "lodash-es": "^4.17.21",
-        "rollup-plugin-module-replacement": "^1.2.1",
         "uuid": "^8.3.2"
     },
     "devDependencies": {
-        "@babel/core": "^7.14.6",
-        "@babel/preset-env": "^7.14.4",
-        "@rollup/plugin-babel": "^5.3.0",
-        "@rollup/plugin-json": "^4.1.0",
-        "@rollup/plugin-multi-entry": "^4.0.0",
-        "@rollup/plugin-replace": "^2.4.2",
         "@vitest/browser": "^1.2.2",
-        "babel-eslint": "^10.1.0",
-        "eslint": "^7.29.0",
-        "eslint-config-google": "^0.14.0",
-        "eslint-config-prettier": "^8.3.0",
-        "eslint-plugin-prettier": "^3.4.0",
-        "jquery": "^3.7.1",
+        "happy-dom": "^13.3.8",
+        "jquery": "~2.1.1",
         "prettier": "^2.3.2",
-        "rollup": "^2.50.5",
-        "rollup-plugin-babel": "^4.4.0",
-        "rollup-plugin-commonjs": "^10.1.0",
-        "rollup-plugin-delete": "^2.0.0",
-        "rollup-plugin-license": "^2.4.0",
-        "rollup-plugin-livereload": "^2.0.0",
-        "rollup-plugin-multi-input": "^1.3.1",
-        "rollup-plugin-node-resolve": "^5.2.0",
-        "rollup-plugin-serve": "^1.1.0",
-        "rollup-plugin-terser": "^7.0.2",
         "vite": "^5.0.12",
         "vitest": "^1.2.2"
     }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c23f7863..3d7cd6c9 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,5 +1,9 @@
 lockfileVersion: '6.0'
 
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
 dependencies:
   color:
     specifier: ^3.1.3
@@ -7,1199 +11,32 @@ dependencies:
   lodash-es:
     specifier: ^4.17.21
     version: 4.17.21
-  rollup-plugin-module-replacement:
-    specifier: ^1.2.1
-    version: 1.2.1
   uuid:
     specifier: ^8.3.2
     version: 8.3.2
 
 devDependencies:
-  '@babel/core':
-    specifier: ^7.14.6
-    version: 7.14.6
-  '@babel/preset-env':
-    specifier: ^7.14.4
-    version: 7.14.4(@babel/core@7.14.6)
-  '@rollup/plugin-babel':
-    specifier: ^5.3.0
-    version: 5.3.0(@babel/core@7.14.6)(rollup@2.50.5)
-  '@rollup/plugin-json':
-    specifier: ^4.1.0
-    version: 4.1.0(rollup@2.50.5)
-  '@rollup/plugin-multi-entry':
-    specifier: ^4.0.0
-    version: 4.0.0(rollup@2.50.5)
-  '@rollup/plugin-replace':
-    specifier: ^2.4.2
-    version: 2.4.2(rollup@2.50.5)
   '@vitest/browser':
     specifier: ^1.2.2
     version: 1.2.2(vitest@1.2.2)
-  babel-eslint:
-    specifier: ^10.1.0
-    version: 10.1.0(eslint@7.29.0)
-  eslint:
-    specifier: ^7.29.0
-    version: 7.29.0
-  eslint-config-google:
-    specifier: ^0.14.0
-    version: 0.14.0(eslint@7.29.0)
-  eslint-config-prettier:
-    specifier: ^8.3.0
-    version: 8.3.0(eslint@7.29.0)
-  eslint-plugin-prettier:
-    specifier: ^3.4.0
-    version: 3.4.0(eslint-config-prettier@8.3.0)(eslint@7.29.0)(prettier@2.3.2)
+  happy-dom:
+    specifier: ^13.3.8
+    version: 13.3.8
   jquery:
-    specifier: ^3.7.1
-    version: 3.7.1
+    specifier: ~2.1.1
+    version: 2.1.1
   prettier:
     specifier: ^2.3.2
     version: 2.3.2
-  rollup:
-    specifier: ^2.50.5
-    version: 2.50.5
-  rollup-plugin-babel:
-    specifier: ^4.4.0
-    version: 4.4.0(@babel/core@7.14.6)(rollup@2.50.5)
-  rollup-plugin-commonjs:
-    specifier: ^10.1.0
-    version: 10.1.0(rollup@2.50.5)
-  rollup-plugin-delete:
-    specifier: ^2.0.0
-    version: 2.0.0
-  rollup-plugin-license:
-    specifier: ^2.4.0
-    version: 2.4.0(rollup@2.50.5)
-  rollup-plugin-livereload:
-    specifier: ^2.0.0
-    version: 2.0.0
-  rollup-plugin-multi-input:
-    specifier: ^1.3.1
-    version: 1.3.1
-  rollup-plugin-node-resolve:
-    specifier: ^5.2.0
-    version: 5.2.0(rollup@2.50.5)
-  rollup-plugin-serve:
-    specifier: ^1.1.0
-    version: 1.1.0
-  rollup-plugin-terser:
-    specifier: ^7.0.2
-    version: 7.0.2(rollup@2.50.5)
   vite:
     specifier: ^5.0.12
     version: 5.0.12
   vitest:
     specifier: ^1.2.2
-    version: 1.2.2(@vitest/browser@1.2.2)
+    version: 1.2.2(@vitest/browser@1.2.2)(happy-dom@13.3.8)
 
 packages:
 
-  /@aashutoshrathi/word-wrap@1.2.6:
-    resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /@babel/code-frame@7.12.11:
-    resolution: {integrity: sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==}
-    dependencies:
-      '@babel/highlight': 7.23.4
-    dev: true
-
-  /@babel/code-frame@7.23.5:
-    resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/highlight': 7.23.4
-      chalk: 2.4.2
-    dev: true
-
-  /@babel/compat-data@7.23.5:
-    resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  /@babel/core@7.14.6:
-    resolution: {integrity: sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      '@babel/generator': 7.23.6
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6)
-      '@babel/helpers': 7.23.9
-      '@babel/parser': 7.23.9
-      '@babel/template': 7.23.9
-      '@babel/traverse': 7.23.9
-      '@babel/types': 7.23.9
-      convert-source-map: 1.9.0
-      debug: 4.3.4
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.1
-      source-map: 0.5.7
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@babel/generator@7.23.6:
-    resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-      '@jridgewell/gen-mapping': 0.3.3
-      '@jridgewell/trace-mapping': 0.3.22
-      jsesc: 2.5.2
-    dev: true
-
-  /@babel/helper-annotate-as-pure@7.22.5:
-    resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
-    resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-compilation-targets@7.23.6:
-    resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/helper-validator-option': 7.23.5
-      browserslist: 4.22.3
-      lru-cache: 5.1.1
-      semver: 6.3.1
-    dev: true
-
-  /@babel/helper-create-class-features-plugin@7.23.9(@babel/core@7.14.6):
-    resolution: {integrity: sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-member-expression-to-functions': 7.23.0
-      '@babel/helper-optimise-call-expression': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.14.6)
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      semver: 6.3.1
-    dev: true
-
-  /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.14.6):
-    resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-annotate-as-pure': 7.22.5
-      regexpu-core: 5.3.2
-      semver: 6.3.1
-    dev: true
-
-  /@babel/helper-define-polyfill-provider@0.2.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==}
-    peerDependencies:
-      '@babel/core': ^7.4.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-module-imports': 7.22.15
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/traverse': 7.23.9
-      debug: 4.3.4
-      lodash.debounce: 4.0.8
-      resolve: 1.22.8
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@babel/helper-environment-visitor@7.22.20:
-    resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  /@babel/helper-function-name@7.23.0:
-    resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.23.9
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-hoist-variables@7.22.5:
-    resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-member-expression-to-functions@7.23.0:
-    resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-module-imports@7.22.15:
-    resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-module-transforms@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-module-imports': 7.22.15
-      '@babel/helper-simple-access': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/helper-validator-identifier': 7.22.20
-    dev: true
-
-  /@babel/helper-optimise-call-expression@7.22.5:
-    resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-plugin-utils@7.22.5:
-    resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.14.6):
-    resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-wrap-function': 7.22.20
-    dev: true
-
-  /@babel/helper-replace-supers@7.22.20(@babel/core@7.14.6):
-    resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-member-expression-to-functions': 7.23.0
-      '@babel/helper-optimise-call-expression': 7.22.5
-    dev: true
-
-  /@babel/helper-simple-access@7.22.5:
-    resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
-    resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-split-export-declaration@7.22.6:
-    resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helper-string-parser@7.23.4:
-    resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  /@babel/helper-validator-identifier@7.22.20:
-    resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  /@babel/helper-validator-option@7.23.5:
-    resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
-  /@babel/helper-wrap-function@7.22.20:
-    resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-function-name': 7.23.0
-      '@babel/template': 7.23.9
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/helpers@7.23.9:
-    resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.23.9
-      '@babel/traverse': 7.23.9
-      '@babel/types': 7.23.9
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@babel/highlight@7.23.4:
-    resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-validator-identifier': 7.22.20
-      chalk: 2.4.2
-      js-tokens: 4.0.0
-    dev: true
-
-  /@babel/parser@7.23.9:
-    resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==}
-    engines: {node: '>=6.0.0'}
-    hasBin: true
-    dependencies:
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.13.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.14.6):
-    resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.14.6)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-proposal-class-static-block@7.21.0(@babel/core@7.14.6):
-    resolution: {integrity: sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.12.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-dynamic-import@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.14.6):
-    resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-json-strings@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-logical-assignment-operators@7.20.7(@babel/core@7.14.6):
-    resolution: {integrity: sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.14.6):
-    resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/core': 7.14.6
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.14.6):
-    resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.14.6):
-    resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.14.6):
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.14.6):
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.14.6):
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.14.6):
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-module-imports': 7.22.15
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-classes@7.23.8(@babel/core@7.14.6):
-    resolution: {integrity: sha512-yAYslGsY1bX6Knmg46RjiCiNSwJKv2IUC8qOdYKqMMr0491SXFhcHqOdRDeCRohOOIzwN/90C6mQ9qAKgrP7dg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.14.6)
-      '@babel/helper-split-export-declaration': 7.22.6
-      globals: 11.12.0
-    dev: true
-
-  /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/template': 7.23.9
-    dev: true
-
-  /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-literals@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-simple-access': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-modules-systemjs@7.23.9(@babel/core@7.14.6):
-    resolution: {integrity: sha512-KDlPRM6sLo4o1FkiSlXoAa8edLXFsKKIda779fbLrvmeuc3itnjCtaO6RrtoaANsIJANj+Vk1zqbZIMhkCAHVw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-hoist-variables': 7.22.5
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-validator-identifier': 7.22.20
-    dev: true
-
-  /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.14.6):
-    resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.14.6)
-    dev: true
-
-  /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      regenerator-transform: 0.15.2
-    dev: true
-
-  /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-spread@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.14.6)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/preset-env@7.14.4(@babel/core@7.14.6):
-    resolution: {integrity: sha512-GwMMsuAnDtULyOtuxHhzzuSRxFeP0aR/LNzrHRzP8y6AgDNgqnrfCCBm/1cRdTU75tRs28Eh76poHLcg9VF0LA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/core': 7.14.6
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-validator-option': 7.23.5
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.14.6)
-      '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-class-static-block': 7.21.0(@babel/core@7.14.6)
-      '@babel/plugin-proposal-dynamic-import': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.14.6)
-      '@babel/plugin-proposal-json-strings': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-logical-assignment-operators': 7.20.7(@babel/core@7.14.6)
-      '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.14.6)
-      '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.14.6)
-      '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.14.6)
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.14.6)
-      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.14.6)
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.14.6)
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.14.6)
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.14.6)
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.14.6)
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.14.6)
-      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.14.6)
-      '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.14.6)
-      '@babel/plugin-transform-classes': 7.23.8(@babel/core@7.14.6)
-      '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.14.6)
-      '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-modules-systemjs': 7.23.9(@babel/core@7.14.6)
-      '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.14.6)
-      '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.14.6)
-      '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.14.6)
-      '@babel/preset-modules': 0.1.6(@babel/core@7.14.6)
-      '@babel/types': 7.23.9
-      babel-plugin-polyfill-corejs2: 0.2.3(@babel/core@7.14.6)
-      babel-plugin-polyfill-corejs3: 0.2.5(@babel/core@7.14.6)
-      babel-plugin-polyfill-regenerator: 0.2.3(@babel/core@7.14.6)
-      core-js-compat: 3.35.1
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@babel/preset-modules@0.1.6(@babel/core@7.14.6):
-    resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.14.6)
-      '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.14.6)
-      '@babel/types': 7.23.9
-      esutils: 2.0.3
-    dev: true
-
-  /@babel/regjsgen@0.8.0:
-    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
-    dev: true
-
-  /@babel/runtime@7.23.9:
-    resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      regenerator-runtime: 0.14.1
-    dev: true
-
-  /@babel/template@7.23.9:
-    resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      '@babel/parser': 7.23.9
-      '@babel/types': 7.23.9
-    dev: true
-
-  /@babel/traverse@7.23.9:
-    resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      '@babel/generator': 7.23.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-hoist-variables': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/parser': 7.23.9
-      '@babel/types': 7.23.9
-      debug: 4.3.4
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /@babel/types@7.23.9:
-    resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': 7.23.4
-      '@babel/helper-validator-identifier': 7.22.20
-      to-fast-properties: 2.0.0
-    dev: true
-
   /@esbuild/aix-ppc64@0.19.12:
     resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
     engines: {node: '>=12'}
@@ -1407,23 +244,6 @@ packages:
     dev: true
     optional: true
 
-  /@eslint/eslintrc@0.4.3:
-    resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-    dependencies:
-      ajv: 6.12.6
-      debug: 4.3.4
-      espree: 7.3.1
-      globals: 13.24.0
-      ignore: 4.0.6
-      import-fresh: 3.3.0
-      js-yaml: 3.14.1
-      minimatch: 3.1.2
-      strip-json-comments: 3.1.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /@jest/schemas@29.6.3:
     resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
@@ -1431,134 +251,12 @@ packages:
       '@sinclair/typebox': 0.27.8
     dev: true
 
-  /@jridgewell/gen-mapping@0.3.3:
-    resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.15
-      '@jridgewell/trace-mapping': 0.3.22
-    dev: true
-
-  /@jridgewell/resolve-uri@3.1.1:
-    resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  /@jridgewell/set-array@1.1.2:
-    resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
-    engines: {node: '>=6.0.0'}
-    dev: true
-
-  /@jridgewell/source-map@0.3.5:
-    resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.3
-      '@jridgewell/trace-mapping': 0.3.22
-    dev: true
-
   /@jridgewell/sourcemap-codec@1.4.15:
     resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
     dev: true
 
-  /@jridgewell/trace-mapping@0.3.22:
-    resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.1
-      '@jridgewell/sourcemap-codec': 1.4.15
-    dev: true
-
-  /@nodelib/fs.scandir@2.1.5:
-    resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
-    engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      run-parallel: 1.2.0
-    dev: true
-
-  /@nodelib/fs.stat@2.0.5:
-    resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
-    engines: {node: '>= 8'}
-    dev: true
-
-  /@nodelib/fs.walk@1.2.8:
-    resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
-    engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.17.0
-    dev: true
-
-  /@polka/url@1.0.0-next.24:
-    resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
-    dev: true
-
-  /@rollup/plugin-babel@5.3.0(@babel/core@7.14.6)(rollup@2.50.5):
-    resolution: {integrity: sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==}
-    engines: {node: '>= 10.0.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0
-      '@types/babel__core': ^7.1.9
-      rollup: ^1.20.0||^2.0.0
-    peerDependenciesMeta:
-      '@types/babel__core':
-        optional: true
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-module-imports': 7.22.15
-      '@rollup/pluginutils': 3.1.0(rollup@2.50.5)
-      rollup: 2.50.5
-    dev: true
-
-  /@rollup/plugin-json@4.1.0(rollup@2.50.5):
-    resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==}
-    peerDependencies:
-      rollup: ^1.20.0 || ^2.0.0
-    dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.50.5)
-      rollup: 2.50.5
-    dev: true
-
-  /@rollup/plugin-multi-entry@4.0.0(rollup@2.50.5):
-    resolution: {integrity: sha512-1Sw86rwFxrNS7ECY3iSZ7T940xKnruNGpmQDgSDVTp+VTa1g5cPXNzBgp+IoOer41CiVeGFLwYwvicVoJLHEDQ==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0 || ^2.0.0
-    dependencies:
-      '@rollup/plugin-virtual': 2.1.0(rollup@2.50.5)
-      matched: 5.0.1
-      rollup: 2.50.5
-    dev: true
-
-  /@rollup/plugin-replace@2.4.2(rollup@2.50.5):
-    resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
-    peerDependencies:
-      rollup: ^1.20.0 || ^2.0.0
-    dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.50.5)
-      magic-string: 0.25.9
-      rollup: 2.50.5
-    dev: true
-
-  /@rollup/plugin-virtual@2.1.0(rollup@2.50.5):
-    resolution: {integrity: sha512-CPPAtlKT53HFqC8jFHb/V5WErpU8Hrq2TyCR0A7kPQMlF2wNUf0o1xuAc+Qxj8NCZM0Z3Yvl+FbUXfJjVWqDwA==}
-    engines: {node: '>=8.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0
-    dependencies:
-      rollup: 2.50.5
-    dev: true
-
-  /@rollup/pluginutils@3.1.0(rollup@2.50.5):
-    resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
-    engines: {node: '>= 8.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0
-    dependencies:
-      '@types/estree': 0.0.39
-      estree-walker: 1.0.1
-      picomatch: 2.3.1
-      rollup: 2.50.5
+  /@polka/url@1.0.0-next.24:
+    resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
     dev: true
 
   /@rollup/rollup-android-arm-eabi@4.9.6:
@@ -1669,37 +367,10 @@ packages:
     resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
     dev: true
 
-  /@types/estree@0.0.39:
-    resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
-    dev: true
-
   /@types/estree@1.0.5:
     resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
     dev: true
 
-  /@types/glob@7.2.0:
-    resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
-    dependencies:
-      '@types/minimatch': 5.1.2
-      '@types/node': 20.11.10
-    dev: true
-
-  /@types/minimatch@5.1.2:
-    resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
-    dev: true
-
-  /@types/node@20.11.10:
-    resolution: {integrity: sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==}
-    dependencies:
-      undici-types: 5.26.5
-    dev: true
-
-  /@types/resolve@0.0.8:
-    resolution: {integrity: sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==}
-    dependencies:
-      '@types/node': 20.11.10
-    dev: true
-
   /@vitest/browser@1.2.2(vitest@1.2.2):
     resolution: {integrity: sha512-N8myxNVLbS9AbZ7B2cK33HTGYVzUTDArbMh3hLojOxaj7s7ZrBYYmzs0Q5J2wyDrOgs51p6OUrrzAIb1Z+Ck3A==}
     peerDependencies:
@@ -1718,7 +389,7 @@ packages:
       '@vitest/utils': 1.2.2
       magic-string: 0.30.5
       sirv: 2.0.4
-      vitest: 1.2.2(@vitest/browser@1.2.2)
+      vitest: 1.2.2(@vitest/browser@1.2.2)(happy-dom@13.3.8)
     dev: true
 
   /@vitest/expect@1.2.2:
@@ -1760,229 +431,31 @@ packages:
       pretty-format: 29.7.0
     dev: true
 
-  /acorn-jsx@5.3.2(acorn@7.4.1):
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-    dependencies:
-      acorn: 7.4.1
-    dev: true
-
   /acorn-walk@8.3.2:
     resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
     engines: {node: '>=0.4.0'}
     dev: true
 
-  /acorn@7.4.1:
-    resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
-
   /acorn@8.11.3:
     resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
     engines: {node: '>=0.4.0'}
     hasBin: true
     dev: true
 
-  /aggregate-error@3.1.0:
-    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
-    engines: {node: '>=8'}
-    dependencies:
-      clean-stack: 2.2.0
-      indent-string: 4.0.0
-    dev: true
-
-  /ajv@6.12.6:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
-    dependencies:
-      fast-deep-equal: 3.1.3
-      fast-json-stable-stringify: 2.1.0
-      json-schema-traverse: 0.4.1
-      uri-js: 4.4.1
-    dev: true
-
-  /ajv@8.12.0:
-    resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
-    dependencies:
-      fast-deep-equal: 3.1.3
-      json-schema-traverse: 1.0.0
-      require-from-string: 2.0.2
-      uri-js: 4.4.1
-    dev: true
-
-  /ansi-colors@4.1.3:
-    resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /ansi-regex@5.0.1:
-    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /ansi-styles@3.2.1:
-    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
-    engines: {node: '>=4'}
-    dependencies:
-      color-convert: 1.9.3
-    dev: true
-
-  /ansi-styles@4.3.0:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-    engines: {node: '>=8'}
-    dependencies:
-      color-convert: 2.0.1
-    dev: true
-
   /ansi-styles@5.2.0:
     resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
     engines: {node: '>=10'}
     dev: true
 
-  /anymatch@3.1.3:
-    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
-    engines: {node: '>= 8'}
-    dependencies:
-      normalize-path: 3.0.0
-      picomatch: 2.3.1
-    dev: true
-
-  /argparse@1.0.10:
-    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
-    dependencies:
-      sprintf-js: 1.0.3
-    dev: true
-
-  /array-find-index@1.0.2:
-    resolution: {integrity: sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /array-union@2.1.0:
-    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
-    engines: {node: '>=8'}
-    dev: true
-
   /assertion-error@1.1.0:
     resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
     dev: true
 
-  /astral-regex@2.0.0:
-    resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /babel-eslint@10.1.0(eslint@7.29.0):
-    resolution: {integrity: sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==}
-    engines: {node: '>=6'}
-    peerDependencies:
-      eslint: '>= 4.12.1'
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      '@babel/parser': 7.23.9
-      '@babel/traverse': 7.23.9
-      '@babel/types': 7.23.9
-      eslint: 7.29.0
-      eslint-visitor-keys: 1.3.0
-      resolve: 1.22.8
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /babel-plugin-polyfill-corejs2@0.2.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-NDZ0auNRzmAfE1oDDPW2JhzIMXUk+FFe2ICejmt5T4ocKgiQx3e0VCRx9NCAidcMtL2RUZaWtXnmjTCkx0tcbA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/core': 7.14.6
-      '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.14.6)
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /babel-plugin-polyfill-corejs3@0.2.5(@babel/core@7.14.6):
-    resolution: {integrity: sha512-ninF5MQNwAX9Z7c9ED+H2pGt1mXdP4TqzlHKyPIYmJIYz0N+++uwdM7RnJukklhzJ54Q84vA4ZJkgs7lu5vqcw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.14.6)
-      core-js-compat: 3.35.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /babel-plugin-polyfill-regenerator@0.2.3(@babel/core@7.14.6):
-    resolution: {integrity: sha512-JVE78oRZPKFIeUqFGrSORNzQnrDwZR16oiWeGM8ZyjBn2XAT5OjP+wXx5ESuo33nUsFUEJYjtklnsKbxW5L+7g==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-define-polyfill-provider': 0.2.4(@babel/core@7.14.6)
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /balanced-match@1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-    dev: true
-
-  /binary-extensions@2.2.0:
-    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /brace-expansion@1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
-    dependencies:
-      balanced-match: 1.0.2
-      concat-map: 0.0.1
-    dev: true
-
-  /braces@3.0.2:
-    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
-    engines: {node: '>=8'}
-    dependencies:
-      fill-range: 7.0.1
-    dev: true
-
-  /browserslist@4.22.3:
-    resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
-    dependencies:
-      caniuse-lite: 1.0.30001581
-      electron-to-chromium: 1.4.650
-      node-releases: 2.0.14
-      update-browserslist-db: 1.0.13(browserslist@4.22.3)
-    dev: true
-
-  /buffer-from@1.1.2:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-    dev: true
-
-  /builtin-modules@3.3.0:
-    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
-    engines: {node: '>=6'}
-    dev: true
-
   /cac@6.7.14:
     resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
     engines: {node: '>=8'}
     dev: true
 
-  /callsites@3.1.0:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /caniuse-lite@1.0.30001581:
-    resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==}
-    dev: true
-
   /chai@4.4.1:
     resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==}
     engines: {node: '>=4'}
@@ -1996,66 +469,25 @@ packages:
       type-detect: 4.0.8
     dev: true
 
-  /chalk@2.4.2:
-    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      ansi-styles: 3.2.1
-      escape-string-regexp: 1.0.5
-      supports-color: 5.5.0
-    dev: true
-
-  /chalk@4.1.2:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-    dev: true
-
   /check-error@1.0.3:
     resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
     dependencies:
       get-func-name: 2.0.2
     dev: true
 
-  /chokidar@3.5.3:
-    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
-    engines: {node: '>= 8.10.0'}
-    dependencies:
-      anymatch: 3.1.3
-      braces: 3.0.2
-      glob-parent: 5.1.2
-      is-binary-path: 2.1.0
-      is-glob: 4.0.3
-      normalize-path: 3.0.0
-      readdirp: 3.6.0
-    optionalDependencies:
-      fsevents: 2.3.3
-    dev: true
-
-  /clean-stack@2.2.0:
-    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
-    engines: {node: '>=6'}
-    dev: true
-
   /color-convert@1.9.3:
     resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
     dependencies:
       color-name: 1.1.3
-
-  /color-convert@2.0.1:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-    engines: {node: '>=7.0.0'}
-    dependencies:
-      color-name: 1.1.4
-    dev: true
+    dev: false
 
   /color-name@1.1.3:
     resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=}
+    dev: false
 
   /color-name@1.1.4:
     resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+    dev: false
 
   /color-string@1.9.1:
     resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
@@ -2071,33 +503,6 @@ packages:
       color-string: 1.9.1
     dev: false
 
-  /commander@2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-    dev: true
-
-  /commenting@1.1.0:
-    resolution: {integrity: sha512-YeNK4tavZwtH7jEgK1ZINXzLKm6DZdEMfsaaieOsCAN0S8vsY7UeuO3Q7d/M018EFgE+IeUAuBOKkFccBZsUZA==}
-    dev: true
-
-  /concat-map@0.0.1:
-    resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=}
-    dev: true
-
-  /convert-source-map@1.9.0:
-    resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
-    dev: true
-
-  /core-js-compat@3.35.1:
-    resolution: {integrity: sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==}
-    dependencies:
-      browserslist: 4.22.3
-    dev: true
-
-  /core-js@3.35.1:
-    resolution: {integrity: sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==}
-    requiresBuild: true
-    dev: true
-
   /cross-spawn@7.0.3:
     resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
     engines: {node: '>= 8'}
@@ -2126,57 +531,14 @@ packages:
       type-detect: 4.0.8
     dev: true
 
-  /deep-is@0.1.4:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-    dev: true
-
-  /del@5.1.0:
-    resolution: {integrity: sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==}
-    engines: {node: '>=8'}
-    dependencies:
-      globby: 10.0.2
-      graceful-fs: 4.2.11
-      is-glob: 4.0.3
-      is-path-cwd: 2.2.0
-      is-path-inside: 3.0.3
-      p-map: 3.0.0
-      rimraf: 3.0.2
-      slash: 3.0.0
-    dev: true
-
   /diff-sequences@29.6.3:
     resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dev: true
 
-  /dir-glob@3.0.1:
-    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
-    engines: {node: '>=8'}
-    dependencies:
-      path-type: 4.0.0
-    dev: true
-
-  /doctrine@3.0.0:
-    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      esutils: 2.0.3
-    dev: true
-
-  /electron-to-chromium@1.4.650:
-    resolution: {integrity: sha512-sYSQhJCJa4aGA1wYol5cMQgekDBlbVfTRavlGZVr3WZpDdOPcp6a6xUnFfrt8TqZhsBYYbDxJZCjGfHuGupCRQ==}
-    dev: true
-
-  /emoji-regex@8.0.0:
-    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-    dev: true
-
-  /enquirer@2.4.1:
-    resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
-    engines: {node: '>=8.6'}
-    dependencies:
-      ansi-colors: 4.1.3
-      strip-ansi: 6.0.1
+  /entities@4.5.0:
+    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+    engines: {node: '>=0.12'}
     dev: true
 
   /esbuild@0.19.12:
@@ -2190,194 +552,24 @@ packages:
       '@esbuild/android-arm64': 0.19.12
       '@esbuild/android-x64': 0.19.12
       '@esbuild/darwin-arm64': 0.19.12
-      '@esbuild/darwin-x64': 0.19.12
-      '@esbuild/freebsd-arm64': 0.19.12
-      '@esbuild/freebsd-x64': 0.19.12
-      '@esbuild/linux-arm': 0.19.12
-      '@esbuild/linux-arm64': 0.19.12
-      '@esbuild/linux-ia32': 0.19.12
-      '@esbuild/linux-loong64': 0.19.12
-      '@esbuild/linux-mips64el': 0.19.12
-      '@esbuild/linux-ppc64': 0.19.12
-      '@esbuild/linux-riscv64': 0.19.12
-      '@esbuild/linux-s390x': 0.19.12
-      '@esbuild/linux-x64': 0.19.12
-      '@esbuild/netbsd-x64': 0.19.12
-      '@esbuild/openbsd-x64': 0.19.12
-      '@esbuild/sunos-x64': 0.19.12
-      '@esbuild/win32-arm64': 0.19.12
-      '@esbuild/win32-ia32': 0.19.12
-      '@esbuild/win32-x64': 0.19.12
-    dev: true
-
-  /escalade@3.1.1:
-    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /escape-string-regexp@1.0.5:
-    resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=}
-    engines: {node: '>=0.8.0'}
-    dev: true
-
-  /escape-string-regexp@4.0.0:
-    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
-    engines: {node: '>=10'}
-    dev: true
-
-  /eslint-config-google@0.14.0(eslint@7.29.0):
-    resolution: {integrity: sha512-WsbX4WbjuMvTdeVL6+J3rK1RGhCTqjsFjX7UMSMgZiyxxaNLkoJENbrGExzERFeoTpGw3F3FypTiWAP9ZXzkEw==}
-    engines: {node: '>=0.10.0'}
-    peerDependencies:
-      eslint: '>=5.16.0'
-    dependencies:
-      eslint: 7.29.0
-    dev: true
-
-  /eslint-config-prettier@8.3.0(eslint@7.29.0):
-    resolution: {integrity: sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==}
-    hasBin: true
-    peerDependencies:
-      eslint: '>=7.0.0'
-    dependencies:
-      eslint: 7.29.0
-    dev: true
-
-  /eslint-plugin-prettier@3.4.0(eslint-config-prettier@8.3.0)(eslint@7.29.0)(prettier@2.3.2):
-    resolution: {integrity: sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==}
-    engines: {node: '>=6.0.0'}
-    peerDependencies:
-      eslint: '>=5.0.0'
-      eslint-config-prettier: '*'
-      prettier: '>=1.13.0'
-    peerDependenciesMeta:
-      eslint-config-prettier:
-        optional: true
-    dependencies:
-      eslint: 7.29.0
-      eslint-config-prettier: 8.3.0(eslint@7.29.0)
-      prettier: 2.3.2
-      prettier-linter-helpers: 1.0.0
-    dev: true
-
-  /eslint-scope@5.1.1:
-    resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
-    engines: {node: '>=8.0.0'}
-    dependencies:
-      esrecurse: 4.3.0
-      estraverse: 4.3.0
-    dev: true
-
-  /eslint-utils@2.1.0:
-    resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
-    engines: {node: '>=6'}
-    dependencies:
-      eslint-visitor-keys: 1.3.0
-    dev: true
-
-  /eslint-visitor-keys@1.3.0:
-    resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /eslint-visitor-keys@2.1.0:
-    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
-    engines: {node: '>=10'}
-    dev: true
-
-  /eslint@7.29.0:
-    resolution: {integrity: sha512-82G/JToB9qIy/ArBzIWG9xvvwL3R86AlCjtGw+A29OMZDqhTybz/MByORSukGxeI+YPCR4coYyITKk8BFH9nDA==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-    hasBin: true
-    dependencies:
-      '@babel/code-frame': 7.12.11
-      '@eslint/eslintrc': 0.4.3
-      ajv: 6.12.6
-      chalk: 4.1.2
-      cross-spawn: 7.0.3
-      debug: 4.3.4
-      doctrine: 3.0.0
-      enquirer: 2.4.1
-      escape-string-regexp: 4.0.0
-      eslint-scope: 5.1.1
-      eslint-utils: 2.1.0
-      eslint-visitor-keys: 2.1.0
-      espree: 7.3.1
-      esquery: 1.5.0
-      esutils: 2.0.3
-      fast-deep-equal: 3.1.3
-      file-entry-cache: 6.0.1
-      functional-red-black-tree: 1.0.1
-      glob-parent: 5.1.2
-      globals: 13.24.0
-      ignore: 4.0.6
-      import-fresh: 3.3.0
-      imurmurhash: 0.1.4
-      is-glob: 4.0.3
-      js-yaml: 3.14.1
-      json-stable-stringify-without-jsonify: 1.0.1
-      levn: 0.4.1
-      lodash.merge: 4.6.2
-      minimatch: 3.1.2
-      natural-compare: 1.4.0
-      optionator: 0.9.3
-      progress: 2.0.3
-      regexpp: 3.2.0
-      semver: 7.5.4
-      strip-ansi: 6.0.1
-      strip-json-comments: 3.1.1
-      table: 6.8.1
-      text-table: 0.2.0
-      v8-compile-cache: 2.4.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /espree@7.3.1:
-    resolution: {integrity: sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-    dependencies:
-      acorn: 7.4.1
-      acorn-jsx: 5.3.2(acorn@7.4.1)
-      eslint-visitor-keys: 1.3.0
-    dev: true
-
-  /esprima@4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  /esquery@1.5.0:
-    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
-    engines: {node: '>=0.10'}
-    dependencies:
-      estraverse: 5.3.0
-    dev: true
-
-  /esrecurse@4.3.0:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
-    engines: {node: '>=4.0'}
-    dependencies:
-      estraverse: 5.3.0
-    dev: true
-
-  /estraverse@4.3.0:
-    resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
-    engines: {node: '>=4.0'}
-    dev: true
-
-  /estraverse@5.3.0:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
-    engines: {node: '>=4.0'}
-    dev: true
-
-  /estree-walker@0.6.1:
-    resolution: {integrity: sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==}
-    dev: true
-
-  /estree-walker@1.0.1:
-    resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
+      '@esbuild/darwin-x64': 0.19.12
+      '@esbuild/freebsd-arm64': 0.19.12
+      '@esbuild/freebsd-x64': 0.19.12
+      '@esbuild/linux-arm': 0.19.12
+      '@esbuild/linux-arm64': 0.19.12
+      '@esbuild/linux-ia32': 0.19.12
+      '@esbuild/linux-loong64': 0.19.12
+      '@esbuild/linux-mips64el': 0.19.12
+      '@esbuild/linux-ppc64': 0.19.12
+      '@esbuild/linux-riscv64': 0.19.12
+      '@esbuild/linux-s390x': 0.19.12
+      '@esbuild/linux-x64': 0.19.12
+      '@esbuild/netbsd-x64': 0.19.12
+      '@esbuild/openbsd-x64': 0.19.12
+      '@esbuild/sunos-x64': 0.19.12
+      '@esbuild/win32-arm64': 0.19.12
+      '@esbuild/win32-ia32': 0.19.12
+      '@esbuild/win32-x64': 0.19.12
     dev: true
 
   /estree-walker@3.0.3:
@@ -2386,11 +578,6 @@ packages:
       '@types/estree': 1.0.5
     dev: true
 
-  /esutils@2.0.3:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
   /execa@8.0.1:
     resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
     engines: {node: '>=16.17'}
@@ -2406,70 +593,6 @@ packages:
       strip-final-newline: 3.0.0
     dev: true
 
-  /fast-deep-equal@3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-    dev: true
-
-  /fast-diff@1.3.0:
-    resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
-    dev: true
-
-  /fast-glob@3.3.2:
-    resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
-    engines: {node: '>=8.6.0'}
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      '@nodelib/fs.walk': 1.2.8
-      glob-parent: 5.1.2
-      merge2: 1.4.1
-      micromatch: 4.0.5
-    dev: true
-
-  /fast-json-stable-stringify@2.1.0:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-    dev: true
-
-  /fast-levenshtein@2.0.6:
-    resolution: {integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=}
-    dev: true
-
-  /fastq@1.17.0:
-    resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==}
-    dependencies:
-      reusify: 1.0.4
-    dev: true
-
-  /file-entry-cache@6.0.1:
-    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-    dependencies:
-      flat-cache: 3.2.0
-    dev: true
-
-  /fill-range@7.0.1:
-    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
-    engines: {node: '>=8'}
-    dependencies:
-      to-regex-range: 5.0.1
-    dev: true
-
-  /flat-cache@3.2.0:
-    resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
-    engines: {node: ^10.12.0 || >=12.0.0}
-    dependencies:
-      flatted: 3.2.9
-      keyv: 4.5.4
-      rimraf: 3.0.2
-    dev: true
-
-  /flatted@3.2.9:
-    resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
-    dev: true
-
-  /fs.realpath@1.0.0:
-    resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=}
-    dev: true
-
   /fsevents@2.3.3:
     resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -2478,19 +601,6 @@ packages:
     dev: true
     optional: true
 
-  /function-bind@1.1.2:
-    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-    dev: true
-
-  /functional-red-black-tree@1.0.1:
-    resolution: {integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=}
-    dev: true
-
-  /gensync@1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
-    engines: {node: '>=6.9.0'}
-    dev: true
-
   /get-func-name@2.0.2:
     resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
     dev: true
@@ -2500,80 +610,13 @@ packages:
     engines: {node: '>=16'}
     dev: true
 
-  /glob-parent@5.1.2:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-    engines: {node: '>= 6'}
-    dependencies:
-      is-glob: 4.0.3
-    dev: true
-
-  /glob@7.1.7:
-    resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==}
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-    dev: true
-
-  /glob@7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-    dev: true
-
-  /globals@11.12.0:
-    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /globals@13.24.0:
-    resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
-    engines: {node: '>=8'}
-    dependencies:
-      type-fest: 0.20.2
-    dev: true
-
-  /globby@10.0.2:
-    resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==}
-    engines: {node: '>=8'}
-    dependencies:
-      '@types/glob': 7.2.0
-      array-union: 2.1.0
-      dir-glob: 3.0.1
-      fast-glob: 3.3.2
-      glob: 7.2.3
-      ignore: 5.3.0
-      merge2: 1.4.1
-      slash: 3.0.0
-    dev: true
-
-  /graceful-fs@4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-    dev: true
-
-  /has-flag@3.0.0:
-    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /has-flag@4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /hasown@2.0.0:
-    resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
-    engines: {node: '>= 0.4'}
+  /happy-dom@13.3.8:
+    resolution: {integrity: sha512-RAbq4oYfJNkVan1m1F3jfA4YEyRY0/ASoNvZsNJbuX85jIypidmsz9jQZD7Tqz0VXA2MhAGfcsh5oshwmwNYSg==}
+    engines: {node: '>=16.0.0'}
     dependencies:
-      function-bind: 1.1.2
+      entities: 4.5.0
+      webidl-conversions: 7.0.0
+      whatwg-mimetype: 3.0.0
     dev: true
 
   /human-signals@5.0.0:
@@ -2581,104 +624,10 @@ packages:
     engines: {node: '>=16.17.0'}
     dev: true
 
-  /ignore@4.0.6:
-    resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==}
-    engines: {node: '>= 4'}
-    dev: true
-
-  /ignore@5.3.0:
-    resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==}
-    engines: {node: '>= 4'}
-    dev: true
-
-  /import-fresh@3.3.0:
-    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
-    engines: {node: '>=6'}
-    dependencies:
-      parent-module: 1.0.1
-      resolve-from: 4.0.0
-    dev: true
-
-  /imurmurhash@0.1.4:
-    resolution: {integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o=}
-    engines: {node: '>=0.8.19'}
-    dev: true
-
-  /indent-string@4.0.0:
-    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /inflight@1.0.6:
-    resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=}
-    dependencies:
-      once: 1.4.0
-      wrappy: 1.0.2
-    dev: true
-
-  /inherits@2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-    dev: true
-
   /is-arrayish@0.3.2:
     resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
     dev: false
 
-  /is-binary-path@2.1.0:
-    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
-    engines: {node: '>=8'}
-    dependencies:
-      binary-extensions: 2.2.0
-    dev: true
-
-  /is-core-module@2.13.1:
-    resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
-    dependencies:
-      hasown: 2.0.0
-    dev: true
-
-  /is-extglob@2.1.1:
-    resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /is-fullwidth-code-point@3.0.0:
-    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /is-glob@4.0.3:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      is-extglob: 2.1.1
-    dev: true
-
-  /is-module@1.0.0:
-    resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=}
-    dev: true
-
-  /is-number@7.0.0:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-    engines: {node: '>=0.12.0'}
-    dev: true
-
-  /is-path-cwd@2.2.0:
-    resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /is-path-inside@3.0.3:
-    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /is-reference@1.2.1:
-    resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
-    dependencies:
-      '@types/estree': 1.0.5
-    dev: true
-
   /is-stream@3.0.0:
     resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2688,100 +637,14 @@ packages:
     resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=}
     dev: true
 
-  /jest-worker@26.6.2:
-    resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
-    engines: {node: '>= 10.13.0'}
-    dependencies:
-      '@types/node': 20.11.10
-      merge-stream: 2.0.0
-      supports-color: 7.2.0
-    dev: true
-
-  /jquery@3.7.1:
-    resolution: {integrity: sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==}
-    dev: true
-
-  /js-tokens@4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-    dev: true
-
-  /js-yaml@3.14.1:
-    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
-    hasBin: true
-    dependencies:
-      argparse: 1.0.10
-      esprima: 4.0.1
-    dev: true
-
-  /jsesc@0.5.0:
-    resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=}
-    hasBin: true
-    dev: true
-
-  /jsesc@2.5.2:
-    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
-
-  /json-buffer@3.0.1:
-    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-    dev: true
-
-  /json-schema-traverse@0.4.1:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-    dev: true
-
-  /json-schema-traverse@1.0.0:
-    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-    dev: true
-
-  /json-stable-stringify-without-jsonify@1.0.1:
-    resolution: {integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=}
-    dev: true
-
-  /json5@2.2.3:
-    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
-    engines: {node: '>=6'}
-    hasBin: true
+  /jquery@2.1.1:
+    resolution: {integrity: sha1-go/GD1D37lmDNj706wHF9wr0vVs=}
     dev: true
 
   /jsonc-parser@3.2.1:
     resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==}
     dev: true
 
-  /keyv@4.5.4:
-    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-    dependencies:
-      json-buffer: 3.0.1
-    dev: true
-
-  /levn@0.4.1:
-    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-    dev: true
-
-  /livereload-js@3.4.1:
-    resolution: {integrity: sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==}
-    dev: true
-
-  /livereload@0.9.3:
-    resolution: {integrity: sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==}
-    engines: {node: '>=8.0.0'}
-    hasBin: true
-    dependencies:
-      chokidar: 3.5.3
-      livereload-js: 3.4.1
-      opts: 2.0.2
-      ws: 7.5.9
-    transitivePeerDependencies:
-      - bufferutil
-      - utf-8-validate
-    dev: true
-
   /local-pkg@0.5.0:
     resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
     engines: {node: '>=14'}
@@ -2794,53 +657,12 @@ packages:
     resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
     dev: false
 
-  /lodash.debounce@4.0.8:
-    resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=}
-    dev: true
-
-  /lodash.merge@4.6.2:
-    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-    dev: true
-
-  /lodash.truncate@4.4.2:
-    resolution: {integrity: sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=}
-    dev: true
-
-  /lodash@4.17.21:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-    dev: true
-
   /loupe@2.3.7:
     resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
     dependencies:
       get-func-name: 2.0.2
     dev: true
 
-  /lru-cache@5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-    dependencies:
-      yallist: 3.1.1
-    dev: true
-
-  /lru-cache@6.0.0:
-    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
-    engines: {node: '>=10'}
-    dependencies:
-      yallist: 4.0.0
-    dev: true
-
-  /magic-string@0.25.7:
-    resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==}
-    dependencies:
-      sourcemap-codec: 1.4.8
-    dev: true
-
-  /magic-string@0.25.9:
-    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
-    dependencies:
-      sourcemap-codec: 1.4.8
-    dev: true
-
   /magic-string@0.30.5:
     resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
     engines: {node: '>=12'}
@@ -2848,54 +670,15 @@ packages:
       '@jridgewell/sourcemap-codec': 1.4.15
     dev: true
 
-  /matched@5.0.1:
-    resolution: {integrity: sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw==}
-    engines: {node: '>=10'}
-    dependencies:
-      glob: 7.2.3
-      picomatch: 2.3.1
-    dev: true
-
   /merge-stream@2.0.0:
     resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
     dev: true
 
-  /merge2@1.4.1:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-    engines: {node: '>= 8'}
-    dev: true
-
-  /micromatch@4.0.5:
-    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
-    engines: {node: '>=8.6'}
-    dependencies:
-      braces: 3.0.2
-      picomatch: 2.3.1
-    dev: true
-
-  /mime@4.0.1:
-    resolution: {integrity: sha512-5lZ5tyrIfliMXzFtkYyekWbtRXObT9OWa8IwQ5uxTBDHucNNwniRqo0yInflj+iYi5CBa6qxadGzGarDfuEOxA==}
-    engines: {node: '>=16'}
-    hasBin: true
-    dev: true
-
   /mimic-fn@4.0.0:
     resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
     engines: {node: '>=12'}
     dev: true
 
-  /minimatch@3.1.2:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
-    dependencies:
-      brace-expansion: 1.1.11
-    dev: true
-
-  /mkdirp@1.0.4:
-    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dev: true
-
   /mlly@1.5.0:
     resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==}
     dependencies:
@@ -2905,10 +688,6 @@ packages:
       ufo: 1.3.2
     dev: true
 
-  /moment@2.29.1:
-    resolution: {integrity: sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==}
-    dev: true
-
   /mrmime@2.0.0:
     resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
     engines: {node: '>=10'}
@@ -2924,19 +703,6 @@ packages:
     hasBin: true
     dev: true
 
-  /natural-compare@1.4.0:
-    resolution: {integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=}
-    dev: true
-
-  /node-releases@2.0.14:
-    resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
-    dev: true
-
-  /normalize-path@3.0.0:
-    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
   /npm-run-path@5.2.0:
     resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==}
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -2944,69 +710,18 @@ packages:
       path-key: 4.0.0
     dev: true
 
-  /once@1.4.0:
-    resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=}
-    dependencies:
-      wrappy: 1.0.2
-    dev: true
-
   /onetime@6.0.0:
     resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
-    engines: {node: '>=12'}
-    dependencies:
-      mimic-fn: 4.0.0
-    dev: true
-
-  /opener@1.5.2:
-    resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
-    hasBin: true
-    dev: true
-
-  /optionator@0.9.3:
-    resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      '@aashutoshrathi/word-wrap': 1.2.6
-      deep-is: 0.1.4
-      fast-levenshtein: 2.0.6
-      levn: 0.4.1
-      prelude-ls: 1.2.1
-      type-check: 0.4.0
-    dev: true
-
-  /opts@2.0.2:
-    resolution: {integrity: sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==}
-    dev: true
-
-  /p-limit@5.0.0:
-    resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
-    engines: {node: '>=18'}
-    dependencies:
-      yocto-queue: 1.0.0
-    dev: true
-
-  /p-map@3.0.0:
-    resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==}
-    engines: {node: '>=8'}
-    dependencies:
-      aggregate-error: 3.1.0
-    dev: true
-
-  /package-name-regex@2.0.1:
-    resolution: {integrity: sha512-U+K6/cuwHwr/8pUQrpNpKOIFSdS/EluTRSmtn92mug1UiPcff4t9AHs36e2xXJtpEtRfbg+JOj3Y/GLX+mzT6w==}
-    engines: {node: '>=12'}
-    dev: true
-
-  /parent-module@1.0.1:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-    engines: {node: '>=6'}
+    engines: {node: '>=12'}
     dependencies:
-      callsites: 3.1.0
+      mimic-fn: 4.0.0
     dev: true
 
-  /path-is-absolute@1.0.1:
-    resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=}
-    engines: {node: '>=0.10.0'}
+  /p-limit@5.0.0:
+    resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
+    engines: {node: '>=18'}
+    dependencies:
+      yocto-queue: 1.0.0
     dev: true
 
   /path-key@3.1.1:
@@ -3019,15 +734,6 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  /path-parse@1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-    dev: true
-
-  /path-type@4.0.0:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-    engines: {node: '>=8'}
-    dev: true
-
   /pathe@1.1.2:
     resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
     dev: true
@@ -3040,11 +746,6 @@ packages:
     resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
     dev: true
 
-  /picomatch@2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
-    dev: true
-
   /pkg-types@1.0.3:
     resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
     dependencies:
@@ -3062,18 +763,6 @@ packages:
       source-map-js: 1.0.2
     dev: true
 
-  /prelude-ls@1.2.1:
-    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
-    engines: {node: '>= 0.8.0'}
-    dev: true
-
-  /prettier-linter-helpers@1.0.0:
-    resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      fast-diff: 1.3.0
-    dev: true
-
   /prettier@2.3.2:
     resolution: {integrity: sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==}
     engines: {node: '>=10.13.0'}
@@ -3089,236 +778,10 @@ packages:
       react-is: 18.2.0
     dev: true
 
-  /progress@2.0.3:
-    resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
-    engines: {node: '>=0.4.0'}
-    dev: true
-
-  /punycode@2.3.1:
-    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /queue-microtask@1.2.3:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-    dev: true
-
-  /randombytes@2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
-    dependencies:
-      safe-buffer: 5.2.1
-    dev: true
-
   /react-is@18.2.0:
     resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
     dev: true
 
-  /readdirp@3.6.0:
-    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
-    engines: {node: '>=8.10.0'}
-    dependencies:
-      picomatch: 2.3.1
-    dev: true
-
-  /regenerate-unicode-properties@10.1.1:
-    resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
-    engines: {node: '>=4'}
-    dependencies:
-      regenerate: 1.4.2
-    dev: true
-
-  /regenerate@1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-    dev: true
-
-  /regenerator-runtime@0.14.1:
-    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
-    dev: true
-
-  /regenerator-transform@0.15.2:
-    resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
-    dependencies:
-      '@babel/runtime': 7.23.9
-    dev: true
-
-  /regexpp@3.2.0:
-    resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /regexpu-core@5.3.2:
-    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
-    engines: {node: '>=4'}
-    dependencies:
-      '@babel/regjsgen': 0.8.0
-      regenerate: 1.4.2
-      regenerate-unicode-properties: 10.1.1
-      regjsparser: 0.9.1
-      unicode-match-property-ecmascript: 2.0.0
-      unicode-match-property-value-ecmascript: 2.1.0
-    dev: true
-
-  /regjsparser@0.9.1:
-    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
-    hasBin: true
-    dependencies:
-      jsesc: 0.5.0
-    dev: true
-
-  /require-from-string@2.0.2:
-    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /resolve-from@4.0.0:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /resolve@1.22.8:
-    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
-    hasBin: true
-    dependencies:
-      is-core-module: 2.13.1
-      path-parse: 1.0.7
-      supports-preserve-symlinks-flag: 1.0.0
-    dev: true
-
-  /reusify@1.0.4:
-    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-    dev: true
-
-  /rimraf@3.0.2:
-    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
-    hasBin: true
-    dependencies:
-      glob: 7.2.3
-    dev: true
-
-  /rollup-plugin-babel@4.4.0(@babel/core@7.14.6)(rollup@2.50.5):
-    resolution: {integrity: sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==}
-    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-babel.
-    peerDependencies:
-      '@babel/core': 7 || ^7.0.0-rc.2
-      rollup: '>=0.60.0 <3'
-    dependencies:
-      '@babel/core': 7.14.6
-      '@babel/helper-module-imports': 7.22.15
-      rollup: 2.50.5
-      rollup-pluginutils: 2.8.2
-    dev: true
-
-  /rollup-plugin-commonjs@10.1.0(rollup@2.50.5):
-    resolution: {integrity: sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==}
-    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.
-    peerDependencies:
-      rollup: '>=1.12.0'
-    dependencies:
-      estree-walker: 0.6.1
-      is-reference: 1.2.1
-      magic-string: 0.25.9
-      resolve: 1.22.8
-      rollup: 2.50.5
-      rollup-pluginutils: 2.8.2
-    dev: true
-
-  /rollup-plugin-delete@2.0.0:
-    resolution: {integrity: sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==}
-    engines: {node: '>=10'}
-    dependencies:
-      del: 5.1.0
-    dev: true
-
-  /rollup-plugin-license@2.4.0(rollup@2.50.5):
-    resolution: {integrity: sha512-hZ+usKNrAthT9bHBpSPQHs9wSI2zISso96t/ypdOpkCftpydZ6Yf5pkPD50vw1aFH+TSV0N+v+/nqGYiTAsL4Q==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      rollup: ^1.0.0 || ^2.0.0
-    dependencies:
-      commenting: 1.1.0
-      glob: 7.1.7
-      lodash: 4.17.21
-      magic-string: 0.25.7
-      mkdirp: 1.0.4
-      moment: 2.29.1
-      package-name-regex: 2.0.1
-      rollup: 2.50.5
-      spdx-expression-validate: 2.0.0
-      spdx-satisfies: 5.0.1
-    dev: true
-
-  /rollup-plugin-livereload@2.0.0:
-    resolution: {integrity: sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A==}
-    engines: {node: '>=8.3'}
-    dependencies:
-      livereload: 0.9.3
-    transitivePeerDependencies:
-      - bufferutil
-      - utf-8-validate
-    dev: true
-
-  /rollup-plugin-module-replacement@1.2.1:
-    resolution: {integrity: sha512-nFWmUGJGX6Fof9EAdyZqCabjniW7cGdm3w+O9/KZwphL30PG5S/tFAniwNEBm4eJA2fTEHj/kqFJEQJ+1bOq4w==}
-    dependencies:
-      slash: 3.0.0
-    dev: false
-
-  /rollup-plugin-multi-input@1.3.1:
-    resolution: {integrity: sha512-bPsxHR6dUney7zsCAAlfkq7lbuy5xph2CvUstSv88oqhtRiLWXwVjiA1Gb4HVjC6I9sJI2eZeQlozXa+GXJKDA==}
-    dependencies:
-      core-js: 3.35.1
-      fast-glob: 3.3.2
-      lodash: 4.17.21
-    dev: true
-
-  /rollup-plugin-node-resolve@5.2.0(rollup@2.50.5):
-    resolution: {integrity: sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==}
-    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.
-    peerDependencies:
-      rollup: '>=1.11.0'
-    dependencies:
-      '@types/resolve': 0.0.8
-      builtin-modules: 3.3.0
-      is-module: 1.0.0
-      resolve: 1.22.8
-      rollup: 2.50.5
-      rollup-pluginutils: 2.8.2
-    dev: true
-
-  /rollup-plugin-serve@1.1.0:
-    resolution: {integrity: sha512-pYkSsuA0/psKqhhictkJw1c2klya5b+LlCvipWqI9OE1aG2M97mRumZCbBlry5CMEOzYBBgSDgd1694sNbmyIw==}
-    dependencies:
-      mime: 4.0.1
-      opener: 1.5.2
-    dev: true
-
-  /rollup-plugin-terser@7.0.2(rollup@2.50.5):
-    resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
-    peerDependencies:
-      rollup: ^2.0.0
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      jest-worker: 26.6.2
-      rollup: 2.50.5
-      serialize-javascript: 4.0.0
-      terser: 5.27.0
-    dev: true
-
-  /rollup-pluginutils@2.8.2:
-    resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==}
-    dependencies:
-      estree-walker: 0.6.1
-    dev: true
-
-  /rollup@2.50.5:
-    resolution: {integrity: sha512-Ztz4NurU2LbS3Jn5rlhnYv35z6pkjBUmYKr94fOBIKINKRO6kug9NTFHArT7jqwMP2kqEZ39jJuEtkk91NBltQ==}
-    engines: {node: '>=10.0.0'}
-    hasBin: true
-    optionalDependencies:
-      fsevents: 2.3.3
-    dev: true
-
   /rollup@4.9.6:
     resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
@@ -3342,35 +805,6 @@ packages:
       fsevents: 2.3.3
     dev: true
 
-  /run-parallel@1.2.0:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-    dependencies:
-      queue-microtask: 1.2.3
-    dev: true
-
-  /safe-buffer@5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-    dev: true
-
-  /semver@6.3.1:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
-    hasBin: true
-    dev: true
-
-  /semver@7.5.4:
-    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      lru-cache: 6.0.0
-    dev: true
-
-  /serialize-javascript@4.0.0:
-    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
-    dependencies:
-      randombytes: 2.1.0
-    dev: true
-
   /shebang-command@2.0.0:
     resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
     engines: {node: '>=8'}
@@ -3407,90 +841,11 @@ packages:
       totalist: 3.0.1
     dev: true
 
-  /slash@3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-    engines: {node: '>=8'}
-
-  /slice-ansi@4.0.0:
-    resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==}
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: 4.3.0
-      astral-regex: 2.0.0
-      is-fullwidth-code-point: 3.0.0
-    dev: true
-
   /source-map-js@1.0.2:
     resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /source-map-support@0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-    dependencies:
-      buffer-from: 1.1.2
-      source-map: 0.6.1
-    dev: true
-
-  /source-map@0.5.7:
-    resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /sourcemap-codec@1.4.8:
-    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
-    dev: true
-
-  /spdx-compare@1.0.0:
-    resolution: {integrity: sha512-C1mDZOX0hnu0ep9dfmuoi03+eOdDoz2yvK79RxbcrVEG1NO1Ph35yW102DHWKN4pk80nwCgeMmSY5L25VE4D9A==}
-    dependencies:
-      array-find-index: 1.0.2
-      spdx-expression-parse: 3.0.1
-      spdx-ranges: 2.1.1
-    dev: true
-
-  /spdx-exceptions@2.4.0:
-    resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==}
-    dev: true
-
-  /spdx-expression-parse@3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
-    dependencies:
-      spdx-exceptions: 2.4.0
-      spdx-license-ids: 3.0.16
-    dev: true
-
-  /spdx-expression-validate@2.0.0:
-    resolution: {integrity: sha512-b3wydZLM+Tc6CFvaRDBOF9d76oGIHNCLYFeHbftFXUWjnfZWganmDmvtM5sm1cRwJc/VDBMLyGGrsLFd1vOxbg==}
-    dependencies:
-      spdx-expression-parse: 3.0.1
-    dev: true
-
-  /spdx-license-ids@3.0.16:
-    resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==}
-    dev: true
-
-  /spdx-ranges@2.1.1:
-    resolution: {integrity: sha512-mcdpQFV7UDAgLpXEE/jOMqvK4LBoO0uTQg0uvXUewmEFhpiZx5yJSZITHB8w1ZahKdhfZqP5GPEOKLyEq5p8XA==}
-    dev: true
-
-  /spdx-satisfies@5.0.1:
-    resolution: {integrity: sha512-Nwor6W6gzFp8XX4neaKQ7ChV4wmpSh2sSDemMFSzHxpTw460jxFYeOn+jq4ybnSSw/5sc3pjka9MQPouksQNpw==}
-    dependencies:
-      spdx-compare: 1.0.0
-      spdx-expression-parse: 3.0.1
-      spdx-ranges: 2.1.1
-    dev: true
-
-  /sprintf-js@1.0.3:
-    resolution: {integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=}
-    dev: true
-
   /stackback@0.0.2:
     resolution: {integrity: sha1-Gsig2Ug4SNFpXkGLbQMaPDzmjjs=}
     dev: true
@@ -3499,83 +854,17 @@ packages:
     resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
     dev: true
 
-  /string-width@4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
-    engines: {node: '>=8'}
-    dependencies:
-      emoji-regex: 8.0.0
-      is-fullwidth-code-point: 3.0.0
-      strip-ansi: 6.0.1
-    dev: true
-
-  /strip-ansi@6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-    engines: {node: '>=8'}
-    dependencies:
-      ansi-regex: 5.0.1
-    dev: true
-
   /strip-final-newline@3.0.0:
     resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
     engines: {node: '>=12'}
     dev: true
 
-  /strip-json-comments@3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-    engines: {node: '>=8'}
-    dev: true
-
   /strip-literal@1.3.0:
     resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
     dependencies:
       acorn: 8.11.3
     dev: true
 
-  /supports-color@5.5.0:
-    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
-    engines: {node: '>=4'}
-    dependencies:
-      has-flag: 3.0.0
-    dev: true
-
-  /supports-color@7.2.0:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-    engines: {node: '>=8'}
-    dependencies:
-      has-flag: 4.0.0
-    dev: true
-
-  /supports-preserve-symlinks-flag@1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-    engines: {node: '>= 0.4'}
-    dev: true
-
-  /table@6.8.1:
-    resolution: {integrity: sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==}
-    engines: {node: '>=10.0.0'}
-    dependencies:
-      ajv: 8.12.0
-      lodash.truncate: 4.4.2
-      slice-ansi: 4.0.0
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-    dev: true
-
-  /terser@5.27.0:
-    resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      '@jridgewell/source-map': 0.3.5
-      acorn: 8.11.3
-      commander: 2.20.3
-      source-map-support: 0.5.21
-    dev: true
-
-  /text-table@0.2.0:
-    resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=}
-    dev: true
-
   /tinybench@2.6.0:
     resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==}
     dev: true
@@ -3590,97 +879,25 @@ packages:
     engines: {node: '>=14.0.0'}
     dev: true
 
-  /to-fast-properties@2.0.0:
-    resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=}
-    engines: {node: '>=4'}
-    dev: true
-
-  /to-regex-range@5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-    engines: {node: '>=8.0'}
-    dependencies:
-      is-number: 7.0.0
-    dev: true
-
   /totalist@3.0.1:
     resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
     engines: {node: '>=6'}
     dev: true
 
-  /type-check@0.4.0:
-    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
-    engines: {node: '>= 0.8.0'}
-    dependencies:
-      prelude-ls: 1.2.1
-    dev: true
-
   /type-detect@4.0.8:
     resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
     engines: {node: '>=4'}
     dev: true
 
-  /type-fest@0.20.2:
-    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
-    engines: {node: '>=10'}
-    dev: true
-
   /ufo@1.3.2:
     resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==}
     dev: true
 
-  /undici-types@5.26.5:
-    resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
-    dev: true
-
-  /unicode-canonical-property-names-ecmascript@2.0.0:
-    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /unicode-match-property-ecmascript@2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
-    engines: {node: '>=4'}
-    dependencies:
-      unicode-canonical-property-names-ecmascript: 2.0.0
-      unicode-property-aliases-ecmascript: 2.1.0
-    dev: true
-
-  /unicode-match-property-value-ecmascript@2.1.0:
-    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /unicode-property-aliases-ecmascript@2.1.0:
-    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
-    engines: {node: '>=4'}
-    dev: true
-
-  /update-browserslist-db@1.0.13(browserslist@4.22.3):
-    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
-    dependencies:
-      browserslist: 4.22.3
-      escalade: 3.1.1
-      picocolors: 1.0.0
-    dev: true
-
-  /uri-js@4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-    dependencies:
-      punycode: 2.3.1
-    dev: true
-
   /uuid@8.3.2:
     resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
     hasBin: true
     dev: false
 
-  /v8-compile-cache@2.4.0:
-    resolution: {integrity: sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw==}
-    dev: true
-
   /vite-node@1.2.2:
     resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==}
     engines: {node: ^18.0.0 || >=20.0.0}
@@ -3737,7 +954,7 @@ packages:
       fsevents: 2.3.3
     dev: true
 
-  /vitest@1.2.2(@vitest/browser@1.2.2):
+  /vitest@1.2.2(@vitest/browser@1.2.2)(happy-dom@13.3.8):
     resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==}
     engines: {node: ^18.0.0 || >=20.0.0}
     hasBin: true
@@ -3773,6 +990,7 @@ packages:
       chai: 4.4.1
       debug: 4.3.4
       execa: 8.0.1
+      happy-dom: 13.3.8
       local-pkg: 0.5.0
       magic-string: 0.30.5
       pathe: 1.1.2
@@ -3794,6 +1012,16 @@ packages:
       - terser
     dev: true
 
+  /webidl-conversions@7.0.0:
+    resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+    engines: {node: '>=12'}
+    dev: true
+
+  /whatwg-mimetype@3.0.0:
+    resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+    engines: {node: '>=12'}
+    dev: true
+
   /which@2.0.2:
     resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
     engines: {node: '>= 8'}
@@ -3811,31 +1039,6 @@ packages:
       stackback: 0.0.2
     dev: true
 
-  /wrappy@1.0.2:
-    resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=}
-    dev: true
-
-  /ws@7.5.9:
-    resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
-    engines: {node: '>=8.3.0'}
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: ^5.0.2
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-    dev: true
-
-  /yallist@3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-    dev: true
-
-  /yallist@4.0.0:
-    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
-    dev: true
-
   /yocto-queue@1.0.0:
     resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
     engines: {node: '>=12.20'}
diff --git a/rollup.config.build.js b/rollup.config.build.js
deleted file mode 100644
index 34f1eb60..00000000
--- a/rollup.config.build.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import resolve from "rollup-plugin-node-resolve"; // 帮助寻找node_modules里的包
-import commonjs from "rollup-plugin-commonjs"; // 将非ES6语法的包转为ES6可用
-import { terser } from "rollup-plugin-terser";
-import license from "rollup-plugin-license";
-import del from "rollup-plugin-delete";
-import json from "@rollup/plugin-json";
-export default {
-    input: "./src/mock.js", // 打包入口
-    output: [
-        {
-            // 打包出口
-            file: "./dist/mock.esm.js",
-            format: "es",
-        },
-        {
-            // 打包出口
-            file: "./dist/mock.min.js",
-            format: "iife",
-            name: "Mock",
-        },{
-            // 打包出口
-            file: "./dist/mock.cjs.js",
-            format: "cjs",
-            name: "Mock",
-            
-        },
-    ],
-    plugins: [
-        del({ targets: "dist/*" }),
-        json(),
-        resolve({
-            browser: true,
-        }),
-        commonjs({
-            ignoreGlobal: false,
-            sourceMap: false, // Default: true
-        }), // 将 CommonJS 转换成 ES2015 模块供 Rollup 处理
-        terser(),
-        license({
-            banner: {
-                content: {
-                    file: "./LICENSE",
-                },
-            },
-        }),
-    ],
-};
diff --git a/src/dependencies.png b/src/dependencies.png
deleted file mode 100644
index 0c5d7d88c6345fb3630169cf3ea37778f2f3f843..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 344355
zcmb5Wby$>L_dQMwB_c2&2uOFUgh&oOqyr)y(k;?CG}2wtUDDkkNFyQLC?O5f(!U#@
z_wkK~-*tVy|EQN-%suCvz1LcM?S1Y*n7ky`J>q)^2nbkGP%%XW1PojR1mq-iRN#LG
zmz6YuzYuK|B}EWQ1|M%AAV3hL#DtZc5VxDrlC?UWTW^py!Qf3p+MSQjahe15KG{7%
zwFsf)rlWk?+054#Xnhb)dRhkx!Jz9xwfHn8G;Mc3R|;z9>!LgED&G9*#tm(ue|>#-
z-0XCrv6lbv?8{*C3)>%G_}6wBIToFbg*Y1d_Ic1D2uL`d2p|ds#Q(!T)1@)C8}TXkuF3L{~sO&{8s*3q=0~r7w4lc|A(*k?`6CR3|Rbs`)(goAcbaV
zkPFH?H$gq_ll#SvakI;D?aWN1vI<|{`B6dj?)-&nZHMFDL^rSfrk>?YRpmtS?0Z=C
zd<(pAXR4glm*ja#?YMc|bmDlwh5b@IYm(LRVczWJ8HYt@kod{TtW~WA@(aGZHl6_)
z>4Mfin=t1-8~$tGyOt6wl5Rek>d-^EydB}wJ>7;zZbdEeSa)Z}9(_Qg)xDZkoBw%$
z*97!Yl~KK=lkET0j{1yMo*R&elkdD}&Y6
z!~nPL4;k*&V~msYEj-J<7>pW+oxZYgp}S*b4;LbKM24w%_fJtMC}c#bCCN;eyHbql
zL->R`3`z4_++A=^WK*~qI}BeysWRPo0s{=DO@`CIa=VN@6)sXzdETcKPsE{JWlVqB
zNhez;)KRV!gS`}k_|N!+)Z;EqkM$
z2dR+`qWtsW2q5Vo1ggxahQ~^%cZGF~kk@h;-z;0}WxvB%WS-w@51I3dyzBb+#i=5-
z(io-X_t-*T1_ig49eyOl`>zgbJMCLH9uAUE*$xRPDIRA(yK7I=AAxXiANo97yE9`S
z%0v2nQ>@P=cY>I&r%|y5r&2wxpI%(e-&jV|30O2b>@aOikiYwc=&)UGJe@;+)`vN+fReQvLUx0{@i*U
zxO9c0j&o=5B#yP}3bChl>#7%x{jK04yn*DisH<&bor?JAoXK~0u5bi+%*P{U*^9dn
z3F3urw=pu`@~blq1yd}VPDtQ0<`D2jlq(5Wd+jP%cyB7lMuv@M6^>sp=Y*_RUJA33JN
zcg&y9USE*ES-e^pKRFs*4t8>ozcWaHkMdkmdXB$mmyB^&m_X8#F}7Q8t{rx&7t7gc
z2?EGGmb5Q6RoKhwZS!JmqirVO-`l58)>`MxxUT%C>?g0|t1TxNwB7ctT`zWOZOOXj
z?*d2ITTq#p(p!~~bCJ7JgMezdeA&z4GnV7bQ^_>l#fxh$hnuULNf9p7gwa&Th1iqv
z(#v)_p&OI-?>4hl8v}6#=*E6`9Xtw!XFxszj1hd-;*^NJ9+2`*hkIO>9hVa6=|~k}
z%O!Ewk0egzpM;RXL*O^A%a&i4>QDUGlMR!eTUm@*8{8RQIr6}973ffI-VvAxAoUNB
zixbkFZXuVR^HXxOwCgXX$~r>Le&%Bpd8LIUhC(;f%QYrnA78W+4%M(~a93OS@!Sc#
zJ;+{HhcHy}KN#{~!J+iTYpb+%z|357CQk@%HjWu!mq42d#(auP^7t+o&j%r)(S+7z
zfQdy&?h0lE(80@Z2mLJu@tOx}7c-NBCZoARX*YN=rh!`%r4A^i^Ui`mnef!3x4GM8VqYKKa;OHnyiQzxVvJ`wAI
z^t;veTgtCF9?U%WuhstE14shi6nnwVtltK|pqG%~QZxCEOh-h=_Xa*$1ePOv=O=f89`GH}xE@y<
zTdWO|8qNiserz$H96aT|hmXhn6p!!Dz-Ev{D()*E86&!DBOvMTK=1Fr=pb`n32RD8
zx12q3u+f`e-!Sgdm@H|wnA=~Q`S@C9JHhzomXIpm&b!P?(QCc2YCet=xc((jV>g_0?Nvx8)AJ
z!CE%7WAr5R$&#L=&YVe|G!x@g>-x0!ICp)^n1_fgxUu7_nH6`%UHVUu%SlnWVgHY{
zRWX0^Yr%_wozj`w7W+IcyRTdhoeys;fWw@|dOoLnv%l9`i^=v&@?zWA-9(biIq~Xn
z(yE-K&ao7z+0^byP=iBLQM2`hhlIC55*>e3x
z`ZZd7j&i)uRXN#B$(|y20VI&GKsHlo2Hi>Fs}hiGrx1iwlzIi4TYQ$<3?%H9{$I3-a+v3wyI<+%b!%
zuIp!RjZbxJ_)~wZI_ZKeyh1U0hCSo{e-H&c5B=
zw-yX{eZ=&c{C_i;;Sr*k7>cM&+nq7Yk5Q!6*xul{^=i0pZ>q&I{J?Q{4tHdxcJC30
z%f33xqHhcDq~~otFYmDg#%kWqTL2j}$Ew54EUKbqFRJ(5B);Hsz`3Fd
zKTYY&!dw~em=+Ql;XV{b87#HymbQ0lxtO*$j6%xR0rj6rlOL^V(rjW6>+W{uUm)*Z
z=Iz)Bx^QTiAC%m%=5OA);J4UzA0qcBJALNHr?GBYe~^2~P|9M-C~#s;R6jC$HZofu
zHr}Fnwygh9ML=etvo*_Z&O>s;&a(T0e^=L~)#}3C&wB3E_0gWpTIi{>JN7bs!>NgM
zO~qwqZ>E|#;1mA2b&kV)KK6eRGE5Ml$k?Ik%-lP7iUDM>V{D=~pBEvIyo~i?C)(q1
zpqkrk<*Tq~7NU(KCgI=%g`GuqT;3}4$+j^510?`>aEGF}F1uRYJKmnH+MXPjF6!N!
zSj8I-j3$dc)u?rUU6HN!Svh&EB!$m$=45A9v`)V}tV3@kY<|hC@E}_h0~ABIXN?{E
zV-8;$f$Dpd$mzaAOHp^A*rlHB~vh_93{4!bB*~q?=tJN9YV{4*VwE0r?rOKo3
z(;6X-1(7TFBfiOI%6JvBo3z6xD(&Husx1UFV@7wIH?);1{>W!Ovi`!L`o)`VGGzb
zUM-e-q_Xr+%&1qJJroJQsPRuF^AD;u9qr;wkc`QsX@c)>=FwE_#LK#HQYR9=^(e3!*pE|wGP9cnCufbZ5>=&@ZDQ%es|zqw
zshj>Imu7WdC9VE~7S;iCox!~u`e~5F^vT(t+F7OZ&ZKo{Z~V?LyTrb)SNTs3H>chY
zmM$M|j8M@mo(zjCO}AT^x+nYBAFRv}l9#%buX!+}wIcNWhn{7i0rJ%^TW0#sDExwM
z^66JKqeo>peA}EGsF`l7C!^YQQGaAnqGF9!?&P;2cb*x^2GH)v>(^cs-QL#l2teZ_yve+V;Hm
z%loiNNb?Mpg2K%67_zljsSZ0chGFAe;o*48n(~>%grA+(k+PaCyU#ip7bZMiDU)Zi
zPF_6kv~?yl=ZeXLUz`wm#UJo!43!>k4-^y+GLgJojAso=$T>CF$>7;7mfK!*L;}av
z4I3*qV$Bpm{kWRi>hBvI`jE>A&yDv^YeyZeFe3h8@S(A!p
zb=-ZP{UmOv|M;?HC!;T5xzFF{KgtzPykUIL=9i=gbG~=&Jpz)U48$iBjm+uIPat6z
zs7p9?g0{XrB`-G})vnre-%B*AK8+9!t1Wdq%cX$2{A`=unb3jv-}*p9?mzt7+J}7u
zv8Qe>hg6DR<*`Z4gj;<1pznjT{zJ$8bCtz(hJUKb;$`jP)T_X$wa)m|-`psd!rOcO
zZZR~$MXKpAbjzwTD_l?@yZQ1U+TnAppb@hQn>+|gURfw~mNwCNiqLqGnl`iNajH-9
zX*jt&s)FN;&Ti|#+va0bjcPN~+@@TymXmRvsqcaBHY)lhW1GhbuH-cz;rSCg
zEyi1}%8^G07o%2aQAC%*sFL*fFtC!NF@xRs9*iPoJ1s6O)z8p`nK>rv)^M&)Crw%h
z+_%9s)~UuBzNx_svhh1#oPcvCoh}p4xJ6QyZw-0!^BFh
zd)|rfd4fzu=WKRHpB~inn0YRqadF`{TF%z^ZG9a+rXoecF%k5tLT6+(>#I&#$h#0p
zCIAq1=yWS}Ts6*WE+eb_ljPa#?i$|h!JG1m#b
za7kX9+z+*{2T7DqF{o&s9@jm#WNsbdCnHbW(kd!HrX&ADwLSCzzMW-Dsoj-h=@=l+
zZ)BL>6@k8-kAA!bxQXa#M6kD>SH#kpDtP5+l)c*HW
zKUY#?b2zXeY1qrtC^+Q`46?(1864s^D>}4BMf39X$wDb7@F)Cj&7aZ|!VScAg#snk
zU7CC)&=WP52B(h>Y*QYA`UQw;dIC^Av`2L3RjOY7p2y7)x7(EN$?46zm}0fcCe=LF
z;6uBuiP`JD8bZq-Me#e#I%g2Iu>|Rw`-oUf-R+qc)`WxEr#YjB(>N^@TFj=qb+-D2Z&L(W*#)WL4ILMKMoNiX}
z^rA?ZwneTTUd^1;`ET%BH!Ou(v(fbtbeRTqFLX-PADEcy(|4&Z*q2jPi%EWmgx@J2zI;9#<#k-UU75xwK%_LI
z%`|TQ)urm~e3$!qboZ@1KfzWZjn$mAXH_Sc*A@VAMr_Bqj(BJB%%eP?9;srVOs_=s
z(K3i(9&2&(Xkzt}FW`CFPsgU12!gVS1c`<-zvRY^+FdKJgIb@lYSj1+*H-%7uZr(u
z_i=%w+n^iZ5!DYfJXo#^`|2QS+A?(doJP++2%O%vl-1RB+|(1RazSg*{&(#Jdkmav
z(C388J7f>+J%|RutS2ZUue<-X#ax~B^T-HHAO5)}=gQb9zi^BAY=GpHRaD{w{84Aq
zg?(gag9+IynT7UWxmxyBp0M8>WOP*Y)>!x}%c%pYzB9Xc?Gq}n0&3iSwO9GVR=Y5<
zW^}lZGTk*kID#f7uv3C;D7FNCK&(0VWA2%vy1~kXhhAG`_h`n!4}H@vi{sgN&T0kA
z0a~5|_{NhY1Sy}@=?-x)MZKf2B8#+$TNS%XXcLYnqy+;ihL0J%yBFEHAy@T^0y>Xxz~O`@1pGH@@BWZT>oX+5PbK368F{FM>C;NKS-iyaHOVE
z_OLjVtjjcY=+yaxoJE$cDTIfWP1?%blP871sy5r{74k}X8MIyYDeO@ma|!3mNo&(Q
zhlc#ybMKG@7ct3ccYnJjpcrH?RTzHvaq`cd=FZBUaFiR<2VmodpU_j8Gx+?;GQQqZ
zM!64`zu60LIsyXv_CG2Z{~@z~w}@=O5x=@wQF2g3QcHw29f?^YaC%r#b2>$4lvAax
ziHk~#iw9ImHmAz70GZai;Ite{LHx0_6dU6r9&YU>$T9_1&
zVr_S2QgzbS1Oni<-xBu-KQ5n%;9-4T&*+jRAqAr>$1p;Dhgf-84~oQw-72nsoQc&_
z5A$S9puNV1WQrJt8M^d@bf~)cfY|1(A3Fg-r?r5_kzB?T`BSIl5;s;xZ_E79?BC1<
zS-owyoK1cp`0pCwHfETDJW-*vE~Y?gh>57b|B`|V)54D#2#OftG*RDRtKl9i)oC4`
zqm_vReU0c4?T=@-!uM{0Z*5;Jl32|*o&wk(&TO&NfktAlS#M1Id{^^g(&}f2;b^gRhMO|UGSkhzTZm3qlX3tq(=OjnT4Ij1GCTh_ODM>1sUF*pr`eL_X__4^l`Z>7xwSC05U7~d<3HeG(ViUB%ntVWPd~k`s$(E{#7O2kM3Tpt+G5N{sPldxjlH~wfq?vsqwnxcaCc2U>ef+&Y}_Wp
z`D6g`Ka-))+cPdw3e$T;Cae=Vd(+9m3--9nnm5T-$7R0=00ne^pk<677av%RWm;Af
zQ3BM%C*dmdZwR%WLI-r7e16+<=HmJzK`6fXm>%m>veOdU_GaPDs2N&V72vfKp0w63
zyxE#8WuuYkyNzKS-!$S+p?(q<;34jxTgnk`FqQ8MP1u(|wup+jdx%ppL-E6FV|QoO
z&*>dpR3hq3thA|UiVQkd0&dgVgxE_{#wQm=a-V~FA%5q}HUEL}mxcCU^*K#v$>@>A
z?zg%D$McgbaMaD+-jDvMy?>keSUAI|TnamD
zu5nw=%uE}5%&|3Y%LF=^_zJ|Tk~Zw;md<*kRGwT>S%Yp*jez2tGVKW+f7CI>YT#j~
zGD7nv7`Of#bjTu5aamXks4p!(rb|*$5#j@oC@#4HL!K|UHJ6wMNmgj)+xda%zW**t
z(w~6lsG@}QM?|uY4(S(4;igXuCP&02r&C{Cha5Z^{4B7D0lqzH6MjJBh8m0ilNlkM
z;Nef2Y+e8dZsNp6L&SaFVFmhDeffZT@a~K6=m{as8KiV=+~!57y^CO1
zJ5_Tb;8w;z>Rr@Tsu{!$4jQpuRGzo~oxdkS
zY5#rqRK(8a-DE)PGOz-qD81zZBl!m@LKZOcE4iABK7d56)h)ar-ZAe%BGQxJ)L*gQ
zUum{}sQ#w*?ff&DnBJL)lA(juevXOvaco*MR1@z{P#jNp;odxJbGCxIU;AZlZ6y8zI}8lQuK5kNy@6RGf+X?GS(
z+Ud=pre`A@DdK^405d%}Q$Jx9k;eZG@`(`0qU?t8OPAR+akBI4qYX~$uC(X(M)xgd
zrI-0$$VCBaA^q{KS>0VIk@BZL_+voqfrk~zOobzYefY<|rSf4_^eV#GB5{0l%{hP(?~N!`mYQr*it7J901D|5v#ArJgX
z+xF2IvTkR=ZD#?f7to?j1!{=6R@AY7)({b~o<^U|%lbMY<*GfSV}Tp;$R@;fHjxqj
z*2G5BDa!r+fXP3=qL91V$N8Z_uQMpb#H2Th_Th`@YO6(FKA=5lVL|od#Y%*Au4Vn}
z!nm1B6b_5)OQITseSVE*ql99qA|%F`PbL>9#YCl-fE4R@!teuZas7GlmgK#Q@%uHm
zQ$2j|vX9rls!UsMjGT+rakgp8bjaY*3qGoe4f|~*c^yyzTec~{KsGFgeSKbYU_i1x
zK4JvO?dcIWh-wB4Nqv5gXme$!UY2SHYd=04!@=pZ#fgi=B`_v6CsXMnRW;B*|Cr?2
zvUvGo>;r5l%wi~0)nEmQ+RvJwfV>lFYO@8YiVVmu{9BWdN~Zpwl=>LNiSPp%#)d8(
z>|0gze#mYzJqqhx>+H%x791hqgRb1wAXkHN=
z(1Y8dr7sEWMEx;4UcsQ-jDIaok+e!peq>*+Py-vhybyyL}(#%MeVk!Tzf=-Fx
z)dhx#jj1ZG{HJsGR}O6>BeFJs_YouOqN3~^_ga@H^$_IH(tR8cg;tJkT-vIy;z=`b
zI{p0ity(hy6|7RCnNZGM<+QI?veg*>Dz3Jq{zqbm`Y^uh`9|L7Pv&cb^RiS~VWfP<
zMGr#Bv3$|I;)xk*MdP}icmN!lqwNWZmHL|%pVn!SX0+TC
zF>$sh2e1kH%PV=GjtXs>w#dPpHhqk~hYhc^3B#G~_Vz+&CY=9jP{W8oM;1TV!c)=M
zSPqVSB@_JlfhP;DLKCY$rq7;2U)k&yh
zadXjnV-B=*<~cq$G7@UO6AlO^7iwwa-~JbWSJ5D1=);GfC-p#0H-LTv_T}ak%%{~Q
z9yW&}3C`R~5zV9~&8y?Xh}P819$tJQAcx$=lJuhrI50$XB?3eN$)k|KPH{Hq@$jiB
zpSyd2?>U>EZsgK*6G-Y>_9KgT6)+x!<8`{g^8JnxE>F{8$$ps*@ARrS&=i|p&h%vw
z3amjEtp-jG)ny-U;$LmA*}T}a8i1-Hj&an+5FAmg-8}Q-O9CFiq})J1rlb!gA}@~A
zriZfT-S_rnq)h&lAiaP2j3~6}UaxC^4Nu|KS7QWvbAC!9AnMekA;e~6W#u1n4Ooyn
zVk?BZ)Q(e>uf3Y*q$oO_u-}^STiZQ9-uhf4!de{ElV7e9>UNun(!rj)ix&r%Uk^Jv
z#R23Ogd03ONja+e23-q8k#KQ0nH3G!r!1{KUb>u*rMCWAAy!vU`4hJ`WNFV-zgkSJ47-UMv=4N%4#|yPlTW1r%Xj?O1tW
zwo_giy$hvJzmZX+a#_#tC-%U3@vmrkCF2+wiwGpW>Pt?)#ripI9z5IiF0n
zUXKIB?^~T=bSc{vLWCD*n!shQ%pv_9_LtCr*y9HHNxHC`hD1M_@e?m!?g^O@LpqOp3RJhlWz_Vp_ny43F#I)JLi5-t}~pSuh~
zo0xPXJ0z_0>*&7Mp)Qx71RGq&|?yw}@E9wVc?KptSe^e54?|)CyneJO<
zuD)Sh0N}_tPdavO~N)KK(V7vY)!m
zKuX+7h@XTznV)sT0U&n0a)H8S%+BF4#y^%sl|D#q|Dd;#f+37qPWk=Z&Kxk+BOFnL
zUjL>?)QF#twY>`r%gbTGs;{QBS2mMq2AQbmT6}N!6NZjW9rR4{AYGjwV10pFBfysM$sJ
zlm$qdte|Vq?qim=%t$^4%s(=p^s+Wogpbcmf8{g$n=|vPh(IcEruF@)Dx);Hw(B@_vR&USGYaU
zy`3Fx))Zo={JlvrY={`*)xPQ_hGR5F_PUX$&z;F*d?kXm&c4eJVG$D6e}d|6b2($7
zd704y(4t<-zwHPBd1>I@EwKMd%
zT6xGwSm`;7v|f<(-@Ia_Ph1*|XTh$N<(5<>+jK_|Zzo#~C2Ck}Dwbp#A6
z@BzZmtP3*xFGPJU15x%OuFzW{kfWuGqNQ@~G<+>$ee=NDD>6RolwYlAxCYgWYlD)2
z$a(Iw>N|W5i4pOyuKL_z9k`(qf#_Eb|`z|{hWUpQ*sw0W0_NmRZR
zLmZ$>&-rr8o2YAvT8~iv_O@XPAex@YPRcX!V1k{m+|7qTl?>3?Dc|MK&m2h9@U&m)
z<(R=$z8^<85vg{LLRXfkVu85@!|`VXq&dZpJ2R`lr8;5*Hfr-;;}wQFLfBb(-9pY%4OtM*!8cc1VU2KSXuY
z`jw?m%M#SwAx^wK{v4*C+_8CHV$-I;TVi`5h!LZgx5rFK>a2mEI~s%CrXU;k8;#;9
zDRj+5`)xl;yzT9Y->{2}Y;mRKKUfQogH0ZGiHnml$qkVg%~XFmUM>3nnUn8(@5xIy
z_H@@9SghS%GAwJ1Xh)Ai4JYxbzQoiC=T2U9rUjeOLpgL4?mD9j0ClfkuAdgI_R`5G
zKPtk~B`U1)V5$(I+0PUU{?o0Yhd^3$EbLd
zVy#H~?jli#=Pj}WC#t_!MMBVwCuw`qBS^n1d
zgzTe3j~LSiq9Rj;HcO*BGp7o5L{B|*GGFzlODWy%!9?zWG^Ge7$hBr`Q51)l)J%Os~@5v=ru|6;Ehn
zM8OYw4R{JZ_x02OjjGX!;tgC7-G;h=fB;X0L0zR;mneDL3y
ziipk$g>XoZB2g0Fb8g@bnJ>_v^n-v=rJmqo`r_vuPMYE>6CBX7*Zyh}!V0^|&pA
z9QmR9&V-FjCA7Tt{(FOo#mzwKRyj(n{Qh!(_L^dt0crEoxIcWx48{T;ad%9l-9)1F
zV^%4-KU)rklGgB`D`6sDVIOafGpiEYn2VYya4#_ldxOnv?@?nmkcyr^0?X`CLaZ8TCE<
z>~U;TziIl58og|*QB}L!wnGR)FIvv))S1#YQ^JR5kXkF|7!@*>Z$BE4wr?LX%!%Z_
zD2Ev`<{zb<`D%zpz`yB6VIo*l6~Hyp9{Fkz0L
zc%o9~!M#_k+LuD@h1E
z=$7fV36k{lE-Hn5=7Lh`4%f-p=n*4>gOB)aN)K=dJ823z!UFPnOZkfbTU;oDs#=^Z
zo-%|rzRL$vRxrareW4SwxebiU?7mg@9n16y_3)K7KtQom{4=0GG1IPSkO+;cA;tylcou2ktE6lo*WWuXE`V)x
z+VQ3}6)CUSoJ%-ZM~Z|u#!|Ch?=VJlVXMCUkGr-lOX^w%4i4r^38}s=rLIzmGEi8Pc;(HU${B
zZbV)u2Ll(g5(g(OIBHT+8aPVWZ5Tv#Nb4lZ5^WpX(slsH^D}7hBF{KWpTkiw%H@12H`%(r2B9i)zhBv5|
zAbWV3?Jjdf&=eks43$4cgq
zAYd3JVn8*s-4m+}P1J@*4<%1^{5BU~91V-gWm3<-qNN!*l3n-f;d*v;
z9%S}6(*tRJ>rOmFw13dRz(Cpng^Ex)ZqnF2g*|rh&oO#3V!aL+7!g89iL^Tt?`a;7
z+~lE(8dyRzDb+|uxJw!^nr^Q4u$L+{-qz>zQn1y1^M1GeYkxUO6BX@GyT{80Fx&*y
zgCu(^4vZDMh8xrj*rEDP2K;zaCb6?e)%wO2d+>R6!>9Kb4}
z)bK_E{s0JNwr4hNk&o)}@Y0f3GN}oPoO@Pi^2BcqzHb6Z4YkrrD=mN~OIRJ&RIRex
zP>hc6G3gE?-6NGP%0_RRB+*eE&;0L;ZNMGAh+mTA;pG(2eW%-zs|2IX&tFl5f&Nyl
zA12|hkpeWu-c8f!9j+H77zajw`N<2Jqd#WjMy;~fz!I=Q$nIqr2`*Dagno*k6m1{D
z10=yfO%msyute}O!Wqs^Iy+oL+v}_wr>X^Kyjvg6$XzvE;mjuq4#JOrm#dfz5=NBA*g54l`&h9Jjkuc6Lw}rBgXnQ#E_IIXJwEALkZMA=NlPT^E7Um_sfuVpLol
znE0p$M)!CF`0UAJ>t06>#j&V?F99i<5D-T>S%J&)51YiRf+k(fE(P`ueA6
zk0_qdQ3keO!cRc^zO0n~3|6T8Y5n9+sGu+IgS$KWhu4#|<&_=Wh={R|ceHl~>80y?
zdi*4SnJ4(Z&DL8vHRP?$)1Si^;`qu9T=`}<^TX~yPZ{v_jiq5UGUB%dy)M8UpRZub
zL7GapmMU;zW;PWiLh&8oSl$c!fcJMPaVy``FVUe0+1R{r@C4
z$I0rjzyTH23^E4BUyOVEjA@YD3r>t+&a%Rv={^tctxDft_NGz`jgVBWqPM{aaBGhZ
z4&_&B4Qi@cHk_rU3KAEeUb>&T*P9490l+knNyW#w#h5Z^CY7_CNwh}2O^%c-O{>XQ
zs#F2-hHYT<2b4JaUu#lAH+exth~~UbMY$N4gX<`0JBT8@IebtjGLQ{i53J?q1B!TH
zGN{2}Cs8d^wm)`*EIsGGfhm;0pA$3W=I~il8LiT)ez?HIidECTg!yj81E7Dl-mduY
z?;vGL^gPD~j);)(>{H44JsP^Gx*k9AP4-VaDUc?&#M95&of3(2-{oZ*yO*f;qW3v1
z^}qH2SdD-b3xS;WCMG6^#MixsziwERlC1)4&~LV^Dry*y)jwhd1gHn`ul?uEJqRLD
zO(YGyJq%+YM0d`Yhd2r@vudEloeO_0BVp>{wX67yy)-({KSdJVkfgfFVt9K)1m!e>&l>d)N?I(CP2h=
ziBw^REV+{%?{|n~y+3zc3VZ{m{@r?wp+-E`-*6sn^|%>MqxFj1_1bJy)bY7E-kOZp
zKa?&R1omn-3P$<&Uflw_0X@ZN$+O^{6bZ5h9%x1!rEM*cyoo)#JKLJRI9SeQE!NHT+Yq-o%)fV!@)F
zt3(k)H(Z%wKr)@(x~Zuzs;jGknKweQVlZ(pQ|hVDM#ATn`mS;bu`wR`mH(K3_k>iU
zcNpc5OD&T=x7H-*+Z|)XbDXGyKr==XNPlGCwtzlB;@Pykb0`DfbK=S5rU3RcshH^D
zj{y!qa>YJ-3-Ynyy%NjE=tYPqDi
z5Mny71&heK^0A7bLnsIl?d$qyBH|ccarpmU0kAVyEulGO#>?clGX#H;=31Ydmy&@m8hStO?xdD2g=-3nN1nl6n~ZivjJ7z
zPYez+Gc#*H-~@aYUzWf?&UI#Xb8+dyL_YeGQeEAE5JRv2Z-L~
zBXuQXNJz0z$d$?FOA=l?lXZ>JE14^^N~3{$?q>(9u~XY{Gd!wHc)PgKpT{A1NmEfo
z4?OElmZMl9B|i@cn0!C^Os^c$v&@Fme&3AtO2h;cB<ee_6Tu3f)+O`8+-0qi7Nq~R4@X%CFqwT`4f;*)zlOF*OB?>*UfWppu47rs&QhNpd)6DLq6iMkN^^6$sV8
z#tiyWJ2w*zf9O3@^
zX%w(r(9*Od+dW`*ffo}$d{S`|(#VVERuhTot4Wh>7Z~uD@g3;NOJQKzQ;gN?l30Xw
zYkmmxWXtc8@;SsP#ui|LfUW=WN$8|JeA>$6LgUu-$qF}@l>o+$GQ`OK{jg@xSSgJ;
z7>wU51AzDTF`O1t{Cpy+47yhkAjP!im}y?*E{YMNX<#=jjArO7$@VOYHVc?ISfV0)
zTp)y7uC{u~W`Y4qlz~un0i#KY9by%V**j{LM$_h{%>=3R1FWt1;gVuXK`MT{e=J(B
zdvxjX7Vxp|B?>}R=R_j{#4goBY?PXw)0+^`&s0ppQkA%}B
zl@7dUKp4vDus!wWSpLchc-==(^Y!@_pj~T{yW>XXfy&CRI-mKETn65`vNKbS3HWxP
z98vp`U&KGm!a$I6o*qBp)Z7H&bEodxJpkr`H?w1MC^7suf$qsEbbhT$ETM__V>!1{
zm`WV)8ddt*rTwIqaWwtQ8mVZy)xMc*IMCPk4fXlkYyiNP3hB1_1;}Yt8r(oS=eis!
z!iTyA4BpDXi&)I;6e2~`o*r0U3A(js`5Li33qp|y>et6=Zuel|#75c!uYb+*Ck3w0
zIs9xx^T)>s1l|N8uF>dVIn4p&@JW0G>L2auwS*fntrO@y(w@#UActJ2thm^%>{Ef^
z`{DcRrmgM-prh7~2g}O@G?7z2P_?z)Z;)MWd}jjqbAF}h#-0#NaD=lJ2Hbr=SjYF&
z(@g~hSD__Pk?hZ&d3u7V!T6@V#D1GwifOT8;$VD0;w;9oYIKR!GF=t)RFt{n0as*2
zuN-I~HnoQRaUrWzK+Txnq7Wx-tLTf9e;=tro`&*kq$C+phkvE<(1YlYK=q_pgC!=W
zR1+T-^n333wwU+21pf^Gu8NcG)HJ4gak9ff|5{R-1;?ge*qWHb>RDX?u08o?<7Pk^Z{z6A+n2uNPx=8@fnf-V9+g7t1;Oq
zL;~_I(4-=n9Zsk4_2cV8n}=;JOjPMPKs~!c5VAB(uhk`!QxB}-5#wBgz4=3htOA^T
z7NkT~9=mlI-}!o0G0Zz@Y!1LWn?}7c!avX9^zzhxGd}$tDMR%!z^tqs
zKjg`)*ieHyh0AFv|IVIJU<`L>zR^(?C?;Y61KbE~_Wq*=NhU`<8RdpY{d(7lj+2nnVE02Y*DL$Kq~kNF9E6$=j~kGQ%Q{N
zk48x9o0?Qvs;Vp2$D<$9gylu5RW(=k0nP1CJ2qw<3?#91nrABBa#twk#10KFe6t|W
zo2zl8^o)-SI2tyUAeVppAdf)+z}F^q-XcPNxPlt7O`d#M6%=Uu->XgwSNzK!_#`{w
z2jmPe_^d{%h?dS9U}y?$r?e;5w+zs^2l^7myUD=!-4}1Wi^Qr5Ktg;F234l_o1A}j
z{(pyn1QC8D%H9)GONJ%VMVpkVF8WvSw>{UR_EL7PL4LqPakM3^gzrj7TK|w*
zPFt}R$Z7M+d!YtgWB}X75O`f*UCj2jZeSd4Ki&NUPBkK%JR;it13l|Gagi@J
zHtN4GL!N|s?$&M|je`xr4+=QsezuR3ECPsZ*~3k-QN;0zgg9CP=`VT
z@`XA7o>c-Odw@DUoD&Pu_z0@|c+y{!Uqg%|hEty==}FJ%`Wur4uJ0zd3~7o4SSIb1
zwcJ$(y-`3dG(=$N+|9{VLm83s$uuv;C{fF?pS9LtC?ZcuOw1Wc>gj*v4hntxwJ-z@9`*x`(p
zB4cACFYPUGaj{ZG2R@$av=kUsDeW7;&^np?=kjAd6;h&jjNGFY(|cF?vZ|cRJ)IEi
zb?cqH&*?$#5YC6dj4>_}KvTfo5k<6;j^xBEJPnfeFOI>Q#PaGtKu3eNx5?kn-fDqI
zC(B@B4!jWR|0C-wfU5kuuN9F{X$1-CkQSsnrMtVkK|s1ox{>bg?vMthyHli<}wboweC4IoZD)lDoLH!tUo~cU-
z6KEQ_vf2sZ&_U`5kij5=`nq?6xOaOxF&u38WNF>4foPCMWfJ(1_j|K{5lri(Xsf12
z3JJxTWWI!=RVb?BGeV7`RQ2fDH=wctmVN>CHSH
zej^y5st2tLTn7li06t*_{?4!Hrh8bxzwf^I^n-QRfUt18W^%n6akvgTERG1@rp!);
zSNpEouQflEg>PTp<2vj5I1mw2z0>^+9a$KA3FC^mKed~=#z`3V-`y0_}Jrg9TDqoloRSn6n!353&P`x_%_lQkT>QG>K3-}%U7k3>#RI0YtOK*jd?o)nFSXlgHa%dI
zT=_kysz;ul>-f`F_w{qj)$*J=i;OEn&371H&fk8uF??0lOa0~j#64`R`w0wnIJ~*0
z>}+2@JonOkS!9E+Lb+kd$jv@KcE@@7+u~?iDm|Sd>7MD~YKPYea!m&y{J-T(e$fX!
z$8)=cFq-9kk?%t(-aUfVLT3Xck#Wv~h1~x>m;iuOkMgET8%<&$`Q$Nqu|G?X@R^i~
z<79wDD)#lc2dBwMDyn!PFjz1k7U~FNSZwc%W^^nTd4w?i@jQIr0(NuMo4t6o{$cw=
z0C8ffGN-$!>AIrHPgwfXK2C_~>4)B{oLLp~WXXR7>qMgO*{w#TVQOVi-}6{IfpFZw
zs}{56<_l?9AuV5}!bT*V;jybse|CVr5jNgPog_w?2r{PE>tBD3!t6tdtxaojnk#n>
z;75Pb^zLmK68YlqtIWPfC^n>zu46GD<
zJGH&}aj0zHpJ-B@ch;RwikndX;`OtxkJqLWQcSMB>ci1ewiTOkRkLK%4Hn
z*FS5EDW(XO0C0_tDj57KOQSov@U5zsFw(6Mau-p&b15hRNU$Ly;D2}mk6g>|2lw=M
zRQi)W+cGc~kXBU9=6`)K)U;BYTZ?E~zjV8D$VGvm25d#UF=BEK_qQ=F1qn*cKq!B=Gzh$vrHJy`&KQ!r5
zg~5xziw}D)p1UO-_%eZ3qVI9ycN7DkP|WXD!l4)${x}#*O*Jk8?|Ee?gPQv-T;7MA
z^+gisyc^bXGw=>JwekNm>_JGJY1DVNR)NdJ!9dM11a~H*JqQ2d`8q%R`M{QD%3Je9
zS}FXGA&FPQd#kUg$pY10`_rQ%D|L6%J;{wmqnsvtH}PDkLK{-%Ox(G5ZC#jH;u*px
z@yv=fqzU9a{W__%UANR|G<7yAX`PC
zLh$kT?%`2K{~jO=9jdcCe=uzo^(9oJvDb_K`ifeaH1>$~uutaUITnbovNq#T9(E8D
zJsYB~*jg?Q-7BywAreFuyGKDmHV6c{Krx6mB3X}46plFbEH;cG*kqOGIJgW<;v}^y^F&X|M}W*Hq)jg{IzZv!
zqY#^iUqBj*SfH|GZ^q2b>;yWopjC*+<+4iLp!#kG0&zAI+MjunRzO80=n10K5efE_
z({F|lFtRYTu+bP$ilAJ9ET@HRq0VfqMtY=6)AemQf#fH{fQ)b$3xH#*NPT`!uBQGu$>9a
zDuJmS%kq%PZ-c>q0gf2DtVrQE?G{_n_w+{P-1RJRM{HDsfwGhcitiqOCxirfUBS29
z9<_8!Ht93HLX%^7>wx@U+s>XalV^5eK^>RJ{gdiVsbCN?zYr+{*mil%xeDx+c@eZC
zd>A2Qq%nm+;{mNhHJC#P6fdF|)hE7GpYc4HtNMcY)9$;`p$TYS^g`aN9h-lid{EO`
zHpOK>5yfS=L%?O&2;O?Iviv}kYt&3?J}%^Z{d90{-8Z1-E1Qx54JC7)^t62#4YnCx
zB@3F#^i0GH?GN}j6q~-ybU3FN$6so+LAan!wOWXZrgHeu{I2subfi0}WKzdYy4zR(
z8~u8C@SiespaYDrA>zlwg~`4!_K^>fJbfP`M73dJuzbn~?KSMx870hT)-dFT?u4c}
zyt=}KcJGV_>kHJW^RXl-WAiTXnLdRfVY`dU`k=gi$JHu1U_X8!B*|p(BXqENf_`pl
zHsiU#yEdVXWD&k%x33B>Y8tXLM%eQ47P3dj7?d!~lEu(q>f0R7HsTDw
z*nbdwfS2L=E%Z8NAYpWpR1-K5Fb<;x`{ujA69*YZUlMj>jEF)4jK90Gf0ELjHM~H=
zow>>K7bYIdms%uz8}q7AuNzt7$SsHhrlLDGHf`k<+rO9|;Um2xDjZqb)Uq52P;1eKhcpZm{XvVui`?rJ7
zY(^A?#nZr@cy9*?m=<7^c#jTks_`GUJ!k>0T&!Seze~uy$~-u@P&JqRzY@6k*fD-i
z7RXFc@DK-oJ}WEZQ4e`bN~O>K%f7vOikm#sGY_ihY$zdbK^6j;4h6qg=2jo`WY$azN5xk}Cc^iX
zxG1(ijEALg5OnvshRf6K{CuQFC#UpW#z31=J&`-t=TGFD3<5zBo4!T!9bk@QkUfK*
zqXbal{ziREu2Df%uZY@$TVewUfxujdGR77WfbjQmKZ2P@C_I%<2&|R-Qi`<8p5u79
zyfC)W8+zKV>{0I;1z2vTNbmbd-n(^_#j=JKoCHZzZL@G*95lI2wdnt_>!79)kF_`-
zhh>V+&}zyuftiB@u1yO08CWocY&Z*I7532amDPN8Q7skz
zG&v^vAh8^S@^3z&ms*dq!OGo69pj6`M*uOeLNv>Wag)r^U)&d#v)|xAQxn?e`;Y%c!S8z=__PCfLO~9Qn=4gp)~Y6<)6oMRV40w&4dHps-(GG|1!sRwxf=nz6C?~
z$P(N#!0rG3D-pK^)ZXQS#`bV`DwU?@yksXLM-9qHVIw>Ce;_ws0NNP3EQv_Oi)>=4
z6SW3wtx8!YgTAoJ)K3A-i9ZzC{+YIFomC!s7M;L#`s&riYDfI^6kc?xY;_;Gl$O^{Chv}pt%u~e#-fkQu7NcsDW?U^2#3Y8?qMrs)Up7Spg@~U^
z5x7Hp1b=h1fgYp=x}?JC6zE&z=lh9?u;7|ZMJ-@kVpSk#A;v5~yL)p)@A}OvNi!3aCH;^@;#8
zp->m5I*y({y7eaRe3=KxL$R5n8^n09;%VOG7Q@44FGw+;nZW@20B4L{T)MIf>kODz
zgiZk0ChB<3q~9%mN=XSL+9*!x1W2zELz-<>TD&hllKaQE9(7j>H#)R6DKiyR^NW&=QRl)&2t!mh`D
z5mVPxsXNS0AKCGEWJ2~-I)+Ha9=!xA(Ce)%SRp%h5P`5HMGE!rKL?Xf?5Ug%FvNe4
zDjzQNs5&CG1&8%09?NO98erfD1AU|9&|oHP*uIE27ElsJ2nxNNB>e9Q
zET113vb+u*o)F8aLOFifsdf)HjcUUXv!?fmpQjqafa@Ne4K&+Qs|7%j5hM4kK-y?X
z<6Nx=QsC?e_YM^V5R~{ZP$F@=bJ!)
z1wrdt2KxE0LLqE$UjfPN^Ul5L;b$)9zzJ`LG`$(g*+0Uz$;kP;=lR#r9zm3czWcL+
zlvpygd?SS2ZVRB24odVR=KD+q_6T}I$afO$1JDHy)mc7W;&%di4;FHU4(h>H&X
zjQD7&Ck*#{rY$Zz}~fBG~S&IOC4uI
zJ>(uDX!YQyf6Q3$4}gHKR&|)_t!$e+Alj#p_ZMfVuU~z3irSV-pdMw>z9`p@AT9}Ia?hyI}A9}Bs@hD=dTGGhXPSJX-b_O
zE|+<$I><`mYR^VnQvUFbrU@b!ayKx
zR;%sPM>6>LUf07FrR|=sS<+%nQ0dEIr`)M;H*p@G_iAv<&%9Jhyc7d+f5|HjrDz2KwGM%EQ92tjsLot*0Bub#{7!bS}HqfY|LC4oFMLWp*day`l&=;8u9Sx_O5
z_{WIG4V9fI!pn3h7&|0*_)X9)--?cexd?th7Q2yu7(%eWWy@fh)I&&UsB{y$fKS2itw#xjbor-6F9HNIAHxLUyJmZAkz`1GLv)gs
zY~`8ZD_A*AjOMHtRpfe!aR1hB}a&Z
z@xhScVn_;o=%x1@Cw~76WQ=~T@aFi_Mf@#tinx!@QB0wm546qL>3gKuilj~iYT)kCM2YGODzcbjU?vh0?9Av?HHBC8C^oTd{93_M%WwAZsMY%0=ZbU0*99iC-pzZ6T($k5S}1-u}u$&1lVK{SRE`bt}rft+`f#1_whx4&171u
z<-F{C_%lbk=Jx(-bx`7fBqTn2MNe1RSa*49-}83Y&QkAoJ%|9AK;voI>widgd01%j
zXi8lcP?O;-1nF>Myo04XUox=}$>zb5#&sN24b>c$~x8s_K2)VHy}2+ZBaai`A+uEekYUj*G+TgtP4XDsH>hhAi9lMjQ{MlJ=CKE0&26Jl8YSRvmvSQgG_z1XTY
z-hFpH`>6*Sc79nV-Ofk*!0}o*F)71q1rVPmLrH(rpHn>Z8De2EEF?u*i@nE|8(B(K7<67c@MFgwv?;QpU
z4R(k1gBg{+3WfB0xqq#<{+=P6*~cXA(F(9a6LcDm#cU$C53hQb3v^VUgI@sL$AEaY
zH@ylDE%-96MdS;c)m9pprc}*ulc4u~8OFCWqII~h)6yHkdyjYf11WJ)K?c&XJVF**
z;W}oqJQ0q|dQ=~Y^tbir<3aeT_TF?XlMt`Cq@)I9@y!P!;eI_aRL_>o@2_HsLz#$s
z>@!3*1{l{|gM(&5*9@+v?e=MqpLApsmhf+b1=vz>kEJq!1X>!7$Ii%P3PvU__DU)i
z0P?5K@u|)J30vNB1eO>8$DSvX^mA>O_pLv7cKlHXgmpo{!vW`N)96f@mRZKbS2eK=
z3p)xEe1~rgAR?Y(@s0D6-gPC6GvCAE!SA1bKoR~CiJxl&qUHF
zYe2XFqJd_TE(2HBdohta!SvMkTqgqxRzJt82KiRMrC#H-)W~G`K<_VE6b51CGQ973
z9OjG?J;p!0;9bg>@#2Y1h?trVuRa}Vn=s@y|GnX|y9}bUy;gx|;kPbN1;h5C9AAPz
zH2w+-gbCOlsNC+a`>VI!e$NHpd;#E(MW9t#>D+9Lf}2=eK<0a#q!F_z$fr5=2^|2_!hwJ)bzh`|4D1~0+;49btG1VVJrFs~s1ekpb6Y^uNW%GR7e6hn
zAQzUrG22OV&I3ssBMCGf1~&5!N0)Y;p!JzI;k^}1VL$EN^16R8Ip$i+Zk}Md|FA0>
zo9{dEvdV%fVNL^G;sA%)+*O7prM{>oW%
z;*+$UwQn#JMoAZVUbA1C9F8d;IKQ1V2bl&VAny9;?8OCGb-6Ai~!+sSyGKeVx#&83?h
zjda$CjlcQ_ZB_N(Q$D`$GFqJ&CHcx(LIBGh#tUm+e4PBOSarN%)av9+!DcWRZL(zU
zYqg5k&2Gk)ABuLIiuS#x>p31shA}!8^@atX(uhYVy4@V^-;x;i@E}P`E<0&A{UoVJ
zp7+-#@fo*P*GDbKaj4D(=+=`b^LxneI3;0>$-R#gb8|^KOp>qJDqYYCAOGi5i3uZW
z07o)M=q?XjL_awx{4S~PWw>Acd0W=TB+}i9@1_Va}
zFr<7iNYZP&1*@186eicpr<+RFOV5$CJMxqpot9yCrpsTC?+UIo4A5T#ZR&Pj9ahZfv22+tSJnB9je%;d@T^^XdI+z0J`X
z-c0qdM^z1AgO+?#{#vw<@cDP+-o@|$8`){QhakA|sj>OH`MLJI6Iu%{H#y%(T1)$F
z6mu`W#WcfvYkx~l`VK}Vo*UZ~d(!3_xwIO4dwbZC(}rcIlp#h8YBMvlb8>z(xwdgT
z5p+VIKw{Ka(+buK_3kqF7nsaB=k9_^7R=|0F`&)UKTKtTq5o3w#npI(vJC1q1~h-|^DWNG>fc)l!QJ2>4?C7ashDlc^w8@1AoxvY=)
zY__SGN2OY~-ONo~iwzxe&Ca-QN9e54oj*oeu2!8S(;MX?;WC-}*2+Z)Qb^;)9WJUU
zQYPVyd6j;0x!t8RG0BJq4p^KPUc&*yJax#2j-z>p!jA{Cd-xxDC?qgxZ-gp3e)kbg
z6d4e7wRg~6YgSlHlFI{vtfUMD1#gZRcZdxZo4VpxZj=7F&biU=ii~)-0+CDp3BfwK
zkGt7;;fpz|C7;lJm)G(n0%D@=78-4OZ}9N&w)${`#6#>Q*gl!2ym)Qf^1}~fZ!p%b
z5Av&LvZm<;E{AXvwZHg5w3fZ!jY^f2*MqXJqRIW^E_>NCKj@hJ#SD2Usch?WmEk~|uJa@mgKePp#ezU8l
z{ZrL^_9-4UWO;i($}t7wo661dTg`n)tc^%%pmV*!)klIZ5Lu+hxr~0^KPU1erY(CL
zpj-LBKbcOjwvhxFS(Tq$T*N?2m@XkcOA9
znD39r#>S90_7?^6HWvvYHxV%`M2GRi!zg?2zmytCXti9Z=!bh&+pKPCF99`T6FwS9D{+G(37%_2(ADr&}a*(&C+3QPBLi^P;({@xjM3FI$x=opknLUL`^y0d@7TAoRV(u!}tPr0czI_58o_JOpTdlvnWbqB%
z9K)@Y3RyM7ZXY@MSI6~g8)Ym7Z@y5B-xOrgk=$~3p%~Z!%Jd_h#Q+~s`}TB!)?9ls
z_lH#DQ)q2VN&r5XZo|_bz4=zTpBL-|Zf{B;Ck4FUCuckyezX<_P*t>ZsA%7wIx|`?
zK~7RA?rDE+hSIy!R1}{n7!AjETu0Ww^j|Y|JF`y{JWFesEq<=8vuT_~B-dQN*^e?{
zk^vD54Z*y#74Y@_8on6kVSnVFFPZwQl0%MQ8VfV<60E~>;jiV(7Uxu{ADas?u1F$V
z%YB1_UZm_kPe#PRpTL4wb?JZ85x?VgnI+EotBywXS48G0xH3+EseJ<@*t##QNu&MY
zzLD$h*XmFkkA63eHWb79;bp39ZfpovTB#@9&7SWov^X{L^qlrsuU%y`Bg+#CYT
z_wm1DVrj%ua8n((*Jy_ZzCa2pd|m^z2s(-ll%f8NJO0+TJErbxVq%2iqn1l0GPs2j
zdgJ^1%Z%-LlhtXZmnF~hX!oupJ2oj@uJcAonQ7&8G{Xrly`|GkkRM0uS!&eZQ{m&U
zOaOyfHx*CJ-^0Y4eC^<%)N`vLQ7-30kpqN;(PRYA<2@}Wrv^w8paDy?{#y#GOmpQp
zF&sBPk8E&^NZ}=lmm|GxlN_J_v*Er?U48F4Y<;~pw^d@3(fs|8JA)6aWtVY3o
z+oq%L!-CE$2L7b8Ym=7kL5kJ5A_Xs!NfWNJ@5r7HxAaPZ5hq0p&>caCtU7C#Xrx=b
zQy|?tT%*`*0@cn43fja~^NEEZB
z@B3!wj_JLw+qV)kVu#DzAU3=SG}p}E8_RV%{Ll&UVr)0jot=w>gM004(D41@
z(_#1MBi<)>FH~1d_?nR7&wyxW2%@s~T-VgvzNNC)Mx+`+Q;6$IQZyRG(fgOo<;8kp7WQUsPZJD}D`PQV2b6lY%d9w!@9o2m8@0bWR
z?3t#<#@$b=%g!C84g8kJi#7%lRDBuuXM37$Z#ER`LU3{PMJ|^w`_U;Vc4Ah!FFnOB
zkDgF(%c^l9Gl=(SgKwsC0;bF9XEOk7u-*3A1Y*&t;W(bC%RCHXqHypi>
z@I!aRZm5_mw|_FRD3f|sX@@IVdY-S{9lkHSx|4Cp*j_GmP*rc&ncTNL=fw*ukaWL0
zZi`lJ0eN8p7w8Mg#6=AawGutwrG3fn1*lqA8)m?y*q_aKU&wRCWtk<_`o&W^zPJ66
z$E>9>xv?T2#c6mul+F9RK095BiF3%)(PCTP%PU}P&uARSvEDW}>PKJCwt^|?kA
z$C-4Ce9|=NDD-EWP?|@(zg>;gi7kH4iGqK^>r5bMBwH=u$mMj&rd0Zxp=o5CVa=s-$-fM63{R<=;kGr`=lcQm-q&~n%%jXW_
z7gs$kB`+V5xY(iZfkltGcbU~A+#v^!yfXt`U0leV1UsMO!JJ0;q09~Qy`YAumx=8$
zc2Oe{*)q6MVX{%m!H5BoWskVul;lekYR>5os;>B2b8PZaF3yF)XL%>0pf6|Htg`(-SF@*=M&!0<-CK?}*r;tBJuXKP(`W>oh
z%)r19e=l9-z=g;2KTto)I|N~^9RZVM4!lS!{gB8
zX;VA9c;%})b7*iJ%k4H>a;1E@5r~h^b8@qaIkb4pRdSE1U!fDU{`ZD({GoA>G)j}jES<+_
z6CEToxR9>4krpw^TMU5@)i*T?*dOb~_9|rZgcFCJo5}`t{g7c_G2NHkV&wj0y3ag)
zyxJjFAmlf#-%`J<_^TpwY48=NVnWAx`>nPTJ74J2b1X%+BEm$|{`OY6!!exL(f3Vez4rYuX9#wvpRX@X_c{-ZG71L
zben~KJeF^$ET+qkd>{~sH(p0=Sfvq_pFuUYUdbvuP72J>87(3`-zNpE!AT!(c19?{lStnA>JJw9sU6UX6v%D
zvQZ;g>B-4dx0lB%J1w6aH~HsZsEA^ii$P3u0Q5YFeAHgj+S*zhJaGSE6fO3DyTqgv
zKG03lXw*yg^0EwpNsq$Bl{U9wFvVoJGm;h)+b!1ogXcrODM2=N&o&grlb2<@6UJ~X
zubG(Bvx{ylY{VB=H5Gw;S{HCxN7x8_o0av3l$Et*#;&{F!x|(0v2fnaZIwKloYL>c
z)YO`jb&-kzC?c~i|Ne228KR=8i9>GzIGOj7KRdDs&>Biri_IH0oZ{O)cm%#CT&eh5
zc5cF2s(Dy?IJVPC*Qq?&ZH_u{vYTC}ed3IP>qnkpg9luG*vv6Ko-3{4U;stx?;iWa
zm;4y?zHg8S#mqZ;Pi~q$qNI$~+U=%ln|+Mx82fg=%l=$2Ak6pDMs|as@q|#tL~1*J
zRYqYW=ba0G+7vbBmPWuBtZ(jTqs4k7`ifS2q7=84lqxU5_n!^d4`3B#eqAU_&$W=khQnBpO?hBsnI;{=|+9<
zb&Jf4E7lJRJV&j{1WZDOX5!>T%#{Dhuww*nxjLk*RGnKV-Q|Z?NZ5gPxpZqG6+XOy
z?>%c|bazn0Fc`bjIlmm=NcN~O5mq{!sT*17!?(bNXF6}(XKY`zPAL<%9bZhGHEMuc
zt}iSUt+!b%ul{i+8=;*i(6GS5hbCtwX2%KMXe^p)nY6d4$N7}aDx(^1e&LnvHz%JM
zCdO)!CJ;&2Ay++W^j1%%HI>ayw!?XN;LCRX?~{}GE61=Yen7
zqj7FF18ZVR&9`eCTLl>_Dvt-F83hj;#6zlI5xj5^_0-u4-tAj8e?x>Ubc-kbuM@J@prnJ~zGB4FnR$^O?wjm@as6jIQ
ztkCX__GtQfYwOvBp<3Z5aA9+*knlNE`|6xb)Cp*)?oW0LDp;H*EhGQ(Jw33to6lGl
zfpH>;>vs7*bm;SX;pgpjGVk
zZLaSZ2XX$Ny&c6Th}QUVH-?aV6byBeg7m03V8tHr5R|2s1`pKNGV=RvHs4H7o3
zj1`&U*{@J-H%WieuVV5UwANggOSgTH@=GyC@UoBo^|H6Y%Vy~z(L4GzIZE)hp!T5o
zU}0_XD+GV_%W{hjwLnRERkKJ;NlEx|G^kE|+z5nelNmZGIa(i&n)mZur))i18k<~x
zKEr#H7XGS<$`18&fyn7YnFFPg83%jQPsihq2VZFkIOd`(zU^lLzi*G*GA9**9YAy=
z&Tp(x&SC3%)g$oU1oBT703qu+4&7t{FByHu*%znGE>F6lb@->OKe6cV6%*(m)B(IB
z;Gj+N6okxnJgCmM8da@tGe?GcK_t^)pVhs7?xKd&dtNNH4j5I(mARv3_`Ogp85sgv
zZ+mC@H*W8p>B)L1r6!H%X2pKns_c)`$5nJ(2YI^R>^Afc4yqOCV3)(nyj^ZamZd~?
zH_8+*QdZ)no`HXi`HW8YMX&ASt%HMN6(606!5o-A?sDyq*S8Jwqwo^mUX|j@GfMMp
zbh0(s3R@xlt5KZC?$V3=$OJr6;CgZrwe}4Q!D%ShJ8Y8ipk~+nmd%O1$z(e|kyiy-
zBF_q&)zY5=HJSVJ;P#{!%PTs^&J8z9nB_0Er7I2-5fOoohL&ZY5*Y_XUD4G>u(2ve
znA_a1?R`vtf(x6$IAT45d?L0n#g}TC(iG^j#qoXAzL=VpM#jQYPgHF1=06nK-_CDL
z7Zz3HtA81g-z7b-x3SU!T}D#b8OpaY>dFO2p*?80wq{&Z|tcEoR!!tDp+{eSztd
zPiZ7#^vh&pa#Xy;I^Eh%EC>el7bd!%JhwPFdl1M}_p6
zNy)qH_DZKpSGkbm?cksj)O^Vx_|m500WtAcbFmW=!%X!eZgqHE_!C!3qL=l|xlAQe
z2X^0+kIloL%os2I>?nHPcRmrCF=Q0~V+36imT*d7PXx>|8_yI)JhlJTs=f^8{%3dN
z`0*(#7pE%fNAIM2$b{-4;XkRm1Er?*iG!o=FK#>*>QN~U#fE4L)ZWwEsYt{O{Z5W{5w~Ie_|tG%yNYAn
zzcwUBIFzR-X0SIDD_2Rj(TNmBLU3?|hs1|UYUvT#5jMjHGJi4imNek)13$`9PK-4y
z+H~m5^RJW$3)@n1cu;A72u~-;5n0Wfae3Pn6`CqLA`pZuT=LQUn#yXy&-L4rX?szh*O;#i%;47EQ*7~et
zF+<~Ex)Y$(F#{P>g1
z=H8^K^XsqgtX>Ai#;Wvx(6x66V8>T9w+)YT{o5gRpAbfWll-2mG644_d;qiE;dtDx
ziUp5+9clhh@2Vs|V8)S4
znrI)M{Eoy))s{$w^BGYIkiBEink8SQ2!`3Ue1;JA1stL&2)?lD?6f->Ixa9%NlxAf
zEYoOEzO5o{9vnjMn-NmJ&Pgxg`=vEgcac(uch`S&8>
zP}F6SupLXM=2Y$!IuJyRW$**7hb**0GXc;8(#^;7I}=8GaTHTR_tq2gMqHHbAY;ty
zI2s%?1AZuw?PMoT$Gsf=Li)X{G?~*!VlteRo}OijPElAr-Q6OH)yYMJVw^_a8?3^;
zzh3-6hDWiMyOh72eeEXn4UM6$c*DC6oAt(K&)2Q{ojxDeRnh87F%K(+)UsjO9Dlh2h!+8|mWS04l6g+dg5`h}lxNLkKv)YspXT+hF>*-MKzqWIL(Y0S2C_+nKz?f6lNXantel%hn6iph`Tj{Ni;i|X!6~DmPnt#^%%$&@TBdvPk*qey9TiUO_Qm9v+A2=8oT^>0a
zwOC#3fFPX~`|*=FFjzQKO#c#X`WXf*@ndvTNidqfR2pAx`^DvO)FJ7ph+(~kHWsxr
zU@f-8MZvnwF~R+6d>EkD2PQGj(zrhmC{qvd>gvk0OIB4i3H?RGctQnmJB|AiAp}Wh
z@RXUXF4HyXG~g{o_6ESA!DznKg5AVE*S6uz4;hHCA17Q1s<
z4N&=(iq*s+-kM6ifZgJty^JV`!06PPr`Ii(AQF=kL42
zK<^AojEX`vLRwPD8^FslDSi6%DP_uPjrqlZwOXBdd^OAprI?u5klMR`(h)auJp2;C
z3lREnpuJ|XOtQa{R7lvYa$KljU@_*X>C61a0^JM${&e0T5~j_Ap6+9_%UuLt@_R`f
zLGg^Q0>h*JdJvJ!^$*?$I3+4x)FUJ1C*U4E6#;=9#b+(yO2$7;8xzzp5EZ2}!7w8S
z^p3rYoZM6nBH&LDUuG@mDUsY}{^Ch{WMokNnlYD@f?{@#FfI6B59XVgZsrii4PfDO
zXl9a!RdhP&o@2FBN3)*x1BB;gaM;?y^D-b>#fcR(%;Dn6@DqZL?C#P!qBgW*`Utjw-
zjtNLJ+;55_-eA5`OYpP4#y^cOL;DHztr0%JUJwy@+__!f-#)0{`A>q8fc@JwTaw};
zSs_IXqILksb)5i$l4f){F<^ANcs@}prT`Ic{Z(+ey~M6AoeWv4e6o!|_>1e)FH(qF
zIKnaUu!=h^f!AFS)#-A=;ureAuL~#Ok#R5>CtFC$FLgQnA+M;IyBzT1YZeeHKkPoo
zC4#E!5@cfyHaff0C5f$P02cz3hSQVhBseJ!^Tc*iR5m&hg_FK6n|zXts8Cv0@km<5*9%
zwLSNSuQjfB3s7hn8*+tx3```YJ4Y+>!mu48@7*_Qn)G{FPtIAr660PDr_@>5zqb6d
zTxp`b3knJ_k$~j=d@0b@?=3a81Sb+1DQV&H{!2ZuLM7M6!q2=(eNiVHAqo|
zh9jw1j_%|#AtCLzM-PVM8#1JFY@Fqj|UL3B>QZPD+>(7(e@r;Q=C6P#Q
zFBcZZ#x9_(8a{|cLbr8tiUxghyj;$4jHidl;Czi4fN_!A1p&vy^9S!)*z}P@pqscf
z2%HtZzP@2!iF9;yxKj?c24nk}j0T>3|6^YuwWamx?BsKN;uIl1$f+WoQU7gK+)G`)dIefik8G=NGN`ul&ZMEex92cbPbdx
zv+fi{MIkdRcoz-Ph>cCmv5z4(iGabN1(H#A`xD06=-#gxD~V?x_pz`*R*oE$N;z&l
zjnHiUR3+a05=|*2&<1Fjsu+*ike5DAiaP4O6NG#5n&Nx1i%so}u5my%Yw|u;)!+q#&Gu`ZkFB=7Ak4}6aG!%E
zyW{KrrS$zn3kIj>!ZAcACMF&%)Jf#geV*AJ8R)w~sI^*D>WgSo`S7AcFqswQWg|L3
zlzg~oq!a`-?T@Sa$%)q1*UOd$J`AsQVJN}HFxYn^Nqw|**`1&_1T_9ldW{$ki(sC$
zwKYfHd?fFEA;pUF^wZD5#l+p`U^^>Ibar*g0W(s5nm*wj!V62vu7(dz
zhuRW#Rnz!dlg?oMD!6_m$h9XzNz`Tyj{>;GeqEsbV5v^M{;eF2X8B0QD5HnS9L%3m
z*vSkF<<(96y6h0F1qZZHvSi)eTgRbi$zNdZbA#6DygyZ>unn#gi9WC#el@Hhq}Z`J
z-1dK#in++6*jZrW%pxyC8MA&PY6s^`jJZ$xh{QLY%9_o6j_D1j(B6Btmqe37AAz{M
zy)}_ntff}!Fm>SQ2uu8x)8dIwJLH4drL|vf?$+lBB0a_CPUz`TZL;6~
zEESgMSBU#qXBBgz&cbVV#?jjqk1#r#8}`3fFQ6x#F%*Tc4R&y#AC~m=^KptxMz&-c<
zXf!{M4RDhnK(B<4hbg>M-iyi@+v3_gIVto097%M*rJ|y$zVoRJ`g8mk!Q#DnQmp`ljRsTXXS3A6%R
z`70!jPS1iR+*=`em6d$R{gx`^uo_!qSyn@JMg{hQqqQPj%IwBHzKeDHbZHzH@RJuqep`x>lgu`H6`IKY7h4a>??L5I=m#XOOHCW4(nB}D4Ibp#d
zBO{}ujVp0b>!HC4zu~+{m?>M_UGFZYJDSsGx4ZMkOyV;{&#+b1;hK9+VDW|`ZmX-y
zYP#x>7;W8LE)o@`&Jw#g$Ul@@^Xv@|9&ON+FIS_B%TAeN;{hvlucSj9Oii?RcJPQK#*<#wja0j~PI&l!dJP-dn+(R&$tx|J*Lfbt25>4%FU2o@q_F5-7
zBH__kjfu?eYDb5-V;nWOCO@d
zr(hB353CPW&Q4CueUBDP*mT{Dh{wvcSj`ru`1>KK@IuNsNeF~=AapnDn$zkBey!!a
zJn&U3Sy6%a_RT$Njti90ZLpRvWqo6Dr$c^x2vHPQ3J%jX`T6r_E?#K$_ST@_5Ly;r
z0iWQ=R9xIoGTad`LnzWqZ?&Q%MU7)J*1)P>LC9>zS0S4+YNyxVDd`kc|%{I
zfKh8prc@LI)C5w9WHtJ0G6`knWUYk_NTlI%1`$M+kIy2_zBHgZ&T^huQN6e|Pu3G2
zUN|@?D6;&elb>#QXiZP9s+eT(c;xTB4O(8_h9e{gls|RJ2ae2}z@ApUc8qc;D*wgk
z?`5qSD}W?R_!kY0{%+1XinYBxsz{!jLa6rD^s#TsQ{=ss7+Um~&Kk9Uirc@etRy~Q
zu6(FcultOft`S}7RT%40Ck2b(qoV)E)>S}NxourQ5ReWLqz}^F9TG}+x3qLO0@B?j
zAt2oif*{hNbVx}_HwYs6?_<6D?)%4J+`$;&Js|H%;>zA$;XYxhW_CDi
zgXR4SH29aQ3{~}PIN;JN*AcxapO_HmBsf)kj+b^GFe^#M%Nwn`W6uEQ8enA(yZ{d1
zN&6C5O8J^i@!(8-L2gfGd-O;=AG8H9!Aq-^^~R8DY*nJ85MiV8vSHz#o>=8~i(}%}
zTNcAJNq;qR7vBeU))(_1KaP9$4@f7;GHjpD)NawGSOzOoy&l~*5f~mGuGVs45ZBPx
zZ<7wauh>lU#C^Y%srkxVC%jU-ePU5qQde&Q?fh#;khhONf&*Tlc2%^1%Ot|R;kd!X
zpr3%V-4Th5EQ&xY7@_jnY2=9oxO1^zP>tI3Iif%Cf{Ft+;K5Z&E*6X$2g(}LbZzOh
zkeU+=h7gcM{f(R;XA_0_-V%&K$|Q;5vpGVp)#A#i7sl}QGlwg;G__K&MPWuP*B+&2
zH!3Rui99c64_PbTJ)9Y1v4%${1G4v^eGK*Rttca*L(CCN%^1z~)w3<^y}8
zg>vbj(i)lH1)HXCVPPRjajgyy9dM%J_fU4SsK;k!B*LD(tQX~CsfxnuS%MEsFfP_C
z$j2MOpN~Xc%E|jQ$Y0skUOTzU+yB9MpLg}d`}9jthxcS5oXx14k|3VG>fq#behh-P
zrqh~qHLgJ$L-#h;@TrwcoU*R>%sEkRG05jiBJdf|FWxS@Y`qE4kHO)&2!Hy({PbOi
zRatMhNUhnIl^o?LkD{m7y1aKks38qKMn{hhezyHom*p`}k_(rdy?-`l`z0Yq@{DnOE(=2kP|G
z8^9FnAYg@umaVW8mhfq+sgtK??gNCY#F7z;0c31Q|Gq}(X&sGG8T*+ue
z@1pw}XDA|DB^KRf6?^)$&@qW%B@h!gNzZwg<@OzJN&ojyM2LPU4><`d`64EJ*VoIj
z)a-Dq6K-6rN4oV0VaT3rI=W=0r-ww}
zdU$d@Xmw8%g2-E?G1l`H(5V9aNfj!htD6yykdFj+
z0&rRqC>r*I(TtPg2f24G{UQ)+YPENeQZRSekusNv5=$dtzwOK`!%n>2RbEzf
zb!`@T*JY#+*AzlZLZWX<{U6k33a2;@OjtLaO_4lTMA093RK4m7(l?IKCTo+DQ~RMf
zsr(u)-`*7cG3JBk)Z}Yy6XLW!Q5B-52BjMs(iIk*$MJ{{3;2&n(D6r9PaQkMT41^FX8bOlBvoF
z6;>_8TFojaf3jH;C~-H0j0YJsa$`n|hT=Tb-}ydqF=gXDc?ofNs^V-tf=}@dxV~^=
zH)VflpP$)ACa
zHpku1tflIKV%?Dm+<1RV3l@?ffgW0$4_;bIdHuR_A()IvbR^AI3{5J-QFX!7?*5
zGZMXYN22cd_)#`2IyyNu6+hFld;RW5Sm<+suXYegcevnTneNR8pY1PLITNl##q0!r
zT=)qX;gHTRFC$*Req9C_9yrfVCg?x;=a-)iW?z4Q9GFKT14dSwf;x!jOA@L&4ZO0(
zC@d%3DQTDlv1iTgMh5Up;(>77xdUw}06uWvfnII$R8ksg@UYk4;IK>RZOdy;ebGEAK?_b60{oB72WD1X-XaCNBtOW^@$CQc3Ezv2)P2nIZf^42CTqy!g513*x~WN02z
zsA&OA(!H>tSEvK+H6h}446Hz&aweP6_=Tbp028JN49x(0g@J+bAu^z=OI)kLIt_3B
zp&40f9YtBjFU$Zz5)s+n+A5Y1#~USg{U5!Gbt26E+h-kKU;vvbXhDCuXe?=W7Zwo(
zIW++$GxVd>qPI<_`<+E$T&%PM{3=uM**KVfnn<-~Ny<06{gOBT9TXpdpu7uM9&d<9n@
zniBEOuR`8G|63Fcv;P6Kkn1S~k_x|g_wf~{%!`XH>Swa04=ub0zrvG29PRC6L8d6}
z;85K^XM87F45pU^Cx)Kh8B!8?ZyFp2%}1~qT@VPwxw)pQiiMVrF21RW2SA?kyu3UX
zB+Iy`QJFvUQfOfX)ajweokdAgvuGh0ddmihfpS6A3}u7F&zEcH4^Ku1o~IRXID>Fr
zy-dH)+uy_Ew}&k$FP~i5b|DQ0;L!lP;ABus+VXO1;5Ul?7>|rUUqwchBhyMrS{!^p
zxUw5ct*Q>f_wPr=h5gLe;Xp%2CruAYh>r)ppp=eadon(%DH^I_|GhUy`rtt&mkDz^
zI3z>{xc!}$VKqs2b#+MsG}vx~be8vL6C09YK72@5QBlE%Q1^_O^!L&G2XFZ>1g6Fc
zsxk*Y*Xn6(rr~8ejq)sw?T3Q-5F>(2wTn`VA1`gHeUtkqTp~PWo?~viWv_M)R&!9dsW(IXQ
zaAV{LiT(KT!=)sF@Yk*I`2jQyutd3b+8COdZs*nhSC)WXg$ZX5`{Q)lfRchj475a2
z2?+@Sw)3IcLRIXlG4lcqJ)|au)hPp%o*<$RTL$iBhSI(1Z~^OOMh=r?Wnz*iuYpHI
z#30#-O-M)|f7E}YX1g4GfCUm9B=5WnE%?pT7|YQS&|SF2WrBLnIf{)<27kZh
z+F)lhhBJxmygYH+rsZI1M7ck?Ms_t4$MZ39pjNH3N8+wIG7aJ|1-1`~ASB)uC)^RK
zBL1}=5fGTTSU^Rtkb{tfNIW0RLV^5zVDqE7Qb=Ux&zrfF922Nax{IDh6IH(ws(tf&
z!~8}5hJ)}dN|@g-pgR+I9i@O8iP9#A?cmdS$DSwDkU?I&s0Ezx(1+ly_x^BiL9ewls!aQ0`q}=Ghcgza~7b8v^ku&Cuqa1
zZ1%F91fY*#co&YC&p8&fGVWbj2CvUN`tQpIoE;HLc>9Bcbi1}Va9Iw3Xs~v9@ID3f
z_-oWqYQ%wPFCtyKvSReO0Uz&@LWCM}$-hp-imXWl@S}ZaGk{&#n3y1+`w1a4D;W6s
z=TKd8xaJvWm$_Y?vCsfw~Py!!LMCzTmKcKRLQD?l~L
z#MHDOSd5wghx3d1&@|G&zjF@`c&&|3u5c6l?}Z2m77^`Qa9fc4zJmnIDq5YJRkzs8nKqR>b-E4USJc1J9^~QbW0JCgMlF`se@}o;gNNnL?=-vnB
z<`9tWPBWpnltrii25x?8;I_dW3cI@;TUl8tgpnoSp*&S-zziDn>L?oqC7l(s~E*JSC_hIy~Vnq<4%SNSbSC
z<%AZo(dj+~Enm!V`uh5y4B>40<;#~@BUU~>Z6hNi_<`qtKw1?d90>_Y53VVI@^Fph
zd3)j`Q%hYMlihCx50~+O#k`MVFkAU^b8$3>r9vR}n@f3?cd9v+n`r*R|
zWkp3YaPs1SnVyuVXS3Et*ONbJhZVW~Y#j8Q;^9%<+}vn?z-Y_?jro>Gn8#_gzk!z@
zFEY?M>%V?YW@-BKF#lH&tn!9S4MifyA_^;z&n#I0)?_tTt7bNWpguVpt=akQ0R$3y
zpPnAToF_p$;GLFG`WZf#lnli~ueX^~2Lb19=FcJ6e2jxh^cp1#ukHSXzIq&ssWL6z
zM)I$b!HP)!GiZcdlAyUXNj-Z?$o1^?F9^YhOqN72E~B$iZTwqi@fYjvruaRUgnyb#
zt5N{1Q>}r+dxjE7VP_AAiS@R*najPkY@`O6EI?F^00&^iUE|&_aiE^*R|}_{1T_Cj
zhCvwhC%`eO?gaC=w&u@blw`0_xu~`;bdBIPjRj
zC$)I&)nD|5k0innNKlH2L2mdeA%OxBohTNxT%Evm!-U2Bil|&tFdHIy)B*N10Kskq
z3HjcV}Pk;aQ$P-1-O>?zQnyTztC=PJ0T-?*ipDf|qFF
z@<6n$ftDJjq~hY^<9BQWeij&@2QeQ@#8bWrjUZ4AG}_GCAZ@gPs*>f=$V{y{WBJ@J
z#_tm_AxQ?n#%)38uG*gi^$+;9^T^Nd_9X%eG@#5TS?tfhRSSnHa|+z8=S6A{>zkRG
zA(E?=W5;3%?V*9Njl&w&J~EVp2ibDnDyA*V>L3Lzt<;}rA_}p3h;k|Y8zR?}FRibe
z;i7@!2vFd(?1M72#WLntl9~&-Ui!sbwBL`Hn(hapjcbwwo#p@ccvL{5pB*F)Oh)5@
z7x*A3e$i-D=vMDPuKsRDDS{QJb(Eg(5MY7Y+g8)zZ1$6Ds-pNCQ2N{eZlN6=9mU4M
zp#aFmRs5wG%_vZaOc&WRKs
zUc~w#V6{IG`-@Z*8GAwI2&52{f`SV#JqId&AB^@>9D5g+`%S2iIRaHp-J`shK{?VM
zX~@f&u=&MMng6fj%7zRr2t*U{cGOKId$@n5|F2jAUU1O^|A`6JOgVU4@l@QmV3LXF
zWM`%%fP1OlDCAfN33I(0{t(C|&kzwM@`PkIm=c1Gjh!1L1~RTm>N|O~Iv`&{&mG&Y
zdJ^~>3bacjEg>p^3WXBKM2Q;x9v2h?%)E6fbR~rHT=An->A#mp(HD+~^a6;Hu#~Q?
zmb3o7XrPf?l8lK-p3CkF1Bj%PRIv6s=H&j(*erQTQO*z)CFZM;V}<<
zBY9^GxzkyK&F?!-#2DKT1h(GoZg8dujpvipu^HzZ6;hyG#CVu7P<6~>PSfV&7
zWc)xe+2>};AMw<9S7=k14W?vFiJgk9DSsv(+)#*8+w}iIlxD=MsE%PEL;d5G#)bG9h{S58;KQD;FiiYVUr}=*`o8b<;G;m@7R0fd9SOaWw
zHfL8)-%=ivzG}q-7u?@?*X>nsX&R>%9Y~K+ds}OSl*LsE?pIL2(mz^SS|Y>3!s62-
zfGYtY0FJP;-fH^ZE{X%zhhNFK2;7t`jIa^t?T>msK=$g>@bL6=UUH(BbC`N(Wj~N=
z4}LujniLG2j)HC5y
zPVm74aq-D+Wg3X3`+8X%{KF&>(1YVj6doRq{rMxgU$aR+Ht&n8COm9TOY_h8zk>t^
z3vAw6;5a5;#)+b`ii#;nWS=yW-!mn|=PLy;7Hsz_WVrJvBx-HGlbNpNuVnvuslQ-s
zwl*Ay1T`Q>eQ~)7nts@AffyX)er}6|m
z!ox_Iu@{h}nGXSogk|#T|E;QmE~w!QJj)UGceP%SP8fgzI`#4t$%5Et6|BgH@l1i@
z&Jau4?R6UzP}yE#aE7oQ96j54q-X_qz7ic7Ik7bWs-rFe;pt!|IA}u3htSv9YZ}Izb@RPu4w|j!*5JSXkGU&y~cF#E9k(CgNn93QljbbTh*$;;bP5f$CZ2QVq$?FIE|YEZ5b@3B#ZOA$f>Vk
zUKWv)lWX%#G}!2TuvY#ZNlNtJI(A=Wnqd5XGuhF=pktyyj_{3rUuUOS>6c};K+?DF
zftQ$nL8Ztw5`ZK`R@GI%Bjeu;957@UuuTzw+R_Ft+{`Q#p)oOyuRl2Dol@C@J~uwB
z$@Hw#y-iS~($dmWbIpL{(v2RXVY86J`uh52R+Jg{Mz8GeGZiYlP6mdNTUvQRK|$*~
z_&QKkAo%k4#6CPdoy;Zwywza4piPz-)Cmk1L%w0mfQZ_RHkrWa_G{CT`PabPM+Zgh
zWeIu>RIEGw4n+UBUirx}A3UH2*5*lIgs+6q$$)(D(6gzRFtYS;aBy`NNNM&}
zK%8P}jDm=Wc>NH^|HvC8C-EsM8WGxW!#J@F`Pi-aw0BGOaQrljK)BQv2xQ*R$ROhV
z%gIbz^SJ-|=p70_QexAEU;#lv7j)YuRN(w2%D=5!Yt-DHfd)=5-HnRU++;h
zOLpM-jPmcNW-XDFS(}f=Rz2FL%lf&Ne2jaKqg>;=eKwl&H;lcA!ojQvg4da*C
z17NVtDaCCqBb+^?WT+`nUcABO9q&VW3K#_QpCIP0d2ntn#Gen}ppTZ8*4d=0X0?AG
zx=H<7aSo4;SPK9LQ40i;j_V%@!otE>o6%VB7q
z(%WVYo(wbK5?7g2T@COu;i%IIe#pr12nf%6$>-;Th;@~f;~BJS#G^@tD}uzStY4}9
zxjX`}K!VgIirE2ZnTW>5Mlv_H`Cvn*SFy1orQ>(sdBpfaY072X
zgZlVhDL61`jbhddMo7CL(t!c9+NQo_OdXG&;muJPVqyW+=+6hFgf~RMBOoXqPeMRM
zlzIHvA8_NAF6JOpN{W2B0HhSqKy40(iTs!WzK}dLgbdOQI;>m?J1`WHLTG~PHx!V1
z<$vKWDflJV^jEK>TO4HgXm{+l%U9(C;7fU1vnwUpc4K|$AD
zf}i_Kgci1G1E4P`;{k9rx@T%J+~^3PEjGEjF#bG>CO+&(?5>YvpsPnybNKUb0_UG+
z$qD=OJCE9VuY=YxFyqF?*>I?>%4U$f3V7ZSu$z74Bz`#pRU^JkG-GIZ+P);-~EP^)?>T6Pq}!cI4b#+F!x{OqX%4UyE^t+zq};X{fx*Gs
zIj#T%N@HQcRc7+JV1L~2dLemK1IC>5y6$S$yBahM#jgHFMY>St1nvX^SJBTz+vnzVz&II*Qrhn2s@JE;p!yi8;Zf;s+a!*u6eTlvOL*^l1`hB7iuLL|4ASZ`x(las`
zfK%~=@LiVGz`v-yy#WbIrWCTR9;nXoRS^BjC;#pejz|7=bsQgBjq)mULyO4!wcYeU
z7Bq-ewqgXMw7K)H#T;9
zmzE4^X=q|Uf7XPCXV85#$Ica<`6~^BLl(KR!~{7mlC1~ky=P}Ifnt&x0Ggr**zaQh
z0k4>_V&DqvxDi%9QfK{Z4gYVj}J(!8_vU
ziJ2KKKx38?^Ny#fMTFSRLi|YtJ^Mh-?Q{ecT|C%9R1yA^(R%6GWP|;(XnDgsAZ>hx
z^Vfz(3wcQwKni+6c9<2Y|B?;sz3P$mPwAj5i+1oo8(}v9rULPhkc)|FNa*fIrQZSM
z9~)sJ9cJYd)~X43`e47oRc>*@7xqGtX*u{4~&340se4bEu&U$W6X^@kLcoW6C6W19M7*
zLq*qHOAv2|`CjMA*mTNib8c<~oq_)2EyrpRreu%kQ+GXka)o2ZVOma|27Sj0p@;eg
z?=(MK#9}!Ixfem-aYLAJ1|UkU_}^P{fBln`jz~fU+=Fk?9@E#DDS;K|GQe55>7uRX9#zK|&yMUU+dk=pDx8Qs
z-^U>nvOH4v{f3F2B-diPc?J|H75AKnwuI#wx0PO!2xO`FCYl-PNQoZp8kyr4e!ALMg;&NTB#}#v}l2@zNe^AB2TZ`L~z4L
zg~cfIFMM1>W=YcWAo2cHNd-{%@0TLGe_0tr<`4}VTRbH9l|z~}iV2zJ0-v(zY+cHf
z4J1FxGa5{XZXBNpK}8dDPpE+BHc#xMqB099)46>!h1?Sv)T=;0Rq3R5Mv=Tj
zErK(#RlDY`cI%v3MV;VlcPy#3+tCf}<({M>p;MgaOdC{d5u)Dax8+9VHy
z9F>u)uvakXL-J4Pd{;#t>zN`*^<Q9mEx^gC
zWWG~PrGgdNt4L@y81wM
z(yMT&6#NJW@ez}4CGZB)S-^S5@Lst{t<2fkd7=PXs)tkb(eR@Cp3&#J9n%7|#nbAH
zd(ASEl8H;5QE;q^Mn+{fOBMPjnRz0#DUPyZWATYzBBu?Cr+W$I`))suO|QF=j_#`_
zCEcgtSU!Z8plVZmIcXeHq|dh9Ff+?!vsMCzE8NttFu*^LTOF?=3nIuOoLY4;-CCvF
zxdY|tps_*32AQnY%)+7wl(oykr{BJPJ8MG&>P_+S_N^j~IkU%Kp|+6FFT-JY7A-0W
zL=?(l4de5;{`)=vECD6}m%g_*(s@{U)P)mo?(Hihz;;!F8X$Eh|LJ55G2eV%6f0&#
zFhS3e@nyXt(#zDqKzzy?DMiuT6*|k>>q$(hBr`JU*oBtqBtn*ty4oeO3eN`mC?UBK
z;(=~)kAeA38NY8Kn)vbYkkv`DSV%*EPUq;$r+j!xVw(F1x}l0R5W0|jTjtn8W@%cu
zqo>ir`!tmD{;D4UjNoCLmRF$pE*9m3hQ|ckaCsa{QE~680(K6Kf!OwTu+Q
z8of=OI7jteT4+X#CG&h)L#p#;S$W~T`UTyUz`zA67zpkr)_*?c_*UvlB+Mp;6^P>lMD2}ZJhJ=l;}*uYKyGz?NK8jc+_a{%GoSdE4vl}sXxzLP&>4j4D12j2maxh`_tH!^_n}%?S9#
z9Q=n?^S}FO1o&>7HrThk11>(wpbp^2Ij65Sf(fRC83dzeLV&p~u1S}_q=n8mwwX4c
zAlKIZA+sr18NOp7p_^Ia65y4UZ?LEY7l(x^$z^>d1+4qC5hS6Nr97tecg&b*@<76T
z`^f+lK?crO8x$N}I7)O{4
z+H@tNbbkvJcHpz8n0C0ng4BN@7?fn-{oeu6*Ue_lDF$pWD3|}-B4&^LIEsOi$?`5S
zbxZ0IOV#s#ho>q_I6#5n<}KVqM^|U!>n-)<+(hV%gJrLrlQ+lQ3VW
zfYKo+ViXn+aB=ha!L?MPyK`pQ3nVg0iJ!|qy!nBS`iHrN<$vTilM8r8K%bh2yxEBT
zdw2d#xq#GxXN?632$78^mrlJq$EP`2
zuF0#B%=AN4zKgU(A!$D3Z-yC%)|dlyZHy$AAcJmxK{LW6CaIKMG#^}2>s8lIUj4JB
z_vgOg5^4XUlD3S=mYIg;9m@;y=umt;4PL8~>HaSNS24l8c<}=0^

hZN;D- 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

`&Cj0o_(?<8*Qy?+0OU9$t-i?O4# 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

X=q8yf`0PTPn1hu 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 - - - - - - - - - - - - - - - Created with Snapgroup #1any character|+group #2digitgroup #3One of:+-digit-One of:+-digit.group #4digit-digit \ No newline at end of file diff --git a/src/mock/_mocked.js b/src/mock/_mocked.js index d4cb6c71..896c0bdb 100644 --- a/src/mock/_mocked.js +++ b/src/mock/_mocked.js @@ -1,11 +1,16 @@ // 集中管理 mocked 的 url - -const _mocked = { +const mapper = new Map(); +const _mocked = Object.assign([], { + $genKey(val) { + return JSON.stringify(val); + }, $set(value) { - this[value.rurl + value.rtype.toLowerCase()] = value; + const key = this.$genKey({ url: value.rurl, type: value.rtype }); + mapper.set(key, value); + this.push(value); }, $delete(key) { - delete this[key]; + mapper.delete(key); }, -}; +}); export { _mocked }; diff --git a/src/mock/mock.js b/src/mock/mock.js index 617c5600..edc8066f 100644 --- a/src/mock/mock.js +++ b/src/mock/mock.js @@ -2,8 +2,6 @@ import Handler from './handler.js'; import { _mocked } from './_mocked.js'; import { XHR } from './xhr/index.js'; -const window = globalThis.window || {}; - export function mock(...args) { let rurl; let rtype = 'get'; @@ -17,17 +15,16 @@ export function mock(...args) { // 2 和 3 switch 穿透 case 2: // Mock.mock(rurl, template) + XHR.mock(); [rurl, template] = args; break; case 3: - // Mock.mock(rurl,rtype, template) + XHR.mock(); + // Mock.mock(rurl, rtype, template) [rurl, rtype, template] = args; break; } - // 拦截 XHR - if (window.XMLHttpRequest !== XHR) window.XMLHttpRequest = XHR; - _mocked.$set({ rurl, rtype, diff --git a/src/mock/random/color.js b/src/mock/random/color.js index 9aa03aff..35bc590e 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -117,9 +117,9 @@ function rgba() { // hsl(300,80%,90%) function hsl() { const hsv = _goldenRatioColor(); - const num = hsv.hsl() + const num = hsv.hsl(); // 防止小数导致判断错误 - num.color[0] = Math.floor(num.color[0]) + num.color[0] = Math.floor(num.color[0]); return num.string(); } export { color, hex, rgb, rgba, hsl, _goldenRatioColor }; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index 6fdfdeae..f01ac55c 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -3,7 +3,7 @@ */ import { shuffle as _shuffle, capitalize as _capitalize, sampleSize, random, sample } from 'lodash-es'; -const capitalize = (info = 'undefined') => _capitalize(info) +const capitalize = (info = 'undefined') => _capitalize(info); const upper = function (str) { return (str + '').toUpperCase(); }; @@ -28,7 +28,7 @@ const pick = function (arr, ...args) { [min, max] = args; return sampleSize(arr, random(min, max)); default: - return sample([arr, ...args]) + return sample([arr, ...args]); } }; /* @@ -42,7 +42,7 @@ const shuffle = function (arr, min, max) { case 1: return result; case 2: - return result.slice(0, min) + return result.slice(0, min); /* falls through */ case 3: return result.slice(min, max); diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 2c8c7f6d..9066af84 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -57,8 +57,9 @@ function image(...args) { background = (background || hex()).replace(/^#/, ''); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello - return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${format ? '.' + format : '' - }${text ? '&text=' + text : ''}`; + return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ + format ? '.' + format : '' + }${text ? '&text=' + text : ''}`; } /* 生成一段随机的 Base64 图片编码。 @@ -85,7 +86,7 @@ function dataImage(size, text) { PS:node-canvas 的安装过程实在是太繁琐了,所以不放入 package.json 的 dependencies。 */ - return 'data:image/png;base64,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didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgW+B//a1ZE6945QgAAAABJRU5ErkJggg==' + return 'data:image/png;base64,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didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgWENDgwzM6AQK9AgLa6293AgSCBQQ0+PCMToBAr4CA9vrbnQCBYAEBDT48oxMg0CsgoL3+didAIFhAQIMPz+gECPQKCGivv90JEAgW+B//a1ZE6945QgAAAABJRU5ErkJggg=='; } const ctx = canvas && canvas.getContext && canvas.getContext('2d'); diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js index ebafc745..e6bbfd3d 100644 --- a/src/mock/random/misc/guid.js +++ b/src/mock/random/misc/guid.js @@ -31,5 +31,5 @@ */ import { v4 as uuid } from 'uuid'; export default function guid() { - return uuid() + return uuid(); } diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index aae66dae..a6dcdb3f 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -5,7 +5,7 @@ import { capitalize } from '../helper.js'; function sentence(min = 12, max = 18) { switch (arguments.length) { case 1: - max = min + max = min; } const len = random(min, max); const string = times(len, () => word()).join(' '); @@ -16,7 +16,7 @@ function sentence(min = 12, max = 18) { function word(min = 3, max = 10) { switch (arguments.length) { case 1: - max = min + max = min; } const len = random(min, max); return times(len, () => character('lower')).join(''); @@ -26,7 +26,7 @@ function word(min = 3, max = 10) { function paragraph(min = 3, max = 7) { switch (arguments.length) { case 1: - max = min + max = min; } const len = random(min, max); return times(len, () => sentence()).join('\n'); @@ -36,9 +36,11 @@ function paragraph(min = 3, max = 7) { function title(min = 3, max = 7) { switch (arguments.length) { case 1: - max = min + max = min; } const len = random(min, max); - return times(len, () => word(1, 1)).join('').toUpperCase(); + return times(len, () => word(1, 1)) + .join('') + .toUpperCase(); } export { word, paragraph, sentence, title }; diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index 734227ea..8dd83678 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -25,7 +25,9 @@ function toJSONSchema(template, name, path = [] /* Internal Use Only */) { result.items = template.map((value, index) => toJSONSchema(value, index, result.path)); break; case 'object': - result.properties = [...Object.entries(template)].map(([name, value]) => toJSONSchema(value, name, result.path)); + result.properties = [...Object.entries(template)].map(([name, value]) => + toJSONSchema(value, name, result.path), + ); break; } diff --git a/src/mock/xhr/ajax-tools.js b/src/mock/xhr/ajax-tools.js index 9ed0fbd5..57f9c4b1 100644 --- a/src/mock/xhr/ajax-tools.js +++ b/src/mock/xhr/ajax-tools.js @@ -5,11 +5,11 @@ import { _mocked } from '../_mocked.js'; // 查找与请求参数匹配的数据模板:URL,Type function find({ url, type }) { type = type.toLowerCase(); - for (const sUrlType in _mocked) { - const item = _mocked[sUrlType]; + + for (const item of _mocked) { const { rurl, rtype } = item; if (match(rurl, url) && match(rtype, type)) { - // console.log('[mock]', url, '>', item.rurl) + console.log('[mock]', url, '>', item.rurl); return item; } } diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index 93c49edc..a6779c1a 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1,9 +1,25 @@ // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 // import { mockFetch } from './fetch/fetch.js'; -typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 + import { MockXMLHttpRequest } from './XMLHttpRequest/xhr.js'; -export const XHR = function () { - return new MockXMLHttpRequest(...arguments) -} -export { MockXMLHttpRequest } +export const XHR = Object.assign( + function () { + return new MockXMLHttpRequest(...arguments); + }, + { + setup(config) { + // TODO + }, + mock() { + typeof globalThis.window !== 'undefined' && mockFetch(); // 浏览器直接使用即可 + const window = globalThis.window || {}; + // 拦截 XHR + if (window.XMLHttpRequest !== XHR) { + console.log('XHR 拦截'); + window.XMLHttpRequest = XHR; + } + }, + }, +); +export { MockXMLHttpRequest }; diff --git a/test/package.json b/test/package.json deleted file mode 100644 index b26a3b84..00000000 --- a/test/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "test", - "dependencies": { - "chai": "^1.10.0" - } -} diff --git a/test/request.js b/test/request.js deleted file mode 100644 index 1946ced5..00000000 --- a/test/request.js +++ /dev/null @@ -1,435 +0,0 @@ -/* global console, require, chai, describe, before, it */ -// 数据占位符定义(Data Placeholder Definition,DPD) -import { it, describe, expect, before } from 'vitest' -import Mock from '../src/mock' -import $ from 'jquery' -import { each } from 'lodash-es' -describe('Request', function() { - - function stringify(json) { - return JSON.stringify(json /*, null, 4*/ ) - } - - describe('jQuery.ajax()', function() { - it('', function(done) { - var that = this - var url = Math.random() - $.ajax({ - url: url, - dataType: 'json' - }).done(function( /*data, textStatus, jqXHR*/ ) { - // 不会进入 - }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) { - // 浏览器 || PhantomJS - expect([404, 0]).to.include(jqXHR.status) - that.test.title += url + ' => ' + jqXHR.status - }).always(function() { - done() - }) - }) - }) - describe('jQuery.getScript()', function() { - it('', function(done) { - var that = this - var url = './materiels/noop.js' - $.getScript(url, function(script, textStatus, jqXHR) { - expect(script).to.be.ok - that.test.title += url + ' => ' + jqXHR.status + ' ' + textStatus - done() - }) - }) - }) - describe('jQuery.load()', function() { - it('', function(done) { - var that = this - var url = './materiels/noop.html' - $('

').load(url, function(responseText /*, textStatus, jqXHR*/ ) { - expect(responseText).to.be.ok - that.test.title += url + ' => ' + responseText - done() - }) - }) - }) - describe('jQuery.ajax() XHR Fields', function() { - it('', function(done) { - var that = this - var url = Math.random() - var xhr - $.ajax({ - xhr: function() { - xhr = $.ajaxSettings.xhr() - return xhr - }, - url: url, - dataType: 'json', - xhrFields: { - timeout: 123, - withCredentials: true - } - }).done(function( /*data, textStatus, jqXHR*/ ) { - // 不会进入 - }).fail(function(jqXHR /*, textStatus, errorThrown*/ ) { - // 浏览器 || PhantomJS - expect([404, 0]).to.include(jqXHR.status) - that.test.title += url + ' => ' + jqXHR.status - expect(xhr.timeout).to.be.equal(123) - expect(xhr.withCredentials).to.be.equal(true) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, template )', function() { - it('', function(done) { - var that = this - var url = 'rurl_template.json' - - Mock.mock(/rurl_template.json/, { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - - Mock.setup({ - // timeout: 100, - timeout: '10-50', - }) - $.ajax({ - url: url, - dataType: 'json' - }).done(function(data /*, textStatus, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) )', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) ) + GET + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url + '?foo=1') - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, function(options) ) + POST + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_function.json' - - Mock.mock(/rurl_function\.json/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('POST') - expect(options.body).to.be.equal('foo=1') - return Mock.mock({ - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL' - }] - }) - }) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += url + ' => ' + stringify(data) - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - }) - }).fail(function(jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown) - }).always(function() { - done() - }) - }) - }) - - describe('Mock.mock( rurl, rtype, template )', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_template.json' - var count = 0 - - Mock.mock(/rurl_rtype_template\.json/, 'get', { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL', - type: 'get' - }] - }) - Mock.mock(/rurl_rtype_template\.json/, 'post', { - 'list|1-10': [{ - 'id|+1': 1, - 'email': '@EMAIL', - type: 'post' - }] - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) + ' ' - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - expect(item).to.have.property('type').equal('get') - }) - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) + ' ' - expect(data).to.have.property('list') - .that.be.an('array').with.length.within(1, 10) - _.each(data.list, function(item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1) - expect(item).to.have.property('type').equal('post') - }) - }).done(success).always(complete) - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 2) done() - } - - }) - }) - - describe('Mock.mock( rurl, rtype, function(options) )', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_function.json' - var count = 0 - - Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return { - type: 'get' - } - }) - Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(['POST', 'PUT']).to.include(options.type) - expect(options.body).to.be.equal(null) - return { - type: options.type.toLowerCase() - } - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'get') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'post') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'put', - dataType: 'json' - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'PUT ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'put') - }).done(success).always(complete) - - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 3) done() - } - - }) - }) - describe('Mock.mock( rurl, rtype, function(options) ) + data', function() { - it('', function(done) { - var that = this - var url = 'rurl_rtype_function.json' - var count = 0 - - Mock.mock(/rurl_rtype_function\.json/, /get/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url + '?foo=1') - expect(options.type).to.be.equal('GET') - expect(options.body).to.be.equal(null) - return { - type: 'get' - } - }) - Mock.mock(/rurl_rtype_function\.json/, /post|put/, function(options) { - expect(options).to.not.equal(undefined) - expect(options.url).to.be.equal(url) - expect(['POST', 'PUT']).to.include(options.type) - expect(options.body).to.be.equal('foo=1') - return { - type: options.type.toLowerCase() - } - }) - - $.ajax({ - url: url, - type: 'get', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'GET ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'get') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'post', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'POST ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'post') - }).done(success).always(complete) - - $.ajax({ - url: url, - type: 'put', - dataType: 'json', - data: { - foo: 1 - } - }).done(function(data /*, status, jqXHR*/ ) { - that.test.title += 'PUT ' + url + ' => ' + stringify(data) - expect(data).to.have.property('type', 'put') - }).done(success).always(complete) - - - function success( /*data*/ ) { - count++ - } - - function complete() { - if (count === 3) done() - } - - }) - }) - describe('#105 addEventListener', function() { - it('addEventListene => addEventListener', function(done) { - var xhr = new Mock.XHR() - expect(xhr.addEventListener).to.not.equal(undefined) - expect(xhr.addEventListene).to.equal(undefined) - done() - }) - }) -}) \ No newline at end of file diff --git a/test/request.test.js b/test/request.test.js new file mode 100644 index 00000000..df9e3667 --- /dev/null +++ b/test/request.test.js @@ -0,0 +1,479 @@ +// @vitest-environment happy-dom +// 数据占位符定义(Data Placeholder Definition,DPD) +import { it, describe, expect, before } from 'vitest'; +import Mock from '../src/mock'; +import $ from 'jquery'; +describe('Request', function () { + const donePolyfill = (fn) => { + return () => new Promise((res) => fn(res)); + }; + describe('jQuery.ajax()', function () { + it( + 'Math.random()', + donePolyfill(function (done) { + var url = Math.random(); + $.ajax({ + url: url, + dataType: 'json', + }) + .done(function (/*data, textStatus, jqXHR*/) { + // 不会进入 + }) + .fail(function (jqXHR /*, textStatus, errorThrown*/) { + // 浏览器 || PhantomJS + expect([404, 0]).to.include(jqXHR.status); + }) + .always(function () { + done(); + }); + }), + ); + }); + describe('jQuery.getScript()', function () { + it( + './materiels/noop.js', + donePolyfill(function (done) { + var url = './materiels/noop.js'; + $.getScript(url, function (script, textStatus, jqXHR) { + expect(script).to.be.ok; + done(); + }); + }), + ); + }); + describe('jQuery.load()', function () { + it( + './materiels/noop.html', + donePolyfill(function (done) { + var url = './materiels/noop.html'; + $('
').load(url, function (responseText /*, textStatus, jqXHR*/) { + expect(responseText).to.be.ok; + done(); + }); + }), + ); + }); + describe('jQuery.ajax() XHR Fields', function () { + it( + 'Math.random()', + donePolyfill(function (done) { + var that = this; + var url = Math.random(); + var xhr; + $.ajax({ + xhr: function () { + xhr = $.ajaxSettings.xhr(); + return xhr; + }, + url: url, + dataType: 'json', + xhrFields: { + timeout: 123, + withCredentials: true, + }, + }) + .done(function (/*data, textStatus, jqXHR*/) { + // 不会进入 + }) + .fail(function (jqXHR /*, textStatus, errorThrown*/) { + // 浏览器 || PhantomJS + expect([404, 0]).to.include(jqXHR.status); + expect(xhr.timeout).to.be.equal(123); + expect(xhr.withCredentials).to.be.equal(true); + }) + .always(function () { + done(); + }); + }), + ); + }); + + describe('Mock.mock( rurl, template )', function () { + it('rurl_template.json', async function (done) { + var url = 'rurl_template.json'; + + Mock.mock(/rurl_template.json/, { + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + }, + ], + }); + + Mock.setup({ + // timeout: 100, + timeout: '10-50', + }); + return fetch(url) + .then((res) => res.json()) + .then(function (data /*, textStatus, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + }); + }); + }); + }); + + describe('Mock.mock( rurl, function(options) )', function () { + it( + 'rurl_function.json', + donePolyfill(function (done) { + var that = this; + var url = 'rurl_function.json'; + + Mock.mock(/rurl_function\.json/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url); + expect(options.type).to.be.equal('GET'); + expect(options.body).to.be.equal(null); + return Mock.mock({ + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + }, + ], + }); + }); + + $.ajax({ + url: url, + dataType: 'json', + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + }); + }) + .fail(function (jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown); + }) + .always(function () { + done(); + }); + }), + ); + }); + + describe('Mock.mock( rurl, function(options) ) + GET + data', function () { + it( + 'rurl_function.json', + donePolyfill(function (done) { + var that = this; + var url = 'rurl_function.json'; + + Mock.mock(/rurl_function\.json/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url + '?foo=1'); + expect(options.type).to.be.equal('GET'); + expect(options.body).to.be.equal(null); + return Mock.mock({ + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + }, + ], + }); + }); + + $.ajax({ + url: url, + dataType: 'json', + data: { + foo: 1, + }, + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + }); + }) + .fail(function (jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown); + }) + .always(function () { + done(); + }); + }), + ); + }); + + describe('Mock.mock( rurl, function(options) ) + POST + data', function () { + it( + 'rurl_function.json', + donePolyfill(function (done) { + var url = 'rurl_function.json'; + + Mock.mock(/rurl_function\.json/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url); + expect(options.type).to.be.equal('POST'); + expect(options.body).to.be.equal('foo=1'); + return Mock.mock({ + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + }, + ], + }); + }); + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + data: { + foo: 1, + }, + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + }); + }) + .fail(function (jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown); + }) + .always(function () { + done(); + }); + }), + ); + }); + + describe('Mock.mock( rurl, rtype, template )', function () { + it( + 'rurl_rtype_template.json', + donePolyfill(function (done) { + var that = this; + var url = 'rurl_rtype_template.json'; + var count = 0; + + Mock.mock(/rurl_rtype_template\.json/, 'get', { + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + type: 'get', + }, + ], + }); + Mock.mock(/rurl_rtype_template\.json/, 'post', { + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + type: 'post', + }, + ], + }); + + $.ajax({ + url: url, + type: 'get', + dataType: 'json', + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + expect(item).to.have.property('type').equal('get'); + }); + }) + .done(success) + .always(complete); + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + expect(item).to.have.property('type').equal('post'); + }); + }) + .done(success) + .always(complete); + + function success(/*data*/) { + count++; + } + + function complete() { + if (count === 2) done(); + } + }), + ); + }); + + describe('Mock.mock( rurl, rtype, function(options) )', function () { + it( + 'rurl_rtype_function.json', + donePolyfill(function (done) { + var that = this; + var url = 'rurl_rtype_function.json'; + var count = 0; + + Mock.mock(/rurl_rtype_function\.json/, /get/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url); + expect(options.type).to.be.equal('GET'); + expect(options.body).to.be.equal(null); + return { + type: 'get', + }; + }); + Mock.mock(/rurl_rtype_function\.json/, /post|put/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url); + expect(['POST', 'PUT']).to.include(options.type); + expect(options.body).to.be.equal(null); + return { + type: options.type.toLowerCase(), + }; + }); + + $.ajax({ + url: url, + type: 'get', + dataType: 'json', + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('type', 'get'); + }) + .done(success) + .always(complete); + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('type', 'post'); + }) + .done(success) + .always(complete); + + $.ajax({ + url: url, + type: 'put', + dataType: 'json', + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('type', 'put'); + }) + .done(success) + .always(complete); + + function success(/*data*/) { + count++; + } + + function complete() { + if (count === 3) done(); + } + }), + ); + }); + describe('Mock.mock( rurl, rtype, function(options) ) + data', function () { + it( + '', + donePolyfill(function (done) { + var that = this; + var url = 'rurl_rtype_function.json'; + var count = 0; + + Mock.mock(/rurl_rtype_function\.json/, /get/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url + '?foo=1'); + expect(options.type).to.be.equal('GET'); + expect(options.body).to.be.equal(null); + return { + type: 'get', + }; + }); + Mock.mock(/rurl_rtype_function\.json/, /post|put/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal(url); + expect(['POST', 'PUT']).to.include(options.type); + expect(options.body).to.be.equal('foo=1'); + return { + type: options.type.toLowerCase(), + }; + }); + + $.ajax({ + url: url, + type: 'get', + dataType: 'json', + data: { + foo: 1, + }, + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('type', 'get'); + }) + .done(success) + .always(complete); + + $.ajax({ + url: url, + type: 'post', + dataType: 'json', + data: { + foo: 1, + }, + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('type', 'post'); + }) + .done(success) + .always(complete); + + $.ajax({ + url: url, + type: 'put', + dataType: 'json', + data: { + foo: 1, + }, + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('type', 'put'); + }) + .done(success) + .always(complete); + + function success(/*data*/) { + count++; + } + + function complete() { + if (count === 3) done(); + } + }), + ); + }); + describe('#105 addEventListener', function () { + it( + 'addEventListene => addEventListener', + donePolyfill(function (done) { + var xhr = new Mock.XHR(); + expect(xhr.addEventListener).to.not.equal(undefined); + expect(xhr.addEventListene).to.equal(undefined); + done(); + }), + ); + }); +}); diff --git a/vite.config.ts b/vite.config.ts index 8987a904..068bbd10 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,4 +1,14 @@ export default { + build: { + lib: { + // Could also be a dictionary or array of multiple entry points + entry: './src/mock.js', + name: 'mock', + formats: ['es', 'umd'], + // the proper extensions will be added + fileName: 'mock', + }, + }, test: { } -} \ No newline at end of file +} From 7b00a6606d22a3a61df55bad4dfa6914fe4ddad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 10:12:02 +0800 Subject: [PATCH 51/65] =?UTF-8?q?test(xhr):=20=E5=AE=8C=E6=88=90=20xhr=20?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + package.json | 6 +- pnpm-lock.yaml | 565 ++++++++++++++++++++++++++++- src/mock/_mocked.js | 18 +- src/mock/xhr/XMLHttpRequest/xhr.js | 5 +- src/mock/xhr/ajax-tools.js | 10 +- src/mock/xhr/fetch/fetch.js | 12 +- test/request.test.js | 218 ++++------- vite.config.ts | 3 + 9 files changed, 653 insertions(+), 185 deletions(-) diff --git a/.gitignore b/.gitignore index f06235c4..0e75fe55 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules dist +coverage diff --git a/package.json b/package.json index c01826a5..888fc845 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,9 @@ "module": "./dist/mock.mjs", "scripts": { "test": "vitest", + "coverage": "vitest run --coverage", "build": "vite build", + "prepublish": "pnpm build", "prettier": "prettier --write src/**/*.{ts,json,md,yml,js}" }, "dependencies": { @@ -38,8 +40,10 @@ }, "devDependencies": { "@vitest/browser": "^1.2.2", - "happy-dom": "^13.3.8", + "@vitest/coverage-v8": "^1.2.2", + "blob-polyfill": "^7.0.20220408", "jquery": "~2.1.1", + "jsdom": "^24.0.0", "prettier": "^2.3.2", "vite": "^5.0.12", "vitest": "^1.2.2" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3d7cd6c9..e0eca1d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,12 +19,18 @@ devDependencies: '@vitest/browser': specifier: ^1.2.2 version: 1.2.2(vitest@1.2.2) - happy-dom: - specifier: ^13.3.8 - version: 13.3.8 + '@vitest/coverage-v8': + specifier: ^1.2.2 + version: 1.2.2(vitest@1.2.2) + blob-polyfill: + specifier: ^7.0.20220408 + version: 7.0.20220408 jquery: specifier: ~2.1.1 version: 2.1.1 + jsdom: + specifier: ^24.0.0 + version: 24.0.0 prettier: specifier: ^2.3.2 version: 2.3.2 @@ -33,10 +39,49 @@ devDependencies: version: 5.0.12 vitest: specifier: ^1.2.2 - version: 1.2.2(@vitest/browser@1.2.2)(happy-dom@13.3.8) + version: 1.2.2(@vitest/browser@1.2.2)(jsdom@24.0.0) packages: + /@ampproject/remapping@2.2.1: + resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/parser@7.23.9: + resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.9 + dev: true + + /@babel/types@7.23.9: + resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + + /@bcoe/v8-coverage@0.2.3: + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + dev: true + /@esbuild/aix-ppc64@0.19.12: resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} engines: {node: '>=12'} @@ -244,6 +289,11 @@ packages: dev: true optional: true + /@istanbuljs/schema@0.1.3: + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + dev: true + /@jest/schemas@29.6.3: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -251,10 +301,36 @@ packages: '@sinclair/typebox': 0.27.8 dev: true + /@jridgewell/gen-mapping@0.3.3: + resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.22 + dev: true + + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/set-array@1.1.2: + resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + engines: {node: '>=6.0.0'} + dev: true + /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} dev: true + /@jridgewell/trace-mapping@0.3.22: + resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /@polka/url@1.0.0-next.24: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} dev: true @@ -371,6 +447,10 @@ packages: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: true + /@vitest/browser@1.2.2(vitest@1.2.2): resolution: {integrity: sha512-N8myxNVLbS9AbZ7B2cK33HTGYVzUTDArbMh3hLojOxaj7s7ZrBYYmzs0Q5J2wyDrOgs51p6OUrrzAIb1Z+Ck3A==} peerDependencies: @@ -389,7 +469,30 @@ packages: '@vitest/utils': 1.2.2 magic-string: 0.30.5 sirv: 2.0.4 - vitest: 1.2.2(@vitest/browser@1.2.2)(happy-dom@13.3.8) + vitest: 1.2.2(@vitest/browser@1.2.2)(jsdom@24.0.0) + dev: true + + /@vitest/coverage-v8@1.2.2(vitest@1.2.2): + resolution: {integrity: sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw==} + peerDependencies: + vitest: ^1.0.0 + dependencies: + '@ampproject/remapping': 2.2.1 + '@bcoe/v8-coverage': 0.2.3 + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + magic-string: 0.30.5 + magicast: 0.3.3 + picocolors: 1.0.0 + std-env: 3.7.0 + test-exclude: 6.0.0 + v8-to-istanbul: 9.2.0 + vitest: 1.2.2(@vitest/browser@1.2.2)(jsdom@24.0.0) + transitivePeerDependencies: + - supports-color dev: true /@vitest/expect@1.2.2: @@ -442,6 +545,15 @@ packages: hasBin: true dev: true + /agent-base@7.1.0: + resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} + engines: {node: '>= 14'} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} @@ -451,6 +563,25 @@ packages: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: true + + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /blob-polyfill@7.0.20220408: + resolution: {integrity: sha512-oD8Ydw+5lNoqq+en24iuPt1QixdPpe/nUF8azTHnviCZYu9zUC+TwdzIp5orpblJosNlgNbVmmAb//c6d6ImUQ==} + dev: true + + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -503,6 +634,21 @@ packages: color-string: 1.9.1 dev: false + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: true + + /concat-map@0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true + /cross-spawn@7.0.3: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} @@ -512,6 +658,21 @@ packages: which: 2.0.2 dev: true + /cssstyle@4.0.1: + resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} + engines: {node: '>=18'} + dependencies: + rrweb-cssom: 0.6.0 + dev: true + + /data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + dev: true + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} @@ -524,6 +685,10 @@ packages: ms: 2.1.2 dev: true + /decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + dev: true + /deep-eql@4.1.3: resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} engines: {node: '>=6'} @@ -531,6 +696,11 @@ packages: type-detect: 4.0.8 dev: true + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: true + /diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -593,6 +763,19 @@ packages: strip-final-newline: 3.0.0 dev: true + /form-data@4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: true + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -610,13 +793,51 @@ packages: engines: {node: '>=16'} dev: true - /happy-dom@13.3.8: - resolution: {integrity: sha512-RAbq4oYfJNkVan1m1F3jfA4YEyRY0/ASoNvZsNJbuX85jIypidmsz9jQZD7Tqz0VXA2MhAGfcsh5oshwmwNYSg==} - engines: {node: '>=16.0.0'} + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: - entities: 4.5.0 - webidl-conversions: 7.0.0 - whatwg-mimetype: 3.0.0 + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + dependencies: + whatwg-encoding: 3.1.1 + dev: true + + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: true + + /http-proxy-agent@7.0.0: + resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /https-proxy-agent@7.0.2: + resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color dev: true /human-signals@5.0.0: @@ -624,10 +845,32 @@ packages: engines: {node: '>=16.17.0'} dev: true + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + /is-arrayish@0.3.2: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: false + /is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + dev: true + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -637,10 +880,79 @@ packages: resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} dev: true + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + dev: true + + /istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + engines: {node: '>=8'} + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + /jquery@2.1.1: resolution: {integrity: sha1-go/GD1D37lmDNj706wHF9wr0vVs=} dev: true + /jsdom@24.0.0: + resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + cssstyle: 4.0.1 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.0 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.0 + https-proxy-agent: 7.0.2 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.16.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true @@ -663,6 +975,13 @@ packages: get-func-name: 2.0.2 dev: true + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -670,15 +989,48 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /magicast@0.3.3: + resolution: {integrity: sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==} + dependencies: + '@babel/parser': 7.23.9 + '@babel/types': 7.23.9 + source-map-js: 1.0.2 + dev: true + + /make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + dependencies: + semver: 7.5.4 + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.52.0 + dev: true + /mimic-fn@4.0.0: resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} engines: {node: '>=12'} dev: true + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + /mlly@1.5.0: resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==} dependencies: @@ -710,6 +1062,16 @@ packages: path-key: 4.0.0 dev: true + /nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + dev: true + /onetime@6.0.0: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} @@ -724,6 +1086,17 @@ packages: yocto-queue: 1.0.0 dev: true + /parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + dependencies: + entities: 4.5.0 + dev: true + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: true + /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -778,10 +1151,27 @@ packages: react-is: 18.2.0 dev: true + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: true + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} dev: true + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: true + /rollup@4.9.6: resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -805,6 +1195,29 @@ packages: fsevents: 2.3.3 dev: true + /rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + dev: true + + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: 2.2.0 + dev: true + + /semver@7.5.4: + resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -846,6 +1259,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + /stackback@0.0.2: resolution: {integrity: sha1-Gsig2Ug4SNFpXkGLbQMaPDzmjjs=} dev: true @@ -865,6 +1283,26 @@ packages: acorn: 8.11.3 dev: true + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + dev: true + + /test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /tinybench@2.6.0: resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} dev: true @@ -879,11 +1317,33 @@ packages: engines: {node: '>=14.0.0'} dev: true + /to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + dev: true + /totalist@3.0.1: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} dev: true + /tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + + /tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + dependencies: + punycode: 2.3.1 + dev: true + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -893,11 +1353,32 @@ packages: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true + + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true dev: false + /v8-to-istanbul@9.2.0: + resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + engines: {node: '>=10.12.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.22 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: true + /vite-node@1.2.2: resolution: {integrity: sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -954,7 +1435,7 @@ packages: fsevents: 2.3.3 dev: true - /vitest@1.2.2(@vitest/browser@1.2.2)(happy-dom@13.3.8): + /vitest@1.2.2(@vitest/browser@1.2.2)(jsdom@24.0.0): resolution: {integrity: sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true @@ -990,7 +1471,7 @@ packages: chai: 4.4.1 debug: 4.3.4 execa: 8.0.1 - happy-dom: 13.3.8 + jsdom: 24.0.0 local-pkg: 0.5.0 magic-string: 0.30.5 pathe: 1.1.2 @@ -1012,14 +1493,36 @@ packages: - terser dev: true + /w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + dependencies: + xml-name-validator: 5.0.0 + dev: true + /webidl-conversions@7.0.0: resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} engines: {node: '>=12'} dev: true - /whatwg-mimetype@3.0.0: - resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} - engines: {node: '>=12'} + /whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + dependencies: + iconv-lite: 0.6.3 + dev: true + + /whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + dev: true + + /whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 dev: true /which@2.0.2: @@ -1039,6 +1542,36 @@ packages: stackback: 0.0.2 dev: true + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: true + + /ws@8.16.0: + resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + dev: true + + /xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + dev: true + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + /yocto-queue@1.0.0: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} diff --git a/src/mock/_mocked.js b/src/mock/_mocked.js index 896c0bdb..fe0a691e 100644 --- a/src/mock/_mocked.js +++ b/src/mock/_mocked.js @@ -1,16 +1,18 @@ // 集中管理 mocked 的 url -const mapper = new Map(); -const _mocked = Object.assign([], { - $genKey(val) { - return JSON.stringify(val); +let mapper = []; +const _mocked = { + $getAll() { + return mapper; }, $set(value) { - const key = this.$genKey({ url: value.rurl, type: value.rtype }); - mapper.set(key, value); - this.push(value); + value = { url: value.rurl, type: value.rtype, template: value.template }; + mapper.push(value); }, $delete(key) { mapper.delete(key); }, -}); + $clear() { + mapper = []; + }, +}; export { _mocked }; diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 73a3d372..1a292789 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -49,6 +49,7 @@ class MockXMLHttpRequest extends XMLHttpRequest { if (this.$mock) { this.$template = find({ url: this.$url, type: this.$type }); if (this.$template) { + this.$template = { ...this.$template, body }; defineGetAndSet(this); this.dispatchEvent(new Event('loadstart')); setTimeout(this.$done.bind(this), this.timeout || 100); @@ -85,9 +86,9 @@ class MockXMLHttpRequest extends XMLHttpRequest { this.status = 200; this.statusText = HTTP_STATUS_CODES[200]; - const data = convert(this.$template, {}); + const data = convert(this.$template, { url: this.$url, type: this.$type }); this.response = data; - this.responseText = this.response; + this.responseText = typeof this.response === 'string' ? this.response : JSON.stringify(this.response); this.readyState = this.DONE; this.dispatchEvent(new Event('readystatechange')); this.dispatchEvent(new Event('load')); diff --git a/src/mock/xhr/ajax-tools.js b/src/mock/xhr/ajax-tools.js index 57f9c4b1..f3fa60b1 100644 --- a/src/mock/xhr/ajax-tools.js +++ b/src/mock/xhr/ajax-tools.js @@ -6,8 +6,8 @@ import { _mocked } from '../_mocked.js'; function find({ url, type }) { type = type.toLowerCase(); - for (const item of _mocked) { - const { rurl, rtype } = item; + for (const item of _mocked.$getAll()) { + const { url: rurl, type: rtype } = item; if (match(rurl, url) && match(rtype, type)) { console.log('[mock]', url, '>', item.rurl); return item; @@ -28,7 +28,9 @@ function match(expected, actual) { } // 数据模板 => 响应数据 -function convert({ template }, options) { - return isFunction(template) ? template(options) : gen(template); +function convert({ template, body }, options) { + return isFunction(template) + ? template({ ...options, type: options.type.toUpperCase(), body: body ?? null }) + : gen(template); } export { find, convert, match }; diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index aa966bf8..5740f27f 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -19,18 +19,18 @@ import fakeResponse from './src/response.js'; async function fakeFetch(url, options = {}) { if (window.fetch.$mock === true) { // 只有在 $mock 标记为 true 时才进行代理 - const result = find({ + const savedHook = { url, - type: (options.method || 'get').toLowerCase(), - }); + type: options.method || 'get', + }; + const result = find(savedHook); if (result) { - const data = convert(result, {}); - console.warn('mock代理中'); + const data = convert({ ...result, body: options.body }, savedHook); + console.warn('mock | fetch代理中', url); return new fakeResponse(data, options); } } - console.warn('未使用 mockjs'); return realFetch(url, options); } export { fakeFetch, mockFetch }; diff --git a/test/request.test.js b/test/request.test.js index df9e3667..a01c0e26 100644 --- a/test/request.test.js +++ b/test/request.test.js @@ -1,119 +1,43 @@ -// @vitest-environment happy-dom -// 数据占位符定义(Data Placeholder Definition,DPD) -import { it, describe, expect, before } from 'vitest'; +// @vitest-environment jsdom + +import { it, describe, expect, afterEach } from 'vitest'; import Mock from '../src/mock'; +import * as _ from 'lodash-es'; import $ from 'jquery'; +import { Blob } from 'blob-polyfill'; +globalThis.Blob = Blob; describe('Request', function () { const donePolyfill = (fn) => { return () => new Promise((res) => fn(res)); }; - describe('jQuery.ajax()', function () { - it( - 'Math.random()', - donePolyfill(function (done) { - var url = Math.random(); - $.ajax({ - url: url, - dataType: 'json', - }) - .done(function (/*data, textStatus, jqXHR*/) { - // 不会进入 - }) - .fail(function (jqXHR /*, textStatus, errorThrown*/) { - // 浏览器 || PhantomJS - expect([404, 0]).to.include(jqXHR.status); - }) - .always(function () { - done(); - }); - }), - ); - }); - describe('jQuery.getScript()', function () { - it( - './materiels/noop.js', - donePolyfill(function (done) { - var url = './materiels/noop.js'; - $.getScript(url, function (script, textStatus, jqXHR) { - expect(script).to.be.ok; - done(); - }); - }), - ); - }); - describe('jQuery.load()', function () { - it( - './materiels/noop.html', - donePolyfill(function (done) { - var url = './materiels/noop.html'; - $('
').load(url, function (responseText /*, textStatus, jqXHR*/) { - expect(responseText).to.be.ok; - done(); - }); - }), - ); - }); - describe('jQuery.ajax() XHR Fields', function () { - it( - 'Math.random()', - donePolyfill(function (done) { - var that = this; - var url = Math.random(); - var xhr; - $.ajax({ - xhr: function () { - xhr = $.ajaxSettings.xhr(); - return xhr; - }, - url: url, - dataType: 'json', - xhrFields: { - timeout: 123, - withCredentials: true, - }, - }) - .done(function (/*data, textStatus, jqXHR*/) { - // 不会进入 - }) - .fail(function (jqXHR /*, textStatus, errorThrown*/) { - // 浏览器 || PhantomJS - expect([404, 0]).to.include(jqXHR.status); - expect(xhr.timeout).to.be.equal(123); - expect(xhr.withCredentials).to.be.equal(true); - }) - .always(function () { - done(); - }); - }), - ); - }); - describe('Mock.mock( rurl, template )', function () { - it('rurl_template.json', async function (done) { - var url = 'rurl_template.json'; + afterEach(() => { + Mock._mocked.$clear(); + }); + it('Mock.mock( rurl, template )', async function (done) { + const url = 'rurl_template.json'; - Mock.mock(/rurl_template.json/, { - 'list|1-10': [ - { - 'id|+1': 1, - email: '@EMAIL', - }, - ], - }); + Mock.mock(/rurl_template.json/, { + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + }, + ], + }); - Mock.setup({ - // timeout: 100, - timeout: '10-50', - }); - return fetch(url) - .then((res) => res.json()) - .then(function (data /*, textStatus, jqXHR*/) { - expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); - _.each(data.list, function (item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); - }); - }); + Mock.setup({ + // timeout: 100, + timeout: '10-50', }); + await fetch(url) + .then((res) => res.json()) + .then(function (data /*, textStatus, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); + }); + }); }); describe('Mock.mock( rurl, function(options) )', function () { @@ -127,7 +51,7 @@ describe('Request', function () { expect(options).to.not.equal(undefined); expect(options.url).to.be.equal(url); expect(options.type).to.be.equal('GET'); - expect(options.body).to.be.equal(null); + expect(options.body).toBeFalsy(); return Mock.mock({ 'list|1-10': [ { @@ -149,7 +73,7 @@ describe('Request', function () { }); }) .fail(function (jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown); + // console.log(jqXHR, textStatus, errorThrown); }) .always(function () { done(); @@ -158,50 +82,48 @@ describe('Request', function () { ); }); - describe('Mock.mock( rurl, function(options) ) + GET + data', function () { - it( - 'rurl_function.json', - donePolyfill(function (done) { - var that = this; - var url = 'rurl_function.json'; + it( + 'Mock.mock( rurl, function(options) ) + GET + data', + donePolyfill(function (done) { + var that = this; + var url = 'rurl_function.json'; - Mock.mock(/rurl_function\.json/, function (options) { - expect(options).to.not.equal(undefined); - expect(options.url).to.be.equal(url + '?foo=1'); - expect(options.type).to.be.equal('GET'); - expect(options.body).to.be.equal(null); - return Mock.mock({ - 'list|1-10': [ - { - 'id|+1': 1, - email: '@EMAIL', - }, - ], - }); + Mock.mock(/rurl_function\.json/, function (options) { + expect(options).to.not.equal(undefined); + expect(options.url).to.be.equal('rurl_function.json?foo=1'); + expect(options.type).to.be.equal('GET'); + expect(options.body).to.be.equal(null); + return Mock.mock({ + 'list|1-10': [ + { + 'id|+1': 1, + email: '@EMAIL', + }, + ], }); + }); - $.ajax({ - url: url, - dataType: 'json', - data: { - foo: 1, - }, - }) - .done(function (data /*, status, jqXHR*/) { - expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); - _.each(data.list, function (item, index, list) { - if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); - }); - }) - .fail(function (jqXHR, textStatus, errorThrown) { - console.log(jqXHR, textStatus, errorThrown); - }) - .always(function () { - done(); + $.ajax({ + url: url, + dataType: 'json', + data: { + foo: 1, + }, + }) + .done(function (data /*, status, jqXHR*/) { + expect(data).to.have.property('list').that.be.an('array').with.length.within(1, 10); + _.each(data.list, function (item, index, list) { + if (index > 0) expect(item.id).to.be.equal(list[index - 1].id + 1); }); - }), - ); - }); + }) + .fail(function (jqXHR, textStatus, errorThrown) { + console.log(jqXHR, textStatus, errorThrown); + }) + .always(function () { + done(); + }); + }), + ); describe('Mock.mock( rurl, function(options) ) + POST + data', function () { it( diff --git a/vite.config.ts b/vite.config.ts index 068bbd10..74d0cf0e 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -10,5 +10,8 @@ export default { }, }, test: { + coverage: { + reporter: ['text', 'json', 'html'], + }, } } From e3d75932150ca81ec0fcc9cd59de54da3f0df2ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 12:33:14 +0800 Subject: [PATCH 52/65] =?UTF-8?q?chore(actions):=20=E6=B7=BB=E5=8A=A0githu?= =?UTF-8?q?b=20action?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 31 +++++++++++++++++++++++++++++++ README.md | 32 ++++++++++++++++---------------- package.json | 4 ++-- vite.config.ts | 4 ++-- 4 files changed, 51 insertions(+), 20 deletions(-) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..2b59a3b7 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,31 @@ +# This workflow will do a clean install of node dependencies, build the source code and run tests +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions + +name: CI Pipeline + +# trigger build when pushing, or when creating a pull request +on: [push, pull_request] + +jobs: + build: + # run build on latest ubuntu + runs-on: ubuntu-latest + + steps: + # this will check out the current branch (https://github.com/actions/checkout#Push-a-commit-using-the-built-in-token) + - uses: actions/checkout@v3 + # installing Node + - name: Use Node.js 18.16.0 + uses: actions/setup-node@v3 + with: + # this will use the latest Node 16 version + node-version: 18.16.0 + # install dependencies using clean install to avoid package lock updates + - run: pnpm ci + - run: pnpm coverage + + # Save coverage report in Coveralls + - name: Coveralls + uses: coverallsapp/github-action@master + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 4bbc57e2..4dfe2bd9 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,30 @@ -# Mockjs-esm 项目 +# Mockjs 重构 项目 + +| 2023/2/5 | 测试全部完成 | ## 简介 -Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](http://mockjs.com/) 源代码实在太过久远,本人用了一个月时间将 [Mockjs](http://mockjs.com/) 的大部分模块进行细分与简化,使用 rollup 打包,便于广大开发者学习。 +Mockjs 是 [Mockjs](http://mockjs.com/) 的 ESM 重构版本,由于 [Mockjs](http://mockjs.com/) 源代码实在太过久远,本人用了一个月时间将 [Mockjs](http://mockjs.com/) 的大部分模块进行细分与简化,使用 Vite 打包,便于广大开发者学习。 + +```sh +npm i -D mockjs-ts +``` ## 与 [Mockjs](http://mockjs.com/) 的异同点 ### 同 -1. Mockjs-esm 沿袭 [Mockjs](http://mockjs.com/) 的所有 API,不对任何的 API 进行更改。 -2. 从 1.0.0 版本起对 node 版本也支持使用。 +1. Mockjs-ts 沿袭 [Mockjs](http://mockjs.com/) 的所有 API,不对任何的 API 进行更改。 +2. Mockjs-ts 通过了所有 Mockjs 的测试,API 效果一致 +3. 从 1.0.0 版本起对 node 版本也支持使用。 ### 异 1. 对源代码中的大部分循环遍历逻辑进行了修改。 2. 引用 lodash 和 color 库对源代码中的随机函数和颜色转换等函数进行简化。(原作者当年是没有依靠任何库的,这一点令我很佩服) -3. 源代码打包方式改为 rollup 打包,生成 esm 版本,cjs 版本和 iife 版本。 +3. 源代码打包方式改为 rollup 打包,生成 esm 版本,cjs 版本和 iife 版本。 4. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 -5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) +5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) 6. 删除 XHR 代理时的同步行为,这个行为已经不被浏览器所使用。 7. 使用继承代理的方式而不是覆盖 XHR 请求的方式代理 原生 XHR 行为。 8. 代码通过 eslint 和 prettier 进行风格化管理,加强代码的可读性。 @@ -27,28 +34,21 @@ Mockjs-esm 是 [Mockjs](http://mockjs.com/) 的 esm 版本,由于 [Mockjs](htt 本项目维持与 [Mockjs](http://mockjs.com/) 一致的 API,故原作者的教程是完全可以实现的。 官方网站:http://mockjs.com/ -## 从 Mockjs 迁移到 Mockjs-esm +## 从 Mockjs 迁移到 Mockjs-ts 不用修改任何的 API ,只需要改变 Mockjs 的引用方式即可。 ### iife 即浏览器使用 ```html - + ``` ### esm 即用 import 导入 ```js import Mock from 'Mock'; -import Mock from 'https://cdn.jsdelivr.net/npm/mockjs-esm/dist/mock.esm.js'; -``` - -### cjs 即用 node 导入 - -```js -// npm i mockjs-esm -const Mock = require('mockjs-esm'); +import Mock from 'https://cdn.jsdelivr.net/npm/mockjs-ts/dist/mock.mjs'; ``` ## 新的功能 diff --git a/package.json b/package.json index 888fc845..32c68fd0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "mockjs-esm", + "name": "mockjs-ts", "title": "Mock.js", - "description": "Mockjs 的 esm 版本,基础 api 一致", + "description": "Mockjs 的 typescript 版本,基础 api 一致", "version": "2.0.0", "homepage": "http://mockjs.com/", "keywords": [ diff --git a/vite.config.ts b/vite.config.ts index 74d0cf0e..8afe4543 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -3,7 +3,7 @@ export default { lib: { // Could also be a dictionary or array of multiple entry points entry: './src/mock.js', - name: 'mock', + name: 'Mock', formats: ['es', 'umd'], // the proper extensions will be added fileName: 'mock', @@ -11,7 +11,7 @@ export default { }, test: { coverage: { - reporter: ['text', 'json', 'html'], + reporter: ['text', 'json', 'html', 'clover'], }, } } From dbb3f959e8d1e5c82580ebb5227c4263921c1e34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 12:35:28 +0800 Subject: [PATCH 53/65] =?UTF-8?q?fix(workflow):=20pnpm=20=E7=BC=BA?= =?UTF-8?q?=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2b59a3b7..8f17c62c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,8 @@ jobs: # this will use the latest Node 16 version node-version: 18.16.0 # install dependencies using clean install to avoid package lock updates - - run: pnpm ci + - run: npm i -g pnpm + - run: pnpm i - run: pnpm coverage # Save coverage report in Coveralls From 32a543f8c504a494386987ebd1b8bc7c7c202638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 12:38:05 +0800 Subject: [PATCH 54/65] =?UTF-8?q?fix(coverage):=20=E4=BF=AE=E5=A4=8D=20cov?= =?UTF-8?q?erage=20=E7=9A=84=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8f17c62c..a94cccf9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,3 +30,4 @@ jobs: uses: coverallsapp/github-action@master with: github-token: ${{ secrets.GITHUB_TOKEN }} + file: coverage/clover.xml From 750c69e5a06f8196ad025b300c9c71af3b4fc2b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 12:43:57 +0800 Subject: [PATCH 55/65] =?UTF-8?q?fix(coverage):=20lcov=20=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/test.yml | 3 +-- vite.config.ts | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a94cccf9..e3898708 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -27,7 +27,6 @@ jobs: # Save coverage report in Coveralls - name: Coveralls - uses: coverallsapp/github-action@master + uses: coverallsapp/github-action@v2.2.3 with: github-token: ${{ secrets.GITHUB_TOKEN }} - file: coverage/clover.xml diff --git a/vite.config.ts b/vite.config.ts index 8afe4543..7c1a260c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -11,7 +11,7 @@ export default { }, test: { coverage: { - reporter: ['text', 'json', 'html', 'clover'], + reporter: ['text', 'json', 'html', 'lcov'], }, } } From a1f6dec664afbd8d310d7b997e205d9ea8319783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 13:30:58 +0800 Subject: [PATCH 56/65] =?UTF-8?q?refactor(random):=20=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E5=BC=8F=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- package.json | 4 +- pnpm-lock.yaml | 9 ++ src/mock.js | 51 --------- src/mock.ts | 41 +++++++ src/mock/handle/array.js | 4 +- src/mock/handle/boolean.js | 2 +- src/mock/handle/gen.js | 8 +- src/mock/handle/index.js | 14 +-- src/mock/handle/number.js | 2 +- src/mock/handle/object.js | 8 +- src/mock/handle/placeholder.js | 12 +- src/mock/handle/regexp.js | 2 +- src/mock/handle/string.js | 8 +- src/mock/handler.js | 12 +- src/mock/{mock.js => mock.ts} | 12 +- src/mock/parser.js | 4 +- src/mock/random.ts | 11 ++ src/mock/random/address.js | 6 +- src/mock/random/basic.js | 10 +- src/mock/random/basic/string.js | 4 +- src/mock/random/color.js | 4 +- src/mock/random/date.js | 4 +- src/mock/random/file.js | 4 +- src/mock/random/image.js | 2 +- src/mock/random/index.js | 17 --- src/mock/random/misc.js | 6 +- src/mock/random/misc/id.js | 8 +- src/mock/random/name.js | 2 +- src/mock/random/text.js | 4 +- src/mock/random/text/range.js | 2 +- src/mock/random/text/text-ch.js | 2 +- src/mock/random/text/text_en.js | 4 +- src/mock/random/web.js | 2 +- src/mock/random/web/web_func.js | 8 +- src/mock/regexp/handler.js | 6 +- src/mock/regexp/index.js | 4 +- src/mock/schema/index.js | 2 +- src/mock/schema/schema.js | 6 +- src/mock/util.js | 10 +- src/mock/valid/index.js | 2 +- src/mock/valid/valid.js | 6 +- src/mock/xhr/XMLHttpRequest/xhr.js | 4 +- src/mock/xhr/ajax-tools.js | 6 +- src/mock/xhr/fetch/fetch.js | 4 +- src/mock/xhr/fetch/src/body.js | 6 +- .../xhr/fetch/src/body/exactContentType.js | 2 +- src/mock/xhr/fetch/src/response.js | 8 +- src/mock/xhr/index.js | 4 +- src/registerAll.ts | 20 ++++ tsconfig.json | 104 ++++++++++++++++++ vite.config.ts | 2 +- 52 files changed, 308 insertions(+), 183 deletions(-) delete mode 100644 src/mock.js create mode 100644 src/mock.ts rename src/mock/{mock.js => mock.ts} (67%) create mode 100644 src/mock/random.ts delete mode 100644 src/mock/random/index.js create mode 100644 src/registerAll.ts create mode 100644 tsconfig.json diff --git a/README.md b/README.md index 4dfe2bd9..9e3a6c9b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Mockjs 重构 项目 -| 2023/2/5 | 测试全部完成 | +| ![](https://img.shields.io/badge/更新-2023/2/5-blue?style=flat-square) | [![Coverage Status](https://coveralls.io/repos/github/KonghaYao/Mock/badge.svg?branch=esm)](https://coveralls.io/github/KonghaYao/Mock?branch=esm) | ![npm version](https://img.shields.io/npm/v/mockjs-ts.svg?style=flat-square) | ## 简介 diff --git a/package.json b/package.json index 32c68fd0..6a071686 100644 --- a/package.json +++ b/package.json @@ -26,11 +26,12 @@ }, "main": "./dist/mock.mjs", "module": "./dist/mock.mjs", + "types": "./dist/mock.d.ts", "scripts": { "test": "vitest", "coverage": "vitest run --coverage", "build": "vite build", - "prepublish": "pnpm build", + "prepublish": "tsc && pnpm build", "prettier": "prettier --write src/**/*.{ts,json,md,yml,js}" }, "dependencies": { @@ -45,6 +46,7 @@ "jquery": "~2.1.1", "jsdom": "^24.0.0", "prettier": "^2.3.2", + "typescript": "^5.3.3", "vite": "^5.0.12", "vitest": "^1.2.2" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0eca1d8..dc1c5591 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -34,6 +34,9 @@ devDependencies: prettier: specifier: ^2.3.2 version: 2.3.2 + typescript: + specifier: ^5.3.3 + version: 5.3.3 vite: specifier: ^5.0.12 version: 5.0.12 @@ -1349,6 +1352,12 @@ packages: engines: {node: '>=4'} dev: true + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} + engines: {node: '>=14.17'} + hasBin: true + dev: true + /ufo@1.3.2: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true diff --git a/src/mock.js b/src/mock.js deleted file mode 100644 index afd8c1e3..00000000 --- a/src/mock.js +++ /dev/null @@ -1,51 +0,0 @@ -// global require, module, window -import Handler from './mock/handler.js'; -import * as Util from './mock/util.js'; -import * as Random from './mock/random/index.js'; -import * as RE from './mock/regexp/index.js'; -import { toJSONSchema } from './mock/schema/index.js'; -import { valid } from './mock/valid/index.js'; -import { _mocked } from './mock/_mocked.js'; -import { XHR } from './mock/xhr/index.js'; -import { mock } from './mock/mock'; - -/* ! - Mock - 模拟请求 & 模拟数据 - https://github.com/nuysoft/Mock - 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com - - 此版本为 esm 版本 - KonghaYao 修改于 2021/6/11 - https://github.com/KonghaYao/ -*/ - -const Mock = { - Handler, - Random, - Util, - XHR, - RE, - toJSONSchema, - valid, - heredoc: Util.heredoc, - setup: function (settings) { - return XHR.setup(settings); - }, - _mocked, - mock, -}; - -Mock.version = '1.1.1-es6'; - -/* - * Mock.mock( template ) - * Mock.mock( function() ) - * Mock.mock( rurl, template ) - * Mock.mock( rurl, function(options) ) - * Mock.mock( rurl, rtype, template ) - * Mock.mock( rurl, rtype, function(options) ) - - 根据数据模板生成模拟数据。 -*/ - -export default Mock; diff --git a/src/mock.ts b/src/mock.ts new file mode 100644 index 00000000..9bee76bb --- /dev/null +++ b/src/mock.ts @@ -0,0 +1,41 @@ +// global require, module, window +import Handler from './mock/handler'; +import * as Util from './mock/util'; +import Random from './mock/random'; +import * as RE from './mock/regexp/index'; +import { toJSONSchema } from './mock/schema/index'; +import { valid } from './mock/valid/index'; +import { _mocked } from './mock/_mocked'; +import { XHR } from './mock/xhr/index'; +import { mock } from './mock/mock'; +import { registerAll } from './registerAll'; +registerAll(); +/* ! + Mock - 模拟请求 & 模拟数据 + https://github.com/nuysoft/Mock + 墨智 mozhi.gyy@taobao.com nuysoft@gmail.com + + 此版本为 esm 版本 + KonghaYao 修改于 2021/6/11 + https://github.com/KonghaYao/ +*/ + +const Mock = { + Handler, + Random, + Util, + XHR, + RE, + toJSONSchema, + valid, + heredoc: Util.heredoc, + setup: function (settings: unknown) { + return XHR.setup(settings); + }, + _mocked, + mock, + version: '2.0.0', +}; + +export default Mock; +export { registerRandom } from './mock/random'; diff --git a/src/mock/handle/array.js b/src/mock/handle/array.js index ac1449d5..fd9eee6f 100644 --- a/src/mock/handle/array.js +++ b/src/mock/handle/array.js @@ -1,5 +1,5 @@ -import { pick } from '../random/index.js'; -import { gen } from './gen.js'; +import { pick } from '../random/helper'; +import { gen } from './gen'; export function array({ name, rule: { min, max, parameters, count }, diff --git a/src/mock/handle/boolean.js b/src/mock/handle/boolean.js index 2995c6e6..0c53b59f 100644 --- a/src/mock/handle/boolean.js +++ b/src/mock/handle/boolean.js @@ -1,4 +1,4 @@ -import { bool } from '../random/index.js'; +import { bool } from '../random/basic'; export function boolean({ rule: { max, min, parameters }, template = false }) { // 'prop|multiple': false, 当前值是相反值的概率倍数 // 'prop|probability-probability': false, 当前值与相反值的概率 diff --git a/src/mock/handle/gen.js b/src/mock/handle/gen.js index 4e42dc87..09318be8 100644 --- a/src/mock/handle/gen.js +++ b/src/mock/handle/gen.js @@ -1,7 +1,7 @@ -import Constant from '../constant.js'; -import { type as Type } from '../util.js'; -import { parser as Parser } from '../parser.js'; -import * as typeset from './index.js'; +import Constant from '../constant'; +import { type as Type } from '../util'; +import { parser as Parser } from '../parser'; +import * as typeset from './index'; let GID = 1; // 1.0.1 版本引用了 Constant.GUID 但是那个是常量,后面这个变量需要改变 export function gen(template, name = '', context = {}) { const newContext = { diff --git a/src/mock/handle/index.js b/src/mock/handle/index.js index 3ec2511d..50561e42 100644 --- a/src/mock/handle/index.js +++ b/src/mock/handle/index.js @@ -1,7 +1,7 @@ -export { array } from './array.js'; -export { boolean } from './boolean.js'; -export { function } from './function.js'; -export { number } from './number.js'; -export { object } from './object.js'; -export { regexp } from './regexp.js'; -export { string } from './string.js'; +export { array } from './array'; +export { boolean } from './boolean'; +export { function } from './function'; +export { number } from './number'; +export { object } from './object'; +export { regexp } from './regexp'; +export { string } from './string'; diff --git a/src/mock/handle/number.js b/src/mock/handle/number.js index ca350407..dd1516dd 100644 --- a/src/mock/handle/number.js +++ b/src/mock/handle/number.js @@ -1,4 +1,4 @@ -import { float } from '../random/basic/number.js'; +import { float } from '../random/basic/number'; export function number({ rule: { min, max, dmax, dmin, decimal, range, count, dcount, parameters }, template = '' }) { let result; diff --git a/src/mock/handle/object.js b/src/mock/handle/object.js index fa70c11c..a7f18204 100644 --- a/src/mock/handle/object.js +++ b/src/mock/handle/object.js @@ -1,7 +1,7 @@ -import { shuffle } from '../random/index.js'; -import Constant from '../constant.js'; -import { type as Type } from '../util.js'; -import { gen } from './gen.js'; +import { shuffle } from '../random/helper'; +import Constant from '../constant'; +import { type as Type } from '../util'; +import { gen } from './gen'; export function object({ template, rule: { min, count }, context: { path, templatePath, root, templateRoot } }) { const result = {}; let keys = []; diff --git a/src/mock/handle/placeholder.js b/src/mock/handle/placeholder.js index 3922dc2c..19d6e67e 100644 --- a/src/mock/handle/placeholder.js +++ b/src/mock/handle/placeholder.js @@ -1,9 +1,9 @@ -import Constant from '../constant.js'; -import { type as Type } from '../util.js'; -import { pick } from '../random/index.js'; -import * as Random from '../random/index.js'; -import { gen } from './gen.js'; -import { splitPathToArray, getValueByKeyPath } from './path.js'; +import Constant from '../constant'; +import { type as Type } from '../util'; +import { pick } from '../random/helper'; +import Random from '../random'; +import { gen } from './gen'; +import { splitPathToArray, getValueByKeyPath } from './path'; // 占位符即是字符串函数的意思 function placeholder(Placeholder, obj, templateContext, options) { diff --git a/src/mock/handle/regexp.js b/src/mock/handle/regexp.js index cbaa18f0..1a68cc13 100644 --- a/src/mock/handle/regexp.js +++ b/src/mock/handle/regexp.js @@ -1,4 +1,4 @@ -import * as RE from '../regexp/index.js'; +import * as RE from '../regexp/index'; export function regexp({ rule: { count }, template: { source } }) { // 'name': /regexp/, diff --git a/src/mock/handle/string.js b/src/mock/handle/string.js index 038d41b4..ee6c39ec 100644 --- a/src/mock/handle/string.js +++ b/src/mock/handle/string.js @@ -1,7 +1,7 @@ -import Constant from '../constant.js'; -import { isNumeric } from '../util.js'; -import { string as _string } from '../random/index.js'; -import { placeholder as Placeholder } from './placeholder.js'; +import Constant from '../constant'; +import { isNumeric } from '../util'; +import { string as _string } from '../random/basic'; +import { placeholder as Placeholder } from './placeholder'; export function string(options) { const { rule: { range, count }, diff --git a/src/mock/handler.js b/src/mock/handler.js index abc58b45..b2c6c2aa 100644 --- a/src/mock/handler.js +++ b/src/mock/handler.js @@ -31,9 +31,9 @@ */ -import { extend } from './util.js'; -import * as Random from './random/index.js'; -import { gen } from './handle/gen.js'; +import { extend } from './util'; +import Random from './random'; +import { gen } from './handle/gen'; /* template 属性值(即数据模板) name 属性名 @@ -51,7 +51,7 @@ const Handler = { extend, }; -import { array, object, number, boolean, string as _string, function as _function, regexp } from './handle/index.js'; +import { array, object, number, boolean, string as _string, function as _function, regexp } from './handle/index'; Handler.extend({ array, object, @@ -62,8 +62,8 @@ Handler.extend({ regexp, }); -import { placeholder } from './handle/placeholder.js'; -import { getValueByKeyPath, normalizePath, splitPathToArray } from './handle/path.js'; +import { placeholder } from './handle/placeholder'; +import { getValueByKeyPath, normalizePath, splitPathToArray } from './handle/path'; Handler.extend({ _all: function () { return Object.keys(Random).reduce((col, key) => { diff --git a/src/mock/mock.js b/src/mock/mock.ts similarity index 67% rename from src/mock/mock.js rename to src/mock/mock.ts index edc8066f..ebe8928c 100644 --- a/src/mock/mock.js +++ b/src/mock/mock.ts @@ -1,8 +1,11 @@ -import Handler from './handler.js'; -import { _mocked } from './_mocked.js'; -import { XHR } from './xhr/index.js'; +import Handler from './handler'; +import { _mocked } from './_mocked'; +import { XHR } from './xhr/index'; -export function mock(...args) { +function mock(url: string, type: string, template: any): void; +function mock(url: string, template: any): void; +function mock(template: any): T; +function mock(...args: any[]) { let rurl; let rtype = 'get'; let template; @@ -32,3 +35,4 @@ export function mock(...args) { }); return null; } +export { mock }; diff --git a/src/mock/parser.js b/src/mock/parser.js index 7ae534ee..4623e091 100644 --- a/src/mock/parser.js +++ b/src/mock/parser.js @@ -22,8 +22,8 @@ ``` */ -import Constant from './constant.js'; -import { integer } from './random/index.js'; +import Constant from './constant'; +import { integer } from './random/basic/number'; /* jshint -W041 */ export function parser(name = '') { if (typeof name !== 'string') name = name + ''; diff --git a/src/mock/random.ts b/src/mock/random.ts new file mode 100644 index 00000000..995103cc --- /dev/null +++ b/src/mock/random.ts @@ -0,0 +1,11 @@ +/* + ## Mock.Random + + 工具类,用于生成各种随机数据。 +*/ + +const Random: Record = {}; +export default Random; +export const registerRandom = (name: string, fn: any) => { + Random[name] = fn; +}; diff --git a/src/mock/random/address.js b/src/mock/random/address.js index be386d06..65f0edeb 100644 --- a/src/mock/random/address.js +++ b/src/mock/random/address.js @@ -1,10 +1,10 @@ /* ## Address */ -import DICT from './address_dict.js'; +import DICT from './address_dict'; const REGION = ['东北', '华北', '华东', '华中', '华南', '西南', '西北']; -import { pick } from './helper.js'; -import { natural } from './basic/number.js'; +import { pick } from './helper'; +import { natural } from './basic/number'; // 随机生成一个大区。 function region() { diff --git a/src/mock/random/basic.js b/src/mock/random/basic.js index e7943f53..87c8b1d9 100644 --- a/src/mock/random/basic.js +++ b/src/mock/random/basic.js @@ -1,8 +1,8 @@ /* ## Basics */ -export * from './basic/number.js'; -export * from './basic/boolean.js'; -export * from './basic/character.js'; -export * from './basic/string.js'; -export * from './basic/range.js'; +export * from './basic/number'; +export * from './basic/boolean'; +export * from './basic/character'; +export * from './basic/string'; +export * from './basic/range'; diff --git a/src/mock/random/basic/string.js b/src/mock/random/basic/string.js index 1441f3cc..9a1d025b 100644 --- a/src/mock/random/basic/string.js +++ b/src/mock/random/basic/string.js @@ -1,6 +1,6 @@ -import { natural } from './number.js'; +import { natural } from './number'; import { times } from 'lodash-es'; -import { character } from './character.js'; +import { character } from './character'; const string = function (...args) { let len; let pool; diff --git a/src/mock/random/color.js b/src/mock/random/color.js index 35bc590e..b567973f 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -72,8 +72,8 @@ return color.toUpperCase() */ import Color from 'color'; // 使用 color 这个库进行颜色转换 -import DICT from './color/color_dict.js'; -import { pick } from './helper.js'; +import DICT from './color/color_dict'; +import { pick } from './helper'; import RandomColor from './color/color_dict_cn.json'; let _hue; diff --git a/src/mock/random/date.js b/src/mock/random/date.js index 91a7903d..9f3b9c15 100644 --- a/src/mock/random/date.js +++ b/src/mock/random/date.js @@ -2,10 +2,10 @@ /* ## Date */ -import { integer } from './basic/number.js'; +import { integer } from './basic/number'; // 日期占位符集合。 -import _patternLetters from './date/_patternLetters.js'; +import _patternLetters from './date/_patternLetters'; const _rformat = new RegExp(`(${Object.keys(_patternLetters).join('|')})`, 'g'); diff --git a/src/mock/random/file.js b/src/mock/random/file.js index 80f0c040..01e614b2 100644 --- a/src/mock/random/file.js +++ b/src/mock/random/file.js @@ -1,6 +1,6 @@ // 用于生成 Blob 和 File 型数据的工具 -import { type } from '../util.js'; -import { word } from './text/text_en.js'; +import { type } from '../util'; +import { word } from './text/text_en'; function prepare(anyData) { let prepared; switch (type(anyData)) { diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 9066af84..73c204ac 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -4,7 +4,7 @@ */ import size from './image.json'; -import { pick } from './helper.js'; +import { pick } from './helper'; const { _adSize, _screenSize, _videoSize } = size; /* diff --git a/src/mock/random/index.js b/src/mock/random/index.js deleted file mode 100644 index be9aefb4..00000000 --- a/src/mock/random/index.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - ## Mock.Random - - 工具类,用于生成各种随机数据。 -*/ - -export * from './basic.js'; -export * from './color.js'; -export * from './name.js'; -export * from './helper.js'; -export * from './misc.js'; -export * from './text.js'; -export * from './web.js'; -export * from './date.js'; -export * from './image.js'; -export * from './address.js'; -export * from './file.js'; diff --git a/src/mock/random/misc.js b/src/mock/random/misc.js index 7ceb5a43..5112c0d3 100644 --- a/src/mock/random/misc.js +++ b/src/mock/random/misc.js @@ -2,9 +2,9 @@ ## Miscellaneous */ import { v4 as uuid } from 'uuid'; -import id from './misc/id.js'; -import guid from './misc/guid.js'; -import { natural } from '../random/basic/number'; +import id from './misc/id'; +import guid from './misc/guid'; +import { natural } from './basic/number'; /* 生成一个全局的自增整数。 类似自增主键(auto increment primary key)。 diff --git a/src/mock/random/misc/id.js b/src/mock/random/misc/id.js index 6bff5713..b0a45687 100644 --- a/src/mock/random/misc/id.js +++ b/src/mock/random/misc/id.js @@ -1,7 +1,7 @@ -import DICT from '../address_dict.js'; -import { pick } from '../helper.js'; -import { date } from '../date.js'; -import { string } from '../basic.js'; +import DICT from '../address_dict'; +import { pick } from '../helper'; +import { date } from '../date'; +import { string } from '../basic'; /* 随机生成一个 18 位身份证。 diff --git a/src/mock/random/name.js b/src/mock/random/name.js index 32dd5fce..145c8d75 100644 --- a/src/mock/random/name.js +++ b/src/mock/random/name.js @@ -5,7 +5,7 @@ */ import Name from './name.json'; const { firstName, lastName, cfirstName, clastName } = Name; -import { pick } from './helper.js'; +import { pick } from './helper'; // 随机生成一个常见的英文名。 function first() { diff --git a/src/mock/random/text.js b/src/mock/random/text.js index 28dcc97c..2a9c2a61 100644 --- a/src/mock/random/text.js +++ b/src/mock/random/text.js @@ -3,5 +3,5 @@ http://www.lipsum.com/ */ -export { paragraph, word, sentence, title } from './text/text_en.js'; -export { ctitle, csentence, cparagraph, cword } from './text/text-ch.js'; +export { paragraph, word, sentence, title } from './text/text_en'; +export { ctitle, csentence, cparagraph, cword } from './text/text-ch'; diff --git a/src/mock/random/text/range.js b/src/mock/random/text/range.js index 6dae8a8e..59902c23 100644 --- a/src/mock/random/text/range.js +++ b/src/mock/random/text/range.js @@ -1,4 +1,4 @@ -import { natural } from '../basic.js'; +import { natural } from '../basic'; export default function range(defaultMin, defaultMax, min, max) { return min === undefined ? natural(defaultMin, defaultMax) // (min,max) diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js index 56043e31..c785bf3f 100644 --- a/src/mock/random/text/text-ch.js +++ b/src/mock/random/text/text-ch.js @@ -1,4 +1,4 @@ -import { natural } from '../basic.js'; +import { natural } from '../basic'; import { random, sampleSize, times } from 'lodash-es'; function cparagraph(min = 3, max = 7) { diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index a6dcdb3f..adc931ea 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -1,6 +1,6 @@ import { random, times } from 'lodash-es'; -import { character } from '../basic.js'; -import { capitalize } from '../helper.js'; +import { character } from '../basic'; +import { capitalize } from '../helper'; // 随机生成一个句子,第一个单词的首字母大写。 function sentence(min = 12, max = 18) { switch (arguments.length) { diff --git a/src/mock/random/web.js b/src/mock/random/web.js index 09c28a90..e0e164a4 100644 --- a/src/mock/random/web.js +++ b/src/mock/random/web.js @@ -1,4 +1,4 @@ /* ## Web */ -export { protocol, domain, tld, email, ip, url } from './web/web_func.js'; +export { protocol, domain, tld, email, ip, url } from './web/web_func'; diff --git a/src/mock/random/web/web_func.js b/src/mock/random/web/web_func.js index 845f4299..42d8a2f9 100644 --- a/src/mock/random/web/web_func.js +++ b/src/mock/random/web/web_func.js @@ -1,6 +1,6 @@ -import { pick } from '../helper.js'; -import { word } from '../text.js'; -import { protocols, tlds } from './web_dict.js'; +import { pick } from '../helper'; +import { word } from '../text'; +import { protocols, tlds } from './web_dict'; /* 随机生成一个 URL。 @@ -40,7 +40,7 @@ export function tld() { return pick(tlds); } -import { character, natural } from '../basic.js'; +import { character, natural } from '../basic'; // 随机生成一个邮件地址。 export function email(domain) { diff --git a/src/mock/regexp/handler.js b/src/mock/regexp/handler.js index b02b8901..387f094e 100644 --- a/src/mock/regexp/handler.js +++ b/src/mock/regexp/handler.js @@ -54,8 +54,10 @@ null-character \o NUL 字符 */ -import * as Util from '../util.js'; -import { character, pick, boolean, integer } from '../random/index.js'; +import * as Util from '../util'; + +import { pick } from '../random/helper'; +import { character, boolean, integer } from '../random/basic'; /* */ diff --git a/src/mock/regexp/index.js b/src/mock/regexp/index.js index 32fa6f9a..370aa355 100644 --- a/src/mock/regexp/index.js +++ b/src/mock/regexp/index.js @@ -1,2 +1,2 @@ -export { Parser } from './parser.js'; -export { Handler } from './handler.js'; +export { Parser } from './parser'; +export { Handler } from './handler'; diff --git a/src/mock/schema/index.js b/src/mock/schema/index.js index 22cba3fa..e1c7db43 100644 --- a/src/mock/schema/index.js +++ b/src/mock/schema/index.js @@ -1 +1 @@ -export { toJSONSchema } from './schema.js'; +export { toJSONSchema } from './schema'; diff --git a/src/mock/schema/schema.js b/src/mock/schema/schema.js index 8dd83678..19eac9c0 100644 --- a/src/mock/schema/schema.js +++ b/src/mock/schema/schema.js @@ -5,9 +5,9 @@ > [JSON Schema](http://json-schema.org/) */ -import Constant from '../constant.js'; -import { type } from '../util.js'; -import { parser } from '../parser.js'; +import Constant from '../constant'; +import { type } from '../util'; +import { parser } from '../parser'; function toJSONSchema(template, name, path = [] /* Internal Use Only */) { // type rule properties items diff --git a/src/mock/util.js b/src/mock/util.js index a5d6bf7e..52781a82 100644 --- a/src/mock/util.js +++ b/src/mock/util.js @@ -1,11 +1,11 @@ /* ## Utilities */ -export { type } from './utils/type.js'; -export { extend } from './utils/extend.js'; -export { isObjectOrArray, isNumeric, isString, isObject, isArray, isRegExp, isFunction } from './utils/type.js'; -export { each } from './utils/each.js'; -export { heredoc } from './utils/heredoc.js'; +export { type } from './utils/type'; +export { extend } from './utils/extend'; +export { isObjectOrArray, isNumeric, isString, isObject, isArray, isRegExp, isFunction } from './utils/type'; +export { each } from './utils/each'; +export { heredoc } from './utils/heredoc'; export function keys(obj) { return Object.keys(obj); } diff --git a/src/mock/valid/index.js b/src/mock/valid/index.js index 05c4ecb2..98075d0e 100644 --- a/src/mock/valid/index.js +++ b/src/mock/valid/index.js @@ -1 +1 @@ -export { valid } from './valid.js'; +export { valid } from './valid'; diff --git a/src/mock/valid/valid.js b/src/mock/valid/valid.js index 02f27717..e8f58c63 100644 --- a/src/mock/valid/valid.js +++ b/src/mock/valid/valid.js @@ -23,9 +23,9 @@ [JSON-Schama validator](http://json-schema-validator.herokuapp.com/) [Regexp Demo](http://demos.forbeslindesay.co.uk/regexp/) */ -import Constant from '../constant.js'; -import * as Util from '../util.js'; -import { toJSONSchema } from '../schema/schema.js'; +import Constant from '../constant'; +import * as Util from '../util'; +import { toJSONSchema } from '../schema/schema'; function valid(template, data) { const schema = toJSONSchema(template); diff --git a/src/mock/xhr/XMLHttpRequest/xhr.js b/src/mock/xhr/XMLHttpRequest/xhr.js index 1a292789..936842a9 100644 --- a/src/mock/xhr/XMLHttpRequest/xhr.js +++ b/src/mock/xhr/XMLHttpRequest/xhr.js @@ -1,7 +1,7 @@ // 使用不完全覆盖的方式,使用继承方式继承所有的属性 // 只在 send 方式调用的时候对其进行数据返回 -import { find, convert } from '../ajax-tools.js'; -import HTTP_STATUS_CODES from './constant.js'; +import { find, convert } from '../ajax-tools'; +import HTTP_STATUS_CODES from './constant'; const voidFunc = function () {}; const window = globalThis.window || {}; diff --git a/src/mock/xhr/ajax-tools.js b/src/mock/xhr/ajax-tools.js index f3fa60b1..3ec9abbb 100644 --- a/src/mock/xhr/ajax-tools.js +++ b/src/mock/xhr/ajax-tools.js @@ -1,6 +1,6 @@ -import { type as Type, isFunction } from '../util.js'; -import { gen } from '../handle/gen.js'; // 从模板生成数据 -import { _mocked } from '../_mocked.js'; +import { type as Type, isFunction } from '../util'; +import { gen } from '../handle/gen'; // 从模板生成数据 +import { _mocked } from '../_mocked'; // 查找与请求参数匹配的数据模板:URL,Type function find({ url, type }) { diff --git a/src/mock/xhr/fetch/fetch.js b/src/mock/xhr/fetch/fetch.js index 5740f27f..4be21876 100644 --- a/src/mock/xhr/fetch/fetch.js +++ b/src/mock/xhr/fetch/fetch.js @@ -10,11 +10,11 @@ function mockFetch() { } // 假的 fetch 函数 -import { find, convert } from '../ajax-tools.js'; +import { find, convert } from '../ajax-tools'; // 假的 Response 对象 // import fakeResponse from "./src/response.js"; -import fakeResponse from './src/response.js'; +import fakeResponse from './src/response'; async function fakeFetch(url, options = {}) { if (window.fetch.$mock === true) { diff --git a/src/mock/xhr/fetch/src/body.js b/src/mock/xhr/fetch/src/body.js index 16bfd944..c189cc8b 100644 --- a/src/mock/xhr/fetch/src/body.js +++ b/src/mock/xhr/fetch/src/body.js @@ -4,10 +4,10 @@ * Body interface provides common methods for Request and Response */ -import { isURLSearchParameters } from './utils/is.js'; -import { BODY as INTERNALS } from './INTERNALS.js'; +import { isURLSearchParameters } from './utils/is'; +import { BODY as INTERNALS } from './INTERNALS'; -import { consumeBody } from './body/consumeBody.js'; +import { consumeBody } from './body/consumeBody'; /** * Body mixin * diff --git a/src/mock/xhr/fetch/src/body/exactContentType.js b/src/mock/xhr/fetch/src/body/exactContentType.js index 802875dc..86146093 100644 --- a/src/mock/xhr/fetch/src/body/exactContentType.js +++ b/src/mock/xhr/fetch/src/body/exactContentType.js @@ -1,4 +1,4 @@ -import { isURLSearchParameters } from '../utils/is.js'; +import { isURLSearchParameters } from '../utils/is'; import { BODY as INTERNALS } from '../INTERNALS'; /** * Performs the operation "extract a `Content-Type` value from |object|" as diff --git a/src/mock/xhr/fetch/src/response.js b/src/mock/xhr/fetch/src/response.js index 1f04f471..0a3b3ee2 100644 --- a/src/mock/xhr/fetch/src/response.js +++ b/src/mock/xhr/fetch/src/response.js @@ -4,10 +4,10 @@ * Response class provides content decoding */ -import Body from './body.js'; -import { extractContentType } from './body/exactContentType.js'; -import { isRedirect } from './utils/is-redirect.js'; -import { RESPONSE as INTERNALS } from './INTERNALS.js'; +import Body from './body'; +import { extractContentType } from './body/exactContentType'; +import { isRedirect } from './utils/is-redirect'; +import { RESPONSE as INTERNALS } from './INTERNALS'; const Response = (globalThis.window && globalThis.window.Response) || class Null {}; /** * Response class diff --git a/src/mock/xhr/index.js b/src/mock/xhr/index.js index a6779c1a..acbb0cf3 100644 --- a/src/mock/xhr/index.js +++ b/src/mock/xhr/index.js @@ -1,8 +1,8 @@ // 在 fetch 的代理中只需要进行 fetch 的数据代理即可 // -import { mockFetch } from './fetch/fetch.js'; +import { mockFetch } from './fetch/fetch'; -import { MockXMLHttpRequest } from './XMLHttpRequest/xhr.js'; +import { MockXMLHttpRequest } from './XMLHttpRequest/xhr'; export const XHR = Object.assign( function () { return new MockXMLHttpRequest(...arguments); diff --git a/src/registerAll.ts b/src/registerAll.ts new file mode 100644 index 00000000..8bb460f4 --- /dev/null +++ b/src/registerAll.ts @@ -0,0 +1,20 @@ +import * as a1 from './mock/random/basic'; +import * as a2 from './mock/random/color'; +import * as a3 from './mock/random/name'; +import * as a4 from './mock/random/helper'; +import * as a5 from './mock/random/misc'; +import * as a6 from './mock/random/text'; +import * as a7 from './mock/random/web'; +import * as a8 from './mock/random/date'; +import * as a9 from './mock/random/image'; +import * as a10 from './mock/random/address'; +import * as a11 from './mock/random/file'; +import { registerRandom } from './mock/random'; + +export const registerAll = () => { + Object.entries({ ...a1, ...a2, ...a3, ...a4, ...a5, ...a6, ...a7, ...a8, ...a9, ...a10, ...a11 }).map( + ([name, fn]) => { + registerRandom(name, fn); + }, + ); +}; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..9ba2a68d --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,104 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ + // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ + // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ + // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ + // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ + // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ + + /* Language and Environment */ + "target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "jsx": "preserve", /* Specify what JSX code is generated. */ + // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ + // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ + // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ + // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ + // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ + // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "ESNext" /* Specify what module code is generated. */, + "rootDir": "./src" /* Specify the root folder within your source files. */, + "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, + "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ + // "types": [], /* Specify type package names to be included without being referenced in a source file. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ + // "resolveJsonModule": true, /* Enable importing .json files. */ + // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ + + /* JavaScript Support */ + "allowJs": true /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */, + // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true /* Generate .d.ts files from TypeScript and JavaScript files in your project. */, + // "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "emitDeclarationOnly": true /* Only output d.ts files and not JavaScript files. */, + // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ + // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ + "outDir": "./dist" /* Specify an output folder for all emitted files. */, + // "removeComments": true, /* Disable emitting comments. */ + // "noEmit": true, /* Disable emitting files from a compilation. */ + // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ + // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ + // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ + // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ + // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ + // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ + // "newLine": "crlf", /* Set the newline character for emitting files. */ + // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ + // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ + // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ + // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ + // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ + // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ + + /* Interop Constraints */ + // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ + // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, + // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ + "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, + + /* Type Checking */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ + // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ + // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ + // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ + // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ + // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ + // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ + // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ + // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ + // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ + // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ + // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ + // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ + // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ + // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ + // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ + // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ + + /* Completeness */ + // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ + "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "include": ["src"] +} diff --git a/vite.config.ts b/vite.config.ts index 7c1a260c..60d02055 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -2,7 +2,7 @@ export default { build: { lib: { // Could also be a dictionary or array of multiple entry points - entry: './src/mock.js', + entry: './src/mock.ts', name: 'Mock', formats: ['es', 'umd'], // the proper extensions will be added From 1f17c9e645c23dd860bf0aa17d7af65abbf3aae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Mon, 5 Feb 2024 13:33:29 +0800 Subject: [PATCH 57/65] chore(version): 2.1.0 --- README.md | 13 +++++++------ package.json | 4 ++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 9e3a6c9b..b35125fe 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,13 @@ npm i -D mockjs-ts 1. 对源代码中的大部分循环遍历逻辑进行了修改。 2. 引用 lodash 和 color 库对源代码中的随机函数和颜色转换等函数进行简化。(原作者当年是没有依靠任何库的,这一点令我很佩服) -3. 源代码打包方式改为 rollup 打包,生成 esm 版本,cjs 版本和 iife 版本。 -4. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 -5. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) -6. 删除 XHR 代理时的同步行为,这个行为已经不被浏览器所使用。 -7. 使用继承代理的方式而不是覆盖 XHR 请求的方式代理 原生 XHR 行为。 -8. 代码通过 eslint 和 prettier 进行风格化管理,加强代码的可读性。 +3. 支持通过 `registerRandom` 方法注册自定义随机函数。 +4. 源代码打包方式改为 rollup 打包,生成 esm 版本,cjs 版本和 iife 版本。 +5. 扩充 [Mockjs](http://mockjs.com/) 的功能,比如提供 timestamp 模板等。 +6. 更改随机颜色为从 [中国色](http://zhongguose.com) 中抽取一种颜色。 (中国色 数据来自于 http://zhongguose.com) +7. 删除 XHR 代理时的同步行为,这个行为已经不被浏览器所使用。 +8. 使用继承代理的方式而不是覆盖 XHR 请求的方式代理 原生 XHR 行为。 +9. 代码通过 eslint 和 prettier 进行风格化管理,加强代码的可读性。 ## 教程 diff --git a/package.json b/package.json index 6a071686..790012b5 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-ts", "title": "Mock.js", "description": "Mockjs 的 typescript 版本,基础 api 一致", - "version": "2.0.0", + "version": "2.1.0", "homepage": "http://mockjs.com/", "keywords": [ "mock", @@ -31,7 +31,7 @@ "test": "vitest", "coverage": "vitest run --coverage", "build": "vite build", - "prepublish": "tsc && pnpm build", + "prepublish": " pnpm build && tsc ", "prettier": "prettier --write src/**/*.{ts,json,md,yml,js}" }, "dependencies": { From 2b8eda68cce3d4a0a83366f9a9a432af25a6ccc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=9F=E5=A4=8F=E5=B0=A7?= <3446798488@qq.com> Date: Thu, 8 Feb 2024 11:15:38 +0800 Subject: [PATCH 58/65] =?UTF-8?q?fix(array):=20=E4=BF=AE=E5=A4=8D=20array?= =?UTF-8?q?=20=E6=95=B0=E6=8D=AE=E8=BF=87=E5=A4=A7=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 6 +++++- src/mock/handle/array.js | 2 +- vite.config.ts | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 790012b5..03fd8bee 100644 --- a/package.json +++ b/package.json @@ -2,8 +2,12 @@ "name": "mockjs-ts", "title": "Mock.js", "description": "Mockjs 的 typescript 版本,基础 api 一致", - "version": "2.1.0", + "version": "2.2.1", "homepage": "http://mockjs.com/", + "files": [ + "dist", + "src" + ], "keywords": [ "mock", "mockJSON", diff --git a/src/mock/handle/array.js b/src/mock/handle/array.js index fd9eee6f..e2bbdaaf 100644 --- a/src/mock/handle/array.js +++ b/src/mock/handle/array.js @@ -58,7 +58,7 @@ export function array({ template.__order_index += +parameters[2]; } else { // 'data|1-10': [{}] - [...Array(count).keys()].forEach(() => { + [...Array(Math.min(count, 10000)).keys()].forEach(() => { template.forEach((item, index) => { result.push( gen(item, result.length, { diff --git a/vite.config.ts b/vite.config.ts index 60d02055..bdc6421d 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,7 +7,9 @@ export default { formats: ['es', 'umd'], // the proper extensions will be added fileName: 'mock', + }, + sourcemap: true }, test: { coverage: { From f1ce1c98288778eab0dab4b8e481188b5aa06467 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Thu, 14 Mar 2024 09:17:46 +0000 Subject: [PATCH 59/65] refactor: change random base --- package.json | 1 + pnpm-lock.yaml | 32 ++++++++++++++++++++++++++---- src/mock/random/basic/boolean.js | 2 +- src/mock/random/basic/character.js | 2 +- src/mock/random/basic/number.js | 2 +- src/mock/random/basic/range.js | 16 --------------- src/mock/random/helper.js | 5 +++-- src/mock/random/text/text-ch.js | 3 ++- src/mock/random/text/text_en.js | 3 ++- 9 files changed, 39 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 03fd8bee..a27009d0 100644 --- a/package.json +++ b/package.json @@ -40,6 +40,7 @@ }, "dependencies": { "color": "^3.1.3", + "game-random": "^1.0.7", "lodash-es": "^4.17.21", "uuid": "^8.3.2" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc1c5591..9f508008 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,13 +1,12 @@ lockfileVersion: '6.0' -settings: - autoInstallPeers: true - excludeLinksFromLockfile: false - dependencies: color: specifier: ^3.1.3 version: 3.1.3 + game-random: + specifier: ^1.0.7 + version: 1.0.7 lodash-es: specifier: ^4.17.21 version: 4.17.21 @@ -787,6 +786,13 @@ packages: dev: true optional: true + /game-random@1.0.7: + resolution: {integrity: sha512-pc0s4hce3Q10EskYcJs9ooZpFkoUT7qPAWiHvoa62rH42jk6lMCrhQB3HGYaM+8qeMRekoVRHLFnpZUv3iIFNg==} + dependencies: + seedrandom: 3.0.5 + shuffle-seed: 1.1.6 + dev: false + /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true @@ -1213,6 +1219,14 @@ packages: xmlchars: 2.2.0 dev: true + /seedrandom@2.4.4: + resolution: {integrity: sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==} + dev: false + + /seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + dev: false + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -1233,6 +1247,12 @@ packages: engines: {node: '>=8'} dev: true + /shuffle-seed@1.1.6: + resolution: {integrity: sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=} + dependencies: + seedrandom: 2.4.4 + dev: false + /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true @@ -1585,3 +1605,7 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} dev: true + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false diff --git a/src/mock/random/basic/boolean.js b/src/mock/random/basic/boolean.js index 1f48bac0..8df2aace 100644 --- a/src/mock/random/basic/boolean.js +++ b/src/mock/random/basic/boolean.js @@ -1,4 +1,4 @@ -import { random } from 'lodash-es'; +import { random } from 'game-random'; const boolean = function (min, max, cur = false) { // ! cur:boolean 是划分概率的一个启动符号 // if (cur) { diff --git a/src/mock/random/basic/character.js b/src/mock/random/basic/character.js index 02ac9c7a..2d25e142 100644 --- a/src/mock/random/basic/character.js +++ b/src/mock/random/basic/character.js @@ -1,4 +1,4 @@ -import { sample } from 'lodash-es'; +import { sample } from 'game-random'; const pools = { lower: 'abcdefghijklmnopqrstuvwxyz', upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', diff --git a/src/mock/random/basic/number.js b/src/mock/random/basic/number.js index 9cca0dee..1b8b3982 100644 --- a/src/mock/random/basic/number.js +++ b/src/mock/random/basic/number.js @@ -1,4 +1,4 @@ -import { random } from 'lodash-es'; +import { random } from 'game-random'; const isNumber = function (el) { return typeof el === 'number' && !isNaN(el); }; diff --git a/src/mock/random/basic/range.js b/src/mock/random/basic/range.js index 9d3c6d9e..c7abf535 100644 --- a/src/mock/random/basic/range.js +++ b/src/mock/random/basic/range.js @@ -1,17 +1 @@ -// const range = function (...args) { -// // range( stop ) -// let start, stop, step; -// if (arguments.length <= 1) { -// [stop] = args; -// return [...Array(stop).keys()]; -// } - -// // range( start, stop ,step=1) -// // range(10,20,3) = [10,13,16,19] -// [start, stop, step = 1] = args; -// let arrayLength = Math.ceil((stop - start) / step); -// return [...Array(arrayLength).keys()].map((index) => { -// return start + index * step; -// }); -// }; export { range } from 'lodash-es'; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index f01ac55c..48818b78 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -1,8 +1,8 @@ /* ## Helpers */ - -import { shuffle as _shuffle, capitalize as _capitalize, sampleSize, random, sample } from 'lodash-es'; +import { random, sample, sampleSize } from 'game-random'; +import { shuffle as _shuffle, capitalize as _capitalize } from 'lodash-es'; const capitalize = (info = 'undefined') => _capitalize(info); const upper = function (str) { return (str + '').toUpperCase(); @@ -18,6 +18,7 @@ const pick = function (arr, ...args) { let min; let max; let count; + if (arr === undefined) return undefined switch (args.length) { case 0: return sample(arr); diff --git a/src/mock/random/text/text-ch.js b/src/mock/random/text/text-ch.js index c785bf3f..a1eab0fd 100644 --- a/src/mock/random/text/text-ch.js +++ b/src/mock/random/text/text-ch.js @@ -1,5 +1,6 @@ import { natural } from '../basic'; -import { random, sampleSize, times } from 'lodash-es'; +import { random, sampleSize } from 'game-random'; +import { times } from 'lodash-es'; function cparagraph(min = 3, max = 7) { const len = random(min, max); diff --git a/src/mock/random/text/text_en.js b/src/mock/random/text/text_en.js index adc931ea..91eb3022 100644 --- a/src/mock/random/text/text_en.js +++ b/src/mock/random/text/text_en.js @@ -1,4 +1,5 @@ -import { random, times } from 'lodash-es'; +import { random } from 'game-random'; +import { times } from 'lodash-es'; import { character } from '../basic'; import { capitalize } from '../helper'; // 随机生成一个句子,第一个单词的首字母大写。 From 440c0e856dfa9771c1b8928d69e0f524561bfed9 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Thu, 14 Mar 2024 09:48:54 +0000 Subject: [PATCH 60/65] =?UTF-8?q?feat(game-random):=20=E8=BF=81=E7=A7=BB?= =?UTF-8?q?=20game-random?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- packages/game-random/dist.js | 5 + packages/game-random/package.json | 28 + packages/game-random/pnpm-lock.yaml | 788 +++++++++++++++++++++++ packages/game-random/rollup.config.js | 26 + packages/game-random/src/index.ts | 2 + packages/game-random/src/random.ts | 50 ++ packages/game-random/src/sample.ts | 40 ++ packages/game-random/src/shuffle.ts | 51 ++ packages/game-random/test/random.test.js | 70 ++ packages/game-random/test/sample.test.js | 61 ++ packages/game-random/tsconfig.json | 73 +++ pnpm-lock.yaml | 751 +++++++++++++++++++-- pnpm-workspace.yaml | 3 + 14 files changed, 1889 insertions(+), 61 deletions(-) create mode 100644 packages/game-random/dist.js create mode 100644 packages/game-random/package.json create mode 100644 packages/game-random/pnpm-lock.yaml create mode 100644 packages/game-random/rollup.config.js create mode 100644 packages/game-random/src/index.ts create mode 100644 packages/game-random/src/random.ts create mode 100644 packages/game-random/src/sample.ts create mode 100644 packages/game-random/src/shuffle.ts create mode 100644 packages/game-random/test/random.test.js create mode 100644 packages/game-random/test/sample.test.js create mode 100644 packages/game-random/tsconfig.json create mode 100644 pnpm-workspace.yaml diff --git a/package.json b/package.json index a27009d0..e8f71704 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ }, "dependencies": { "color": "^3.1.3", - "game-random": "^1.0.7", + "game-random": "workspace:", "lodash-es": "^4.17.21", "uuid": "^8.3.2" }, diff --git a/packages/game-random/dist.js b/packages/game-random/dist.js new file mode 100644 index 00000000..a43f421e --- /dev/null +++ b/packages/game-random/dist.js @@ -0,0 +1,5 @@ +import { random } from "./dist/index.js"; +import alea from "seedrandom"; +const a = random(0, 100, "2"); +const b = random(0, 100, "3"); +console.log(a, b, alea("3").quick(), alea("2").quick()); diff --git a/packages/game-random/package.json b/packages/game-random/package.json new file mode 100644 index 00000000..6d6f0fbf --- /dev/null +++ b/packages/game-random/package.json @@ -0,0 +1,28 @@ +{ + "name": "game-random", + "version": "1.1.0", + "description": "", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", + "type": "module", + "scripts": { + "test": "vitest", + "build": "tsc && rollup -c", + "dev": "rollup -c -w" + }, + "dependencies": { + "seedrandom": "^3.0.5" + }, + "devDependencies": { + "@babel/core": "^7.17.5", + "@babel/preset-typescript": "^7.16.7", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "^21.0.1", + "@rollup/plugin-multi-entry": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.1.3", + "@rollup/plugin-typescript": "^8.3.0", + "@types/seedrandom": "^3.0.2" + }, + "author": "", + "license": "ISC" +} diff --git a/packages/game-random/pnpm-lock.yaml b/packages/game-random/pnpm-lock.yaml new file mode 100644 index 00000000..c9a790b7 --- /dev/null +++ b/packages/game-random/pnpm-lock.yaml @@ -0,0 +1,788 @@ +lockfileVersion: 5.3 + +specifiers: + '@babel/core': ^7.17.5 + '@babel/preset-typescript': ^7.16.7 + '@rollup/plugin-babel': ^5.3.1 + '@rollup/plugin-commonjs': ^21.0.1 + '@rollup/plugin-multi-entry': ^4.1.0 + '@rollup/plugin-node-resolve': ^13.1.3 + '@rollup/plugin-typescript': ^8.3.0 + '@types/seedrandom': ^3.0.2 + '@types/shuffle-seed': ^1.1.0 + jest-test-tree: ^1.2.1 + seedrandom: ^3.0.5 + shuffle-seed: ^1.1.6 + +dependencies: + seedrandom: 3.0.5 + shuffle-seed: 1.1.6 + +devDependencies: + '@babel/core': 7.17.5 + '@babel/preset-typescript': 7.16.7_@babel+core@7.17.5 + '@rollup/plugin-babel': 5.3.1_@babel+core@7.17.5 + '@rollup/plugin-commonjs': 21.0.1 + '@rollup/plugin-multi-entry': 4.1.0 + '@rollup/plugin-node-resolve': 13.1.3 + '@rollup/plugin-typescript': 8.3.0 + '@types/seedrandom': 3.0.2 + '@types/shuffle-seed': 1.1.0 + jest-test-tree: 1.2.1 + +packages: + + /@ampproject/remapping/2.1.2: + resolution: {integrity: sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/trace-mapping': 0.3.4 + dev: true + + /@babel/code-frame/7.16.7: + resolution: {integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.16.10 + dev: true + + /@babel/compat-data/7.17.0: + resolution: {integrity: sha512-392byTlpGWXMv4FbyWw3sAZ/FrW/DrwqLGXpy0mbyNe9Taqv1mg9yON5/o0cnr8XYCkFTZbC1eV+c+LAROgrng==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.17.5: + resolution: {integrity: sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.1.2 + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.3 + '@babel/helper-compilation-targets': 7.16.7_@babel+core@7.17.5 + '@babel/helper-module-transforms': 7.17.6 + '@babel/helpers': 7.17.2 + '@babel/parser': 7.17.3 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.3 + '@babel/types': 7.17.0 + convert-source-map: 1.8.0 + debug: 4.3.3 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.17.3: + resolution: {integrity: sha512-+R6Dctil/MgUsZsZAkYgK+ADNSZzJRRy0TvY65T71z/CR854xHQ1EweBYXdfT+HNeN7w0cSJJEzgxZMv40pxsg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + + /@babel/helper-annotate-as-pure/7.16.7: + resolution: {integrity: sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-compilation-targets/7.16.7_@babel+core@7.17.5: + resolution: {integrity: sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.17.0 + '@babel/core': 7.17.5 + '@babel/helper-validator-option': 7.16.7 + browserslist: 4.19.3 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin/7.17.6_@babel+core@7.17.5: + resolution: {integrity: sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.16.7 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-member-expression-to-functions': 7.16.7 + '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/helper-replace-supers': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor/7.16.7: + resolution: {integrity: sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-function-name/7.16.7: + resolution: {integrity: sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-get-function-arity': 7.16.7 + '@babel/template': 7.16.7 + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-get-function-arity/7.16.7: + resolution: {integrity: sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-hoist-variables/7.16.7: + resolution: {integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-member-expression-to-functions/7.16.7: + resolution: {integrity: sha512-VtJ/65tYiU/6AbMTDwyoXGPKHgTsfRarivm+YbB5uAzKUyuPjgZSgAFeG87FCigc7KNHu2Pegh1XIT3lXjvz3Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-module-imports/7.16.7: + resolution: {integrity: sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-module-transforms/7.17.6: + resolution: {integrity: sha512-2ULmRdqoOMpdvkbT8jONrZML/XALfzxlb052bldftkicAUy8AxSCkD5trDPQcwHNmolcl7wP6ehNqMlyUw6AaA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-module-imports': 7.16.7 + '@babel/helper-simple-access': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/helper-validator-identifier': 7.16.7 + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.3 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.16.7: + resolution: {integrity: sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-plugin-utils/7.16.7: + resolution: {integrity: sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-replace-supers/7.16.7: + resolution: {integrity: sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-member-expression-to-functions': 7.16.7 + '@babel/helper-optimise-call-expression': 7.16.7 + '@babel/traverse': 7.17.3 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.16.7: + resolution: {integrity: sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-split-export-declaration/7.16.7: + resolution: {integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.17.0 + dev: true + + /@babel/helper-validator-identifier/7.16.7: + resolution: {integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.16.7: + resolution: {integrity: sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.17.2: + resolution: {integrity: sha512-0Qu7RLR1dILozr/6M0xgj+DFPmi6Bnulgm9M8BVa9ZCWxDqlSnqt3cf8IDPB5m45sVXUZ0kuQAgUrdSFFH79fQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.16.7 + '@babel/traverse': 7.17.3 + '@babel/types': 7.17.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.16.10: + resolution: {integrity: sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.17.3: + resolution: {integrity: sha512-7yJPvPV+ESz2IUTPbOL+YkIGyCqOyNIzdguKQuJGnH7bg1WTIifuM21YqokFt/THWh1AkCRn9IgoykTRCBVpzA==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@babel/plugin-syntax-typescript/7.16.7_@babel+core@7.17.5: + resolution: {integrity: sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + dev: true + + /@babel/plugin-transform-typescript/7.16.8_@babel+core@7.17.5: + resolution: {integrity: sha512-bHdQ9k7YpBDO2d0NVfkj51DpQcvwIzIusJ7mEUaMlbZq3Kt/U47j24inXZHQ5MDiYpCs+oZiwnXyKedE8+q7AQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-create-class-features-plugin': 7.17.6_@babel+core@7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/plugin-syntax-typescript': 7.16.7_@babel+core@7.17.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-typescript/7.16.7_@babel+core@7.17.5: + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.16.7 + '@babel/helper-validator-option': 7.16.7 + '@babel/plugin-transform-typescript': 7.16.8_@babel+core@7.17.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/template/7.16.7: + resolution: {integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.7 + '@babel/parser': 7.17.3 + '@babel/types': 7.17.0 + dev: true + + /@babel/traverse/7.17.3: + resolution: {integrity: sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.16.7 + '@babel/generator': 7.17.3 + '@babel/helper-environment-visitor': 7.16.7 + '@babel/helper-function-name': 7.16.7 + '@babel/helper-hoist-variables': 7.16.7 + '@babel/helper-split-export-declaration': 7.16.7 + '@babel/parser': 7.17.3 + '@babel/types': 7.17.0 + debug: 4.3.3 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.17.0: + resolution: {integrity: sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.16.7 + to-fast-properties: 2.0.0 + dev: true + + /@jridgewell/resolve-uri/3.0.5: + resolution: {integrity: sha512-VPeQ7+wH0itvQxnG+lIzWgkysKIr3L9sslimFW55rHMdGu/qCQ5z5h9zq4gI8uBtqkpHhsF4Z/OwExufUCThew==} + engines: {node: '>=6.0.0'} + dev: true + + /@jridgewell/sourcemap-codec/1.4.11: + resolution: {integrity: sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==} + dev: true + + /@jridgewell/trace-mapping/0.3.4: + resolution: {integrity: sha512-vFv9ttIedivx0ux3QSjhgtCVjPZd5l46ZOMDSCwnH1yUO2e964gO8LZGyv2QkqcgR6TnBU1v+1IFqmeoG+0UJQ==} + dependencies: + '@jridgewell/resolve-uri': 3.0.5 + '@jridgewell/sourcemap-codec': 1.4.11 + dev: true + + /@konghayao/promise-transaction/1.5.2: + resolution: {integrity: sha512-yne4MKCdK61MgRU9EiNBrn19WVhpdRgWxcl7elFDJz0MDLCIfF9l4yPROy3MWH6cGssTv1swkCE3HtE27u+d/w==} + dependencies: + koa-compose: 4.1.0 + dev: true + + /@rollup/plugin-babel/5.3.1_@babel+core@7.17.5: + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-imports': 7.16.7 + '@rollup/pluginutils': 3.1.0 + dev: true + + /@rollup/plugin-commonjs/21.0.1: + resolution: {integrity: sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + dependencies: + '@rollup/pluginutils': 3.1.0 + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.0 + is-reference: 1.2.1 + magic-string: 0.25.7 + resolve: 1.22.0 + dev: true + + /@rollup/plugin-multi-entry/4.1.0: + resolution: {integrity: sha512-nellK5pr50W0JA2+bDJbG8F79GBP802J40YRoC0wyfpTAeAn5mJ4eaFiB/MN+YoX9hgb/6RJoZl9leDjZnUFKw==} + engines: {node: '>=10.0.0'} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/plugin-virtual': 2.1.0 + matched: 5.0.1 + dev: true + + /@rollup/plugin-node-resolve/13.1.3: + resolution: {integrity: sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0 + '@types/resolve': 1.17.1 + builtin-modules: 3.2.0 + deepmerge: 4.2.2 + is-module: 1.0.0 + resolve: 1.22.0 + dev: true + + /@rollup/plugin-typescript/8.3.0: + resolution: {integrity: sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^2.14.0 + tslib: '*' + typescript: '>=3.7.0' + dependencies: + '@rollup/pluginutils': 3.1.0 + resolve: 1.22.0 + dev: true + + /@rollup/plugin-virtual/2.1.0: + resolution: {integrity: sha512-CPPAtlKT53HFqC8jFHb/V5WErpU8Hrq2TyCR0A7kPQMlF2wNUf0o1xuAc+Qxj8NCZM0Z3Yvl+FbUXfJjVWqDwA==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dev: true + + /@rollup/pluginutils/3.1.0: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + dev: true + + /@types/estree/0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + + /@types/estree/0.0.51: + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} + dev: true + + /@types/node/17.0.19: + resolution: {integrity: sha512-PfeQhvcMR4cPFVuYfBN4ifG7p9c+Dlh3yUZR6k+5yQK7wX3gDgVxBly4/WkBRs9x4dmcy1TVl08SY67wwtEvmA==} + dev: true + + /@types/resolve/1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 17.0.19 + dev: true + + /@types/seedrandom/3.0.2: + resolution: {integrity: sha512-YPLqEOo0/X8JU3rdiq+RgUKtQhQtrppE766y7vMTu8dGML7TVtZNiiiaC/hhU9Zqw9UYopXxhuWWENclMVBwKQ==} + dev: true + + /@types/shuffle-seed/1.1.0: + resolution: {integrity: sha512-h6UW72XuE07bSDVTkNjMMapFj6ERJmvf+RajssOoEIVhuU53/+zyCSBjBrSpDJSzVYjGr4CYxW3ABrY0C6s8qA==} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /browserslist/4.19.3: + resolution: {integrity: sha512-XK3X4xtKJ+Txj8G5c30B4gsm71s69lqXlkYui4s6EkKxuv49qjYlY6oVd+IFJ73d4YymtM3+djvvt/R/iJwwDg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001312 + electron-to-chromium: 1.4.71 + escalade: 3.1.1 + node-releases: 2.0.2 + picocolors: 1.0.0 + dev: true + + /builtin-modules/3.2.0: + resolution: {integrity: sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==} + engines: {node: '>=6'} + dev: true + + /caniuse-lite/1.0.30001312: + resolution: {integrity: sha512-Wiz1Psk2MEK0pX3rUzWaunLTZzqS2JYZFzNKqAiJGiuxIjRPLgV6+VDPOg6lQOUxmDwhTlh198JsTTi8Hzw6aQ==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + dev: true + + /commondir/1.0.1: + resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /debug/4.3.3: + resolution: {integrity: sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deepmerge/4.2.2: + resolution: {integrity: sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==} + engines: {node: '>=0.10.0'} + dev: true + + /electron-to-chromium/1.4.71: + resolution: {integrity: sha512-Hk61vXXKRb2cd3znPE9F+2pLWdIOmP7GjiTj45y6L3W/lO+hSnUSUhq+6lEaERWBdZOHbk2s3YV5c9xVl3boVw==} + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /estree-walker/1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /glob/7.2.0: + resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /is-core-module/2.8.1: + resolution: {integrity: sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==} + dependencies: + has: 1.0.3 + dev: true + + /is-module/1.0.0: + resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=} + dev: true + + /is-reference/1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 0.0.51 + dev: true + + /jest-test-tree/1.2.1: + resolution: {integrity: sha512-dgk/yblEyZ/+jGYoEJR78ePMV5+nkfRs70Y/aLXspW6rwWMx2YK6/WyoxbmZVnKEEzqOQeFyclZ3BgrrKWA+Fg==} + dependencies: + '@konghayao/promise-transaction': 1.5.2 + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json5/2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /koa-compose/4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + dev: true + + /magic-string/0.25.7: + resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /matched/5.0.1: + resolution: {integrity: sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw==} + engines: {node: '>=10'} + dependencies: + glob: 7.2.0 + picomatch: 2.3.1 + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /node-releases/2.0.2: + resolution: {integrity: sha512-XxYDdcQ6eKqp/YjI+tb2C5WM2LgjnZrfYg4vgQt49EK268b6gYCHsBLrK2qvJo4FmCtqmKezb0WZFK4fkrZNsg==} + dev: true + + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /picocolors/1.0.0: + resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + dev: true + + /picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /resolve/1.22.0: + resolution: {integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==} + hasBin: true + dependencies: + is-core-module: 2.8.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /seedrandom/2.4.4: + resolution: {integrity: sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==} + dev: false + + /seedrandom/3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /shuffle-seed/1.1.6: + resolution: {integrity: sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=} + dependencies: + seedrandom: 2.4.4 + dev: false + + /source-map/0.5.7: + resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + engines: {node: '>=0.10.0'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true diff --git a/packages/game-random/rollup.config.js b/packages/game-random/rollup.config.js new file mode 100644 index 00000000..7fb02382 --- /dev/null +++ b/packages/game-random/rollup.config.js @@ -0,0 +1,26 @@ +import commonjs from "@rollup/plugin-commonjs"; +import nodeResolve from "@rollup/plugin-node-resolve"; +import babel from "@rollup/plugin-babel"; + +export default { + input: "./src/index.ts", + output: [ + { + file: `./dist/index.js`, + format: "es", + }, + ], + plugins: [ + // typescript(), + // rollupPluginDts(), + babel({ + presets: ["@babel/typescript"], + extensions: [".ts"], + exclude: ["node_modules"], + }), + commonjs({ + extensions: [".js", ".ts"], + }), + nodeResolve({ extensions: [".js", ".ts"] }), + ], +}; diff --git a/packages/game-random/src/index.ts b/packages/game-random/src/index.ts new file mode 100644 index 00000000..f7557366 --- /dev/null +++ b/packages/game-random/src/index.ts @@ -0,0 +1,2 @@ +export { random } from './random'; +export { sample, sampleSize } from './sample'; diff --git a/packages/game-random/src/random.ts b/packages/game-random/src/random.ts new file mode 100644 index 00000000..15ccb51e --- /dev/null +++ b/packages/game-random/src/random.ts @@ -0,0 +1,50 @@ +import { alea as seedrandom } from 'seedrandom'; +function _random(lower: number, upper: number, floating: boolean, seed?: string | undefined) { + const step = upper - lower; + + const result = lower + step * (seed !== undefined ? seedrandom(seed).quick() : Math.random()); + + return floating ? result : Math.floor(result); +} +function random(floating?: boolean): number; +function random(seed?: string): number; +function random(max: number, floating?: boolean): number; +function random(max: number, seed?: string): number; +function random(min: number, max: number, floating: boolean, seed?: string): number; +function random(min: number, max: number, seed?: string): number; +function random(...args: any[]) { + args = args.filter((i) => i !== undefined); + const [a, b, c, d] = args; + switch (args.length) { + case 0: + return _random(0, 1, true); + case 1: + switch (typeof a) { + case 'string': + return _random(0, 1, false, a); + case 'boolean': + return _random(0, 1, a); + case 'number': + return _random(0, a, false); + } + case 2: + switch (typeof b) { + case 'string': + return _random(0, a, false, b); + case 'boolean': + return _random(0, 1, b); + case 'number': + return _random(a, b, false); + } + case 3: + switch (typeof c) { + case 'string': + return _random(a, b, false, c); + case 'boolean': + return _random(a, b, c); + } + default: + return _random(a, b, c, d); + } +} +export { random }; diff --git a/packages/game-random/src/sample.ts b/packages/game-random/src/sample.ts new file mode 100644 index 00000000..0e51e4f9 --- /dev/null +++ b/packages/game-random/src/sample.ts @@ -0,0 +1,40 @@ +import { random } from './random'; + +export function sample(arr: T[], seed?: string): T { + return arr[random(0, arr.length, false, seed)]; +} + +function _sampleSize(collection: T[], n: number, seed?: string): T[] { + const copy = [...collection]; + if (n >= collection.length) return copy; + if (n < 0) return []; + const temp = []; + while (temp.length < n) { + const result = random(0, copy.length, seed); + + temp.push(copy.splice(result, 1)[0]); + } + return temp; +} + +function sampleSize(collection: T[], seed?: string): T[]; +function sampleSize(collection: T[], n?: number): T[]; +function sampleSize(collection: T[], n: number, seed?: string): T[]; +function sampleSize(collection: T[], ...args: any[]): T[] { + args = args.filter((i) => i !== undefined); + const [a, b] = args; + switch (args.length) { + case 0: + return _sampleSize(collection, 1); + case 1: + switch (typeof a) { + case 'string': + return _sampleSize(collection, 1, a); + case 'number': + return _sampleSize(collection, a); + } + default: + return _sampleSize(collection, a, b); + } +} +export { sampleSize }; diff --git a/packages/game-random/src/shuffle.ts b/packages/game-random/src/shuffle.ts new file mode 100644 index 00000000..24c9e505 --- /dev/null +++ b/packages/game-random/src/shuffle.ts @@ -0,0 +1,51 @@ +import seedrandom from 'seedrandom'; + +const isArray = function ($: any) { + return Object.prototype.toString.call($) === '[object Array]'; +}; + +const seedRand = function (func: () => number, min: number, max: number) { + return Math.floor(func() * (max - min + 1)) + min; +}; + +const shuffle = function (arr: T[], seed?: string) { + if (!isArray(arr)) return null; + + const size = arr.length; + const rng = seedrandom(seed); + const resp = []; + const keys = []; + + for (let i = 0; i < size; i++) keys.push(i); + for (let i = 0; i < size; i++) { + const r = seedRand(rng, 0, keys.length - 1); + const g = keys[r]; + keys.splice(r, 1); + resp.push(arr[g]); + } + return resp; +}; + +const unshuffle = function (arr: T[], seed?: string) { + if (!isArray(arr)) return null; + const size = arr.length; + const rng = seedrandom(seed); + const resp = []; + const keys = []; + + for (let i = 0; i < size; i++) { + resp.push(null); + keys.push(i); + } + + for (let i = 0; i < size; i++) { + const r = seedRand(rng, 0, keys.length - 1); + const g = keys[r]; + keys.splice(r, 1); + resp[g] = arr[i]; + } + + return resp; +}; + +export { shuffle, unshuffle as unShuffle }; diff --git a/packages/game-random/test/random.test.js b/packages/game-random/test/random.test.js new file mode 100644 index 00000000..2b478f38 --- /dev/null +++ b/packages/game-random/test/random.test.js @@ -0,0 +1,70 @@ +import { random } from '../dist/index.js'; +import { describe, it, expect } from 'vitest'; +const isFloat = (a) => (a + '').indexOf('.') !== -1; +const isBetween = (a, b, c) => a >= b && a < c; +const testTime = 1000; + +describe('random', () => { + it('null', () => { + const res = [...Array(testTime).keys()].map(() => random()); + res.forEach((i) => { + expect(i + '').toContain('.'); + expect(i).toBeLessThan(1); + expect(i).toBeGreaterThanOrEqual(0); + }); + }); + it('max', () => { + const res = [...Array(testTime).keys()].map(() => random(5)).every((i) => !isFloat(i) && isBetween(i, 0, 5)); + expect(res).toBe(true); + }); + + it('seed', () => { + const target = random(5, '2233'); + const res = [...Array(testTime).keys()].map(() => random(5, '2233')).every((i) => !isFloat(i) && i === target); + expect(res).toBe(true); + }); + it('floating', () => { + const res = [...Array(testTime).keys()].map(() => random(true)).every((i) => isFloat(i)); + expect(res).toBe(true); + }); + + it('min,max', () => { + const res = [...Array(testTime).keys()].map(() => random(1, 6)).every((i) => !isFloat(i) && isBetween(i, 1, 6)); + expect(res).toBe(true); + }); + + it('max,floating', () => { + const res = [...Array(testTime).keys()] + .map(() => random(5, true)) + .every((i) => isFloat(i) && isBetween(i, 0, 5)); + expect(res).toBe(true); + }); + + it('max,seed', () => { + const target = random(5, 'Konghayao'); + const res = [...Array(testTime).keys()] + .map(() => random(5, 'Konghayao')) + .every((i) => !isFloat(i) && i === target); + expect(res).toBe(true); + }); + it('min,max,floating', () => { + const res = [...Array(testTime).keys()] + .map(() => random(5, 100, true)) + .every((i) => isFloat(i) && isBetween(i, 5, 100)); + expect(res).toBe(true); + }); + it('min,max,seed', () => { + const target = random(100, 'Konghayao'); + const res = [...Array(testTime).keys()] + .map(() => random(100, 'Konghayao')) + .every((i) => !isFloat(i) && i === target); + expect(res).toBe(true); + }); + it('min,max,floating,seed', () => { + const target = random(20, 100, true, 'Konghayao'); + const res = [...Array(testTime).keys()] + .map(() => random(20, 100, true, 'Konghayao')) + .every((i) => isFloat(i) && i === target); + expect(res).toBe(true); + }); +}); diff --git a/packages/game-random/test/sample.test.js b/packages/game-random/test/sample.test.js new file mode 100644 index 00000000..df1d7c87 --- /dev/null +++ b/packages/game-random/test/sample.test.js @@ -0,0 +1,61 @@ +import { sample, sampleSize } from '../dist/index.js'; +import { describe, it, expect } from 'vitest'; +const testTime = 100; +const arr = [...Array(1000).keys()].map((i) => i + ''); +const seed = '123232'; +describe('sample', () => { + it('arr', () => { + const res = [...Array(testTime).keys()].map(() => sample(arr)); + + res.forEach((i) => { + expect(arr).toContain(i); + }); + }); + it('arr, seed', () => { + const res = [...Array(testTime).keys()].map((i) => sample(arr, seed)); + + const target = sample(arr, seed); + res.forEach((i) => { + expect(i).toEqual(target); + }); + }); +}); + +describe('sampleSize', () => { + it('null', () => { + const res = [...Array(testTime).keys()].map((i) => sampleSize(arr)); + + res.forEach((i) => { + expect(i.length).toBe(1); + expect(arr).toContain(i[0]); + }); + }); + it('number', () => { + const res = [...Array(testTime).keys()].map((i) => sampleSize(arr, 10)); + + res.forEach((i) => { + expect(i.length).toBe(10); + i.forEach((ii) => { + expect(arr).toContain(ii); + }); + }); + }); + it('seed', () => { + const res = [...Array(testTime).keys()].map((i) => sampleSize(arr, seed)); + + const target = sampleSize(arr, seed); + res.forEach((i) => { + expect(i.length).toBe(1); + expect(i).toEqual(target); + }); + }); + + it('number,seed', () => { + const res = [...Array(testTime).keys()].map((i) => sampleSize(arr, 10, seed)); + const target = sampleSize(arr, 10, seed); + res.forEach((i) => { + expect(i.length).toBe(10); + expect(i).toEqual(target); + }); + }); +}); diff --git a/packages/game-random/tsconfig.json b/packages/game-random/tsconfig.json new file mode 100644 index 00000000..d42e3de7 --- /dev/null +++ b/packages/game-random/tsconfig.json @@ -0,0 +1,73 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + // "incremental": true, /* Enable incremental compilation */ + "target": "es6" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "esnext" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + // "allowJs": true, /* Allow javascript files to be compiled. */ + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "emitDeclarationOnly": true, + "declaration": true /* Generates corresponding '.d.ts' file. */, + "declarationDir": "dist" /* Generates corresponding '.d.ts' file. */, + // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */ + // "sourceMap": true, /* Generates corresponding '.map' file. */ + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./libs" /* Redirect output structure to the directory. */, + "rootDir": "./src" /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */, + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + // "removeComments": true, /* Do not emit comments to output. */ + // "noEmit": true /* Do not emit outputs. */, + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + // "baseUrl": "./src" /* Base directory to resolve non-absolute module names. */, + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [ + // "dist" + // ] /* List of folders to include type definitions from. */, + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9f508008..faa9ea39 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,47 +1,80 @@ lockfileVersion: '6.0' -dependencies: - color: - specifier: ^3.1.3 - version: 3.1.3 - game-random: - specifier: ^1.0.7 - version: 1.0.7 - lodash-es: - specifier: ^4.17.21 - version: 4.17.21 - uuid: - specifier: ^8.3.2 - version: 8.3.2 - -devDependencies: - '@vitest/browser': - specifier: ^1.2.2 - version: 1.2.2(vitest@1.2.2) - '@vitest/coverage-v8': - specifier: ^1.2.2 - version: 1.2.2(vitest@1.2.2) - blob-polyfill: - specifier: ^7.0.20220408 - version: 7.0.20220408 - jquery: - specifier: ~2.1.1 - version: 2.1.1 - jsdom: - specifier: ^24.0.0 - version: 24.0.0 - prettier: - specifier: ^2.3.2 - version: 2.3.2 - typescript: - specifier: ^5.3.3 - version: 5.3.3 - vite: - specifier: ^5.0.12 - version: 5.0.12 - vitest: - specifier: ^1.2.2 - version: 1.2.2(@vitest/browser@1.2.2)(jsdom@24.0.0) +importers: + + .: + dependencies: + color: + specifier: ^3.1.3 + version: 3.1.3 + game-random: + specifier: 'workspace:' + version: link:packages/game-random + lodash-es: + specifier: ^4.17.21 + version: 4.17.21 + uuid: + specifier: ^8.3.2 + version: 8.3.2 + devDependencies: + '@vitest/browser': + specifier: ^1.2.2 + version: 1.2.2(vitest@1.2.2) + '@vitest/coverage-v8': + specifier: ^1.2.2 + version: 1.2.2(vitest@1.2.2) + blob-polyfill: + specifier: ^7.0.20220408 + version: 7.0.20220408 + jquery: + specifier: ~2.1.1 + version: 2.1.1 + jsdom: + specifier: ^24.0.0 + version: 24.0.0 + prettier: + specifier: ^2.3.2 + version: 2.3.2 + typescript: + specifier: ^5.3.3 + version: 5.3.3 + vite: + specifier: ^5.0.12 + version: 5.0.12 + vitest: + specifier: ^1.2.2 + version: 1.2.2(@vitest/browser@1.2.2)(jsdom@24.0.0) + + packages/game-random: + dependencies: + seedrandom: + specifier: ^3.0.5 + version: 3.0.5 + devDependencies: + '@babel/core': + specifier: ^7.17.5 + version: 7.17.5 + '@babel/preset-typescript': + specifier: ^7.16.7 + version: 7.16.7(@babel/core@7.17.5) + '@rollup/plugin-babel': + specifier: ^5.3.1 + version: 5.3.1(@babel/core@7.17.5)(rollup@2.79.1) + '@rollup/plugin-commonjs': + specifier: ^21.0.1 + version: 21.0.1(rollup@2.79.1) + '@rollup/plugin-multi-entry': + specifier: ^4.1.0 + version: 4.1.0(rollup@2.79.1) + '@rollup/plugin-node-resolve': + specifier: ^13.1.3 + version: 13.1.3(rollup@2.79.1) + '@rollup/plugin-typescript': + specifier: ^8.3.0 + version: 8.3.0(rollup@2.79.1)(tslib@2.6.2)(typescript@5.3.3) + '@types/seedrandom': + specifier: ^3.0.2 + version: 3.0.2 packages: @@ -53,6 +86,181 @@ packages: '@jridgewell/trace-mapping': 0.3.22 dev: true + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + dev: true + + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core@7.17.5: + resolution: {integrity: sha512-/BBMw4EvjmyquN5O+t5eh0+YqB3XXJkYD2cjKpYtWOfFy4lQ4UozNSmxAcWT8r2XtZs0ewG+zrfsqeR15i1ajA==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.17.5) + '@babel/helpers': 7.24.0 + '@babel/parser': 7.23.9 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.23.9 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.9 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.22 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure@7.22.5: + resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-create-class-features-plugin@7.24.0(@babel/core@7.17.5): + resolution: {integrity: sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.17.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: true + + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.17.5): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-optimise-call-expression@7.22.5: + resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-plugin-utils@7.24.0: + resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.17.5): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: true + + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers@7.22.5: + resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/helper-split-export-declaration@7.22.6: + resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.24.0 + dev: true + /@babel/helper-string-parser@7.23.4: resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} @@ -63,6 +271,31 @@ packages: engines: {node: '>=6.9.0'} dev: true + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers@7.24.0: + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + /@babel/parser@7.23.9: resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==} engines: {node: '>=6.0.0'} @@ -71,6 +304,76 @@ packages: '@babel/types': 7.23.9 dev: true + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.24.0 + dev: true + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.17.5): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.24.0 + dev: true + + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.17.5): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.24.0(@babel/core@7.17.5) + '@babel/helper-plugin-utils': 7.24.0 + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.17.5) + dev: true + + /@babel/preset-typescript@7.16.7(@babel/core@7.17.5): + resolution: {integrity: sha512-WbVEmgXdIyvzB77AQjGBEyYPZx+8tTsO50XtfozQrkW8QB2rLJpH2lgx0TRw5EJrBxOZQ+wCcyPVQvS8tjEHpQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.17.5) + dev: true + + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 + dev: true + + /@babel/traverse@7.24.0: + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/types@7.23.9: resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==} engines: {node: '>=6.9.0'} @@ -80,6 +383,15 @@ packages: to-fast-properties: 2.0.0 dev: true + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + dev: true + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -337,6 +649,101 @@ packages: resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==} dev: true + /@rollup/plugin-babel@5.3.1(@babel/core@7.17.5)(rollup@2.79.1): + resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==} + engines: {node: '>= 10.0.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@types/babel__core': ^7.1.9 + rollup: ^1.20.0||^2.0.0 + peerDependenciesMeta: + '@types/babel__core': + optional: true + dependencies: + '@babel/core': 7.17.5 + '@babel/helper-module-imports': 7.22.15 + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + rollup: 2.79.1 + dev: true + + /@rollup/plugin-commonjs@21.0.1(rollup@2.79.1): + resolution: {integrity: sha512-EA+g22lbNJ8p5kuZJUYyhhDK7WgJckW5g4pNN7n4mAFUM96VuwUnNT3xr2Db2iCZPI1pJPbGyfT5mS9T1dHfMg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^2.38.3 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.3 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.8 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-multi-entry@4.1.0(rollup@2.79.1): + resolution: {integrity: sha512-nellK5pr50W0JA2+bDJbG8F79GBP802J40YRoC0wyfpTAeAn5mJ4eaFiB/MN+YoX9hgb/6RJoZl9leDjZnUFKw==} + engines: {node: '>=10.0.0'} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/plugin-virtual': 2.1.0(rollup@2.79.1) + matched: 5.0.1 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-node-resolve@13.1.3(rollup@2.79.1): + resolution: {integrity: sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + '@types/resolve': 1.17.1 + builtin-modules: 3.3.0 + deepmerge: 4.3.1 + is-module: 1.0.0 + resolve: 1.22.8 + rollup: 2.79.1 + dev: true + + /@rollup/plugin-typescript@8.3.0(rollup@2.79.1)(tslib@2.6.2)(typescript@5.3.3): + resolution: {integrity: sha512-I5FpSvLbtAdwJ+naznv+B4sjXZUcIvLLceYpITAn7wAP8W0wqc5noLdGIp9HGVntNhRWXctwPYrSSFQxtl0FPA==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^2.14.0 + tslib: '*' + typescript: '>=3.7.0' + dependencies: + '@rollup/pluginutils': 3.1.0(rollup@2.79.1) + resolve: 1.22.8 + rollup: 2.79.1 + tslib: 2.6.2 + typescript: 5.3.3 + dev: true + + /@rollup/plugin-virtual@2.1.0(rollup@2.79.1): + resolution: {integrity: sha512-CPPAtlKT53HFqC8jFHb/V5WErpU8Hrq2TyCR0A7kPQMlF2wNUf0o1xuAc+Qxj8NCZM0Z3Yvl+FbUXfJjVWqDwA==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 2.79.1 + dev: true + + /@rollup/pluginutils@3.1.0(rollup@2.79.1): + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 2.79.1 + dev: true + /@rollup/rollup-android-arm-eabi@4.9.6: resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==} cpu: [arm] @@ -445,6 +852,10 @@ packages: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true + /@types/estree@0.0.39: + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + dev: true + /@types/estree@1.0.5: resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: true @@ -453,6 +864,22 @@ packages: resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} dev: true + /@types/node@20.11.27: + resolution: {integrity: sha512-qyUZfMnCg1KEz57r7pzFtSGt49f6RPkPBis3Vo4PbS7roQEDn22hiHzl/Lo1q4i4hDEgBJmBF/NTNg2XR0HbFg==} + dependencies: + undici-types: 5.26.5 + dev: true + + /@types/resolve@1.17.1: + resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} + dependencies: + '@types/node': 20.11.27 + dev: true + + /@types/seedrandom@3.0.2: + resolution: {integrity: sha512-YPLqEOo0/X8JU3rdiq+RgUKtQhQtrppE766y7vMTu8dGML7TVtZNiiiaC/hhU9Zqw9UYopXxhuWWENclMVBwKQ==} + dev: true + /@vitest/browser@1.2.2(vitest@1.2.2): resolution: {integrity: sha512-N8myxNVLbS9AbZ7B2cK33HTGYVzUTDArbMh3hLojOxaj7s7ZrBYYmzs0Q5J2wyDrOgs51p6OUrrzAIb1Z+Ck3A==} peerDependencies: @@ -556,6 +983,13 @@ packages: - supports-color dev: true + /ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + /ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} @@ -584,11 +1018,31 @@ packages: concat-map: 0.0.1 dev: true + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001597 + electron-to-chromium: 1.4.704 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) + dev: true + + /builtin-modules@3.3.0: + resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} + engines: {node: '>=6'} + dev: true + /cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} dev: true + /caniuse-lite@1.0.30001597: + resolution: {integrity: sha512-7LjJvmQU6Sj7bL0j5b5WY/3n7utXUJvAe1lxhsHDbLmwX9mdL86Yjtr+5SRCyf8qME4M7pU2hswj0FpyBVCv9w==} + dev: true + /chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} @@ -602,6 +1056,15 @@ packages: type-detect: 4.0.8 dev: true + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + /check-error@1.0.3: resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} dependencies: @@ -612,11 +1075,9 @@ packages: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} dependencies: color-name: 1.1.3 - dev: false /color-name@1.1.3: resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} - dev: false /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -643,10 +1104,18 @@ packages: delayed-stream: 1.0.0 dev: true + /commondir@1.0.1: + resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} + dev: true + /concat-map@0.0.1: resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} dev: true + /convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} dev: true @@ -698,6 +1167,11 @@ packages: type-detect: 4.0.8 dev: true + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -708,6 +1182,10 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true + /electron-to-chromium@1.4.704: + resolution: {integrity: sha512-OK01+86Qvby1V6cTiowVbhp25aX4DLZnwar+NocAOXdzKAByd+jq5156bmo4kHwevWMknznW18Y/Svfk2dU91A==} + dev: true + /entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -744,6 +1222,24 @@ packages: '@esbuild/win32-x64': 0.19.12 dev: true + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + dev: true + + /escape-string-regexp@1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /estree-walker@1.0.1: + resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==} + dev: true + + /estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + /estree-walker@3.0.3: resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: @@ -786,12 +1282,14 @@ packages: dev: true optional: true - /game-random@1.0.7: - resolution: {integrity: sha512-pc0s4hce3Q10EskYcJs9ooZpFkoUT7qPAWiHvoa62rH42jk6lMCrhQB3HGYaM+8qeMRekoVRHLFnpZUv3iIFNg==} - dependencies: - seedrandom: 3.0.5 - shuffle-seed: 1.1.6 - dev: false + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} @@ -813,11 +1311,28 @@ packages: path-is-absolute: 1.0.1 dev: true + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + dev: true + /has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} dev: true + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + /html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -876,10 +1391,26 @@ packages: resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} dev: false + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.2 + dev: true + + /is-module@1.0.0: + resolution: {integrity: sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=} + dev: true + /is-potential-custom-element-name@1.0.1: resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} dev: true + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /is-stream@3.0.0: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -926,6 +1457,10 @@ packages: resolution: {integrity: sha1-go/GD1D37lmDNj706wHF9wr0vVs=} dev: true + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + /jsdom@24.0.0: resolution: {integrity: sha512-UDS2NayCvmXSXVP6mpTj+73JnNQadZlr9N68189xib2tx5Mls7swlTNao26IoHv46BZJFvXygyRtyXd1feAk1A==} engines: {node: '>=18'} @@ -962,6 +1497,18 @@ packages: - utf-8-validate dev: true + /jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: true + /jsonc-parser@3.2.1: resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true @@ -984,6 +1531,12 @@ packages: get-func-name: 2.0.2 dev: true + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + /lru-cache@6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} @@ -991,6 +1544,12 @@ packages: yallist: 4.0.0 dev: true + /magic-string@0.25.9: + resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + /magic-string@0.30.5: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} @@ -1013,6 +1572,14 @@ packages: semver: 7.5.4 dev: true + /matched@5.0.1: + resolution: {integrity: sha512-E1fhSTPRyhAlNaNvGXAgZQlq1hL0bgYMTk/6bktVlIhzUnX/SZs7296ACdVeNJE8xFNGSuvd9IpI7vSnmcqLvw==} + engines: {node: '>=10'} + dependencies: + glob: 7.2.3 + picomatch: 2.3.1 + dev: true + /merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} dev: true @@ -1064,6 +1631,10 @@ packages: hasBin: true dev: true + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + dev: true + /npm-run-path@5.2.0: resolution: {integrity: sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -1116,6 +1687,10 @@ packages: engines: {node: '>=12'} dev: true + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + /pathe@1.1.2: resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true @@ -1128,6 +1703,11 @@ packages: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} dev: true + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -1181,6 +1761,23 @@ packages: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: true + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /rollup@2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /rollup@4.9.6: resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -1219,14 +1816,15 @@ packages: xmlchars: 2.2.0 dev: true - /seedrandom@2.4.4: - resolution: {integrity: sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==} - dev: false - /seedrandom@3.0.5: resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} dev: false + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: true + /semver@7.5.4: resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} engines: {node: '>=10'} @@ -1247,12 +1845,6 @@ packages: engines: {node: '>=8'} dev: true - /shuffle-seed@1.1.6: - resolution: {integrity: sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=} - dependencies: - seedrandom: 2.4.4 - dev: false - /siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true @@ -1287,6 +1879,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /sourcemap-codec@1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + /stackback@0.0.2: resolution: {integrity: sha1-Gsig2Ug4SNFpXkGLbQMaPDzmjjs=} dev: true @@ -1306,6 +1902,13 @@ packages: acorn: 8.11.3 dev: true + /supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + /supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -1313,6 +1916,11 @@ packages: has-flag: 4.0.0 dev: true + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true @@ -1367,6 +1975,10 @@ packages: punycode: 2.3.1 dev: true + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + dev: true + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -1382,11 +1994,26 @@ packages: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} dev: true + /update-browserslist-db@1.0.13(browserslist@4.23.0): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.0 + escalade: 3.1.2 + picocolors: 1.0.0 + dev: true + /url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} dependencies: @@ -1597,6 +2224,10 @@ packages: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} dev: true + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + /yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} dev: true diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 00000000..7391aa3e --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,3 @@ +prefer-workspace-packages: true +packages: + - 'packages/*' \ No newline at end of file From baa89b050bfb7d775924c1fefc11c83c0a37e09e Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Thu, 14 Mar 2024 09:53:44 +0000 Subject: [PATCH 61/65] feat(game-random): control random result --- packages/game-random/src/globalSeed.ts | 8 ++++++++ packages/game-random/src/index.ts | 1 + packages/game-random/src/random.ts | 3 ++- packages/game-random/src/shuffle.ts | 4 +++- src/mock.ts | 1 + 5 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 packages/game-random/src/globalSeed.ts diff --git a/packages/game-random/src/globalSeed.ts b/packages/game-random/src/globalSeed.ts new file mode 100644 index 00000000..dfc006d4 --- /dev/null +++ b/packages/game-random/src/globalSeed.ts @@ -0,0 +1,8 @@ +let globalSeed: string +export const GlobalSeedAtom = (val?: string) => { + if (val) { + globalSeed = val + return val + } + return globalSeed +} \ No newline at end of file diff --git a/packages/game-random/src/index.ts b/packages/game-random/src/index.ts index f7557366..e74fe55f 100644 --- a/packages/game-random/src/index.ts +++ b/packages/game-random/src/index.ts @@ -1,2 +1,3 @@ export { random } from './random'; export { sample, sampleSize } from './sample'; +export * from './globalSeed' \ No newline at end of file diff --git a/packages/game-random/src/random.ts b/packages/game-random/src/random.ts index 15ccb51e..3fcba122 100644 --- a/packages/game-random/src/random.ts +++ b/packages/game-random/src/random.ts @@ -1,7 +1,8 @@ import { alea as seedrandom } from 'seedrandom'; +import { GlobalSeedAtom } from './globalSeed'; function _random(lower: number, upper: number, floating: boolean, seed?: string | undefined) { const step = upper - lower; - + seed = seed ?? GlobalSeedAtom() const result = lower + step * (seed !== undefined ? seedrandom(seed).quick() : Math.random()); return floating ? result : Math.floor(result); diff --git a/packages/game-random/src/shuffle.ts b/packages/game-random/src/shuffle.ts index 24c9e505..3bc37ad4 100644 --- a/packages/game-random/src/shuffle.ts +++ b/packages/game-random/src/shuffle.ts @@ -1,5 +1,5 @@ import seedrandom from 'seedrandom'; - +import { GlobalSeedAtom } from './globalSeed' const isArray = function ($: any) { return Object.prototype.toString.call($) === '[object Array]'; }; @@ -12,6 +12,7 @@ const shuffle = function (arr: T[], seed?: string) { if (!isArray(arr)) return null; const size = arr.length; + seed = seed ?? GlobalSeedAtom() const rng = seedrandom(seed); const resp = []; const keys = []; @@ -29,6 +30,7 @@ const shuffle = function (arr: T[], seed?: string) { const unshuffle = function (arr: T[], seed?: string) { if (!isArray(arr)) return null; const size = arr.length; + seed = seed ?? GlobalSeedAtom() const rng = seedrandom(seed); const resp = []; const keys = []; diff --git a/src/mock.ts b/src/mock.ts index 9bee76bb..95ef48bb 100644 --- a/src/mock.ts +++ b/src/mock.ts @@ -39,3 +39,4 @@ const Mock = { export default Mock; export { registerRandom } from './mock/random'; +export * from 'game-random' \ No newline at end of file From 777093be3c231497727a22e32cc0b78e7167a7e3 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Thu, 14 Mar 2024 09:59:39 +0000 Subject: [PATCH 62/65] =?UTF-8?q?test(seed):=20=E6=B5=8B=E8=AF=95=E7=A7=8D?= =?UTF-8?q?=E5=AD=90=E9=9A=8F=E6=9C=BA=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- test/static-result.test.js | 131 +++++++++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 test/static-result.test.js diff --git a/test/static-result.test.js b/test/static-result.test.js new file mode 100644 index 00000000..c20de6f3 --- /dev/null +++ b/test/static-result.test.js @@ -0,0 +1,131 @@ +import { describe, it, expect } from "vitest"; +import Mock, { GlobalSeedAtom } from '../src/mock'; +describe('static result', () => { + it('template', () => { + GlobalSeedAtom("100") + var tpl = { + basics: { + boolean1: '@BOOLEAN', + boolean2: '@BOOLEAN(1, 9, true)', + + natural1: '@NATURAL', + natural2: '@NATURAL(10000)', + natural3: '@NATURAL(60, 100)', + + integer1: '@INTEGER', + integer2: '@INTEGER(10000)', + integer3: '@INTEGER(60, 100)', + + float1: '@FLOAT', + float2: '@FLOAT(0)', + float3: '@FLOAT(60, 100)', + float4: '@FLOAT(60, 100, 3)', + float5: '@FLOAT(60, 100, 3, 5)', + + character1: '@CHARACTER', + character2: '@CHARACTER("lower")', + character3: '@CHARACTER("upper")', + character4: '@CHARACTER("number")', + character5: '@CHARACTER("symbol")', + character6: '@CHARACTER("aeiou")', + + string1: '@STRING', + string2: '@STRING(5)', + string3: '@STRING("lower",5)', + string4: '@STRING(7, 10)', + string5: '@STRING("aeiou", 1, 3)', + + range1: '@RANGE(10)', + range2: '@RANGE(3, 7)', + range3: '@RANGE(1, 10, 2)', + range4: '@RANGE(1, 10, 3)', + + date: '@DATE', + time: '@TIME', + + datetime1: '@DATETIME', + datetime2: '@DATETIME("yyyy-MM-dd A HH:mm:ss")', + datetime3: '@DATETIME("yyyy-MM-dd a HH:mm:ss")', + datetime4: '@DATETIME("yy-MM-dd HH:mm:ss")', + datetime5: '@DATETIME("y-MM-dd HH:mm:ss")', + datetime6: '@DATETIME("y-M-d H:m:s")', + }, + image: { + image1: '@IMAGE', + image2: '@IMAGE("100x200", "#000")', + image3: '@IMAGE("100x200", "#000", "hello")', + image4: '@IMAGE("100x200", "#000", "#FFF", "hello")', + image5: '@IMAGE("100x200", "#000", "#FFF", "png", "hello")', + + dataImage1: '@DATAIMAGE', + dataImage2: '@DATAIMAGE("200x100")', + dataImage3: '@DATAIMAGE("300x100", "Hello Mock.js!")', + }, + color: { + color: '@COLOR', + render: function () { + // $('.header').css('background', this.color); + }, + }, + text: { + title1: '@TITLE', + title2: '@TITLE(5)', + title3: '@TITLE(3, 5)', + + word1: '@WORD', + word2: '@WORD(5)', + word3: '@WORD(3, 5)', + + sentence1: '@SENTENCE', + sentence2: '@SENTENCE(5)', + sentence3: '@SENTENCE(3, 5)', + + paragraph1: '@PARAGRAPH', + paragraph2: '@PARAGRAPH(2)', + paragraph3: '@PARAGRAPH(1, 3)', + }, + name: { + first: '@FIRST', + last: '@LAST', + name1: '@NAME', + name2: '@NAME(true)', + }, + web: { + url: '@URL', + domain: '@DOMAIN', + email: '@EMAIL', + ip: '@IP', + tld: '@TLD', + }, + address: { + region: '@REGION', + province: '@PROVINCE', + city: '@CITY', + county: '@COUNTY', + }, + miscellaneous: { + guid: '@GUID', + id: '@ID', + }, + helpers: { + capitalize1: '@CAPITALIZE()', + capitalize2: '@CAPITALIZE("hello")', + + upper1: '@UPPER', + upper2: '@UPPER("hello")', + + lower1: '@LOWER', + lower2: '@LOWER("HELLO")', + + pick1: '@PICK', + pick2: '@PICK("abc")', + pick3: '@PICK(["a", "b", "c"])', + + shuffle1: '@SHUFFLE', + shuffle2: '@SHUFFLE(["a", "b", "c"])', + }, + }; + var data = Mock.mock(tpl); + expect(data).eql(Mock.mock(tpl)); + }) +}) \ No newline at end of file From 415a751db0b7dc729244407dae1cb4abf2d98c11 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Fri, 15 Mar 2024 01:48:06 +0000 Subject: [PATCH 63/65] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20game-random?= =?UTF-8?q?=20=E7=A8=B3=E5=AE=9A=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mock/random/color.js | 21 +++++++++++---------- src/mock/random/image.js | 18 ++++++++++-------- src/mock/random/misc/guid.js | 12 ++++++++++-- test/static-result.test.js | 2 +- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/src/mock/random/color.js b/src/mock/random/color.js index b567973f..0edb7864 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -73,20 +73,21 @@ */ import Color from 'color'; // 使用 color 这个库进行颜色转换 import DICT from './color/color_dict'; -import { pick } from './helper'; import RandomColor from './color/color_dict_cn.json'; +import { random, sample } from 'game-random' let _hue; function _goldenRatioColor(saturation, value) { - const _goldenRatio = 0.618033988749895; - _hue = _hue || Math.random(); - _hue += _goldenRatio; - _hue %= 1; + return Color(color()) + // const _goldenRatio = 0.618033988749895; + // _hue = _hue || (random(true) ); + // _hue += _goldenRatio; + // _hue %= 1; - if (typeof saturation !== 'number') saturation = 0.5; - if (typeof value !== 'number') value = 0.95; + // if (typeof saturation !== 'number') saturation = 0.5; + // if (typeof value !== 'number') value = 0.95; - return Color.hsv(_hue * 360, saturation * 100, value * 100); + // return Color.hsv(_hue * 360, saturation * 100, value * 100); } // 中国色 数据来自于 http://zhongguose.com @@ -94,7 +95,7 @@ function _goldenRatioColor(saturation, value) { // 随机生成一个有吸引力的颜色,格式为 '#RRGGBB' hex。 function color(name) { if (name || DICT[name]) return DICT[name].nicer; - return pick(RandomColor).hex; + return sample(RandomColor).hex; } // #DAC0DE @@ -111,7 +112,7 @@ function rgb() { // rgba(128,255,255,0.3) function rgba() { const hsv = _goldenRatioColor(); - return hsv.alpha(Math.random().toFixed(2)).hsv().string(); + return hsv.alpha(random(true).toFixed(2)).hsv().string(); } // hsl(300,80%,90%) diff --git a/src/mock/random/image.js b/src/mock/random/image.js index 73c204ac..bf0b4939 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -5,6 +5,9 @@ import size from './image.json'; import { pick } from './helper'; +import _brandColors from './brandColors.json'; +import { hex } from './color'; +import { sample } from 'game-random'; const { _adSize, _screenSize, _videoSize } = size; /* @@ -19,8 +22,7 @@ const { _adSize, _screenSize, _videoSize } = size; console.log('\'' + item.text() + '\'', ':', '\'' + item.next().text() + '\'', ',') }) */ -import _brandColors from './brandColors.json'; -import { hex } from './color'; + const _brandNames = Object.keys(_brandColors); /* @@ -50,16 +52,16 @@ function image(...args) { } // Random.image() - if (!size) size = pick(_adSize); - + if (!size) size = sample(_adSize); + size = size.replaceAll('"','') // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, ''); - background = (background || hex()).replace(/^#/, ''); + foreground = (foreground || hex()).replace(/^#/, '').replaceAll('"',''); + background = (background || hex()).replace(/^#/, '').replaceAll('"',''); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ - format ? '.' + format : '' - }${text ? '&text=' + text : ''}`; + format ? '.' + format.replaceAll('"','') : '' + }${text ? '&text=' + text.replaceAll('"','') : ''}`; } /* 生成一段随机的 Base64 图片编码。 diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js index e6bbfd3d..d2e9fd52 100644 --- a/src/mock/random/misc/guid.js +++ b/src/mock/random/misc/guid.js @@ -29,7 +29,15 @@ UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) */ -import { v4 as uuid } from 'uuid'; +import { random } from 'game-random' +function generateGUID() { + const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + const r = random(0, 15); + const v = c == 'x' ? r : (r & 0x3 | 0x8); + return v.toString(16); + }); + return uuid; +} export default function guid() { - return uuid(); + return generateGUID(); } diff --git a/test/static-result.test.js b/test/static-result.test.js index c20de6f3..2a1b634b 100644 --- a/test/static-result.test.js +++ b/test/static-result.test.js @@ -2,7 +2,7 @@ import { describe, it, expect } from "vitest"; import Mock, { GlobalSeedAtom } from '../src/mock'; describe('static result', () => { it('template', () => { - GlobalSeedAtom("100") + GlobalSeedAtom(Math.random()) var tpl = { basics: { boolean1: '@BOOLEAN', From 123b57d35a716f36c4223c6cf6f9f88d6c8967d7 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Fri, 15 Mar 2024 01:49:16 +0000 Subject: [PATCH 64/65] =?UTF-8?q?style:=20=E6=A0=B7=E5=BC=8F=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mock.ts | 2 +- src/mock/random/color.js | 4 ++-- src/mock/random/helper.js | 2 +- src/mock/random/image.js | 10 +++++----- src/mock/random/misc/guid.js | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/mock.ts b/src/mock.ts index 95ef48bb..80b106bc 100644 --- a/src/mock.ts +++ b/src/mock.ts @@ -39,4 +39,4 @@ const Mock = { export default Mock; export { registerRandom } from './mock/random'; -export * from 'game-random' \ No newline at end of file +export * from 'game-random'; diff --git a/src/mock/random/color.js b/src/mock/random/color.js index 0edb7864..e9b92823 100644 --- a/src/mock/random/color.js +++ b/src/mock/random/color.js @@ -74,11 +74,11 @@ import Color from 'color'; // 使用 color 这个库进行颜色转换 import DICT from './color/color_dict'; import RandomColor from './color/color_dict_cn.json'; -import { random, sample } from 'game-random' +import { random, sample } from 'game-random'; let _hue; function _goldenRatioColor(saturation, value) { - return Color(color()) + return Color(color()); // const _goldenRatio = 0.618033988749895; // _hue = _hue || (random(true) ); // _hue += _goldenRatio; diff --git a/src/mock/random/helper.js b/src/mock/random/helper.js index 48818b78..6c2b3678 100644 --- a/src/mock/random/helper.js +++ b/src/mock/random/helper.js @@ -18,7 +18,7 @@ const pick = function (arr, ...args) { let min; let max; let count; - if (arr === undefined) return undefined + if (arr === undefined) return undefined; switch (args.length) { case 0: return sample(arr); diff --git a/src/mock/random/image.js b/src/mock/random/image.js index bf0b4939..e186fcc4 100644 --- a/src/mock/random/image.js +++ b/src/mock/random/image.js @@ -53,15 +53,15 @@ function image(...args) { // Random.image() if (!size) size = sample(_adSize); - size = size.replaceAll('"','') + size = size.replaceAll('"', ''); // 去除前面的 # 号 - foreground = (foreground || hex()).replace(/^#/, '').replaceAll('"',''); - background = (background || hex()).replace(/^#/, '').replaceAll('"',''); + foreground = (foreground || hex()).replace(/^#/, '').replaceAll('"', ''); + background = (background || hex()).replace(/^#/, '').replaceAll('"', ''); // http://dummyimage.com/600x400/cc00cc/470047.png&text=hello return `http://dummyimage.com/${size}${background ? '/' + background : ''}${foreground ? '/' + foreground : ''}${ - format ? '.' + format.replaceAll('"','') : '' - }${text ? '&text=' + text.replaceAll('"','') : ''}`; + format ? '.' + format.replaceAll('"', '') : '' + }${text ? '&text=' + text.replaceAll('"', '') : ''}`; } /* 生成一段随机的 Base64 图片编码。 diff --git a/src/mock/random/misc/guid.js b/src/mock/random/misc/guid.js index d2e9fd52..dfb8458a 100644 --- a/src/mock/random/misc/guid.js +++ b/src/mock/random/misc/guid.js @@ -29,11 +29,11 @@ UUID格式:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16) GUID格式:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12) */ -import { random } from 'game-random' +import { random } from 'game-random'; function generateGUID() { const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { const r = random(0, 15); - const v = c == 'x' ? r : (r & 0x3 | 0x8); + const v = c == 'x' ? r : (r & 0x3) | 0x8; return v.toString(16); }); return uuid; From be9d81b1bf7cff75c43e7f61658fc4b8b8ed4887 Mon Sep 17 00:00:00 2001 From: 3446798488 <3446798488@qq.com> Date: Fri, 15 Mar 2024 01:53:49 +0000 Subject: [PATCH 65/65] chore: 2.3.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e8f71704..dcdaa4d8 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "mockjs-ts", "title": "Mock.js", "description": "Mockjs 的 typescript 版本,基础 api 一致", - "version": "2.2.1", + "version": "2.3.0", "homepage": "http://mockjs.com/", "files": [ "dist",